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
@@ -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 +
@@ -51613,8 +51610,11 @@ const rangeSelector = {
51613
51610
  * The alignment of the input box. Allowed properties are `left`,
51614
51611
  * `center`, `right`.
51615
51612
  *
51616
- * @sample {highstock} stock/rangeselector/input-button-position/
51617
- * Alignment
51613
+ * @sample {highstock} stock/rangeselector/input-button-opposite-alignment/
51614
+ * Opposite alignment
51615
+ *
51616
+ * @sample {highstock} stock/rangeselector/input-button-same-alignment/
51617
+ * Same alignment for buttons and input
51618
51618
  *
51619
51619
  * @type {Highcharts.AlignValue}
51620
51620
  * @since 6.0.0
@@ -51654,8 +51654,11 @@ const rangeSelector = {
51654
51654
  * The alignment of the input box. Allowed properties are `left`,
51655
51655
  * `center`, `right`.
51656
51656
  *
51657
- * @sample {highstock} stock/rangeselector/input-button-position/
51658
- * Alignment
51657
+ * @sample {highstock} stock/rangeselector/input-button-opposite-alignment/
51658
+ * Opposite alignment
51659
+ *
51660
+ * @sample {highstock} stock/rangeselector/input-button-same-alignment/
51661
+ * Same alignment for buttons and input
51659
51662
  *
51660
51663
  * @type {Highcharts.AlignValue}
51661
51664
  * @since 6.0.0
@@ -53047,6 +53050,7 @@ const { addEvent: RangeSelector_addEvent, createElement: RangeSelector_createEle
53047
53050
  * @function preferredInputType
53048
53051
  */
53049
53052
  function preferredInputType(format) {
53053
+ const hasTimeKey = (char) => new RegExp(`%[[a-zA-Z]*${char}`).test(format);
53050
53054
  const ms = RangeSelector_isString(format) ?
53051
53055
  format.indexOf('%L') !== -1 :
53052
53056
  // Implemented but not typed as of 2024
@@ -53056,11 +53060,10 @@ function preferredInputType(format) {
53056
53060
  }
53057
53061
  const date = RangeSelector_isString(format) ?
53058
53062
  ['a', 'A', 'd', 'e', 'w', 'b', 'B', 'm', 'o', 'y', 'Y']
53059
- .some((char) => format.indexOf('%' + char) !== -1) :
53063
+ .some(hasTimeKey) :
53060
53064
  format.dateStyle || format.day || format.month || format.year;
53061
53065
  const time = RangeSelector_isString(format) ?
53062
- ['H', 'k', 'I', 'l', 'M', 'S']
53063
- .some((char) => format.indexOf('%' + char) !== -1) :
53066
+ ['H', 'k', 'I', 'l', 'M', 'S'].some(hasTimeKey) :
53064
53067
  format.timeStyle || format.hour || format.minute || format.second;
53065
53068
  if (date && time) {
53066
53069
  return 'datetime-local';
@@ -53107,6 +53110,16 @@ class RangeSelector {
53107
53110
  this.isDirty = false;
53108
53111
  this.buttonOptions = RangeSelector.prototype.defaultButtons;
53109
53112
  this.initialButtonGroupWidth = 0;
53113
+ this.maxButtonWidth = () => {
53114
+ let buttonWidth = 0;
53115
+ this.buttons.forEach((button) => {
53116
+ const bBox = button.getBBox();
53117
+ if (bBox.width > buttonWidth) {
53118
+ buttonWidth = bBox.width;
53119
+ }
53120
+ });
53121
+ return buttonWidth;
53122
+ };
53110
53123
  this.init(chart);
53111
53124
  }
53112
53125
  /* *
@@ -53400,9 +53413,15 @@ class RangeSelector {
53400
53413
  if (selectedIndex !== null) {
53401
53414
  buttonStates[selectedIndex] = 2;
53402
53415
  rangeSelector.setSelected(selectedIndex);
53416
+ if (this.dropdown) {
53417
+ this.dropdown.selectedIndex = selectedIndex + 1;
53418
+ }
53403
53419
  }
53404
53420
  else {
53405
53421
  rangeSelector.setSelected();
53422
+ if (this.dropdown) {
53423
+ this.dropdown.selectedIndex = -1;
53424
+ }
53406
53425
  if (dropdownLabel) {
53407
53426
  dropdownLabel.setState(0);
53408
53427
  dropdownLabel.attr({
@@ -54021,11 +54040,11 @@ class RangeSelector {
54021
54040
  const { buttonPosition, inputPosition, verticalAlign } = options;
54022
54041
  // Get the X offset required to avoid overlapping with the exporting
54023
54042
  // button. This is used both by the buttonGroup and the inputGroup.
54024
- const getXOffsetForExportButton = (group, position) => {
54043
+ const getXOffsetForExportButton = (group, position, rightAligned) => {
54025
54044
  if (navButtonOptions &&
54026
54045
  this.titleCollision(chart) &&
54027
54046
  verticalAlign === 'top' &&
54028
- position.align === 'right' && ((position.y -
54047
+ rightAligned && ((position.y -
54029
54048
  group.getBBox().height - 12) <
54030
54049
  ((navButtonOptions.y || 0) +
54031
54050
  (navButtonOptions.height || 0) +
@@ -54054,7 +54073,8 @@ class RangeSelector {
54054
54073
  }
54055
54074
  plotLeft -= chart.spacing[3];
54056
54075
  // Detect collision between button group and exporting
54057
- const xOffsetForExportButton = getXOffsetForExportButton(buttonGroup, buttonPosition);
54076
+ const xOffsetForExportButton = getXOffsetForExportButton(buttonGroup, buttonPosition, buttonPosition.align === 'right' ||
54077
+ inputPosition.align === 'right');
54058
54078
  this.alignButtonGroup(xOffsetForExportButton);
54059
54079
  if (this.buttonGroup?.translateY) {
54060
54080
  this.dropdownLabel
@@ -54066,7 +54086,8 @@ class RangeSelector {
54066
54086
  let xOffsetForExportButton = 0;
54067
54087
  if (options.inputEnabled && inputGroup) {
54068
54088
  // Detect collision between the input group and exporting button
54069
- xOffsetForExportButton = getXOffsetForExportButton(inputGroup, inputPosition);
54089
+ xOffsetForExportButton = getXOffsetForExportButton(inputGroup, inputPosition, buttonPosition.align === 'right' ||
54090
+ inputPosition.align === 'right');
54070
54091
  if (inputPosition.align === 'left') {
54071
54092
  translateX = plotLeft;
54072
54093
  }
@@ -54219,16 +54240,35 @@ class RangeSelector {
54219
54240
  * @param {number} [width]
54220
54241
  */
54221
54242
  alignButtonGroup(xOffsetForExportButton, width) {
54222
- const { chart, options, buttonGroup } = this;
54243
+ const { chart, options, buttonGroup, dropdown, dropdownLabel } = this;
54223
54244
  const { buttonPosition } = options;
54224
54245
  const plotLeft = chart.plotLeft - chart.spacing[3];
54225
54246
  let translateX = buttonPosition.x - chart.spacing[3];
54247
+ let dropdownTranslateX = chart.plotLeft;
54226
54248
  if (buttonPosition.align === 'right') {
54227
54249
  translateX += xOffsetForExportButton - plotLeft; // #13014
54250
+ if (this.hasVisibleDropdown) {
54251
+ dropdownTranslateX = chart.chartWidth +
54252
+ xOffsetForExportButton -
54253
+ this.maxButtonWidth() - 20;
54254
+ }
54228
54255
  }
54229
54256
  else if (buttonPosition.align === 'center') {
54230
54257
  translateX -= plotLeft / 2;
54258
+ if (this.hasVisibleDropdown) {
54259
+ dropdownTranslateX = chart.chartWidth / 2 -
54260
+ this.maxButtonWidth();
54261
+ }
54231
54262
  }
54263
+ if (dropdown) {
54264
+ RangeSelector_css(dropdown, {
54265
+ left: dropdownTranslateX + 'px',
54266
+ top: buttonGroup?.translateY + 'px'
54267
+ });
54268
+ }
54269
+ dropdownLabel?.attr({
54270
+ x: dropdownTranslateX
54271
+ });
54232
54272
  if (buttonGroup) {
54233
54273
  // Align button group
54234
54274
  buttonGroup.align({
@@ -54282,36 +54322,6 @@ class RangeSelector {
54282
54322
  handleCollision(xOffsetForExportButton) {
54283
54323
  const { chart, buttonGroup, inputGroup } = this;
54284
54324
  const { buttonPosition, dropdown, inputPosition } = this.options;
54285
- const maxButtonWidth = () => {
54286
- let buttonWidth = 0;
54287
- this.buttons.forEach((button) => {
54288
- const bBox = button.getBBox();
54289
- if (bBox.width > buttonWidth) {
54290
- buttonWidth = bBox.width;
54291
- }
54292
- });
54293
- return buttonWidth;
54294
- };
54295
- const groupsOverlap = (buttonGroupWidth) => {
54296
- if (inputGroup?.alignOptions && buttonGroup) {
54297
- const inputGroupX = (inputGroup.alignAttr.translateX +
54298
- inputGroup.alignOptions.x -
54299
- xOffsetForExportButton +
54300
- // `getBBox` for detecing left margin
54301
- inputGroup.getBBox().x +
54302
- // 2px padding to not overlap input and label
54303
- 2);
54304
- const inputGroupWidth = inputGroup.alignOptions.width || 0;
54305
- const buttonGroupX = buttonGroup.alignAttr.translateX +
54306
- buttonGroup.getBBox().x;
54307
- return (buttonGroupX + buttonGroupWidth > inputGroupX) &&
54308
- (inputGroupX + inputGroupWidth > buttonGroupX) &&
54309
- (buttonPosition.y <
54310
- (inputPosition.y +
54311
- inputGroup.getBBox().height));
54312
- }
54313
- return false;
54314
- };
54315
54325
  const moveInputsDown = () => {
54316
54326
  if (inputGroup && buttonGroup) {
54317
54327
  inputGroup.attr({
@@ -54323,47 +54333,43 @@ class RangeSelector {
54323
54333
  });
54324
54334
  }
54325
54335
  };
54326
- if (buttonGroup) {
54327
- if (dropdown === 'always') {
54328
- this.collapseButtons();
54329
- if (groupsOverlap(maxButtonWidth())) {
54330
- // Move the inputs down if there is still a collision
54331
- // after collapsing the buttons
54332
- moveInputsDown();
54333
- }
54334
- return;
54335
- }
54336
- if (dropdown === 'never') {
54337
- this.expandButtons();
54338
- }
54339
- }
54340
54336
  // Detect collision
54341
54337
  if (inputGroup && buttonGroup) {
54342
- if ((inputPosition.align === buttonPosition.align) ||
54343
- // 20 is minimal spacing between elements
54344
- groupsOverlap(this.initialButtonGroupWidth + 20)) {
54338
+ if (inputPosition.align === buttonPosition.align) {
54339
+ moveInputsDown();
54340
+ if (this.initialButtonGroupWidth >
54341
+ chart.plotWidth + xOffsetForExportButton - 20) {
54342
+ this.collapseButtons();
54343
+ }
54344
+ else {
54345
+ this.expandButtons();
54346
+ }
54347
+ }
54348
+ else if (this.initialButtonGroupWidth -
54349
+ xOffsetForExportButton +
54350
+ inputGroup.getBBox().width >
54351
+ chart.plotWidth) {
54345
54352
  if (dropdown === 'responsive') {
54346
54353
  this.collapseButtons();
54347
- if (groupsOverlap(maxButtonWidth())) {
54348
- moveInputsDown();
54349
- }
54350
54354
  }
54351
54355
  else {
54352
54356
  moveInputsDown();
54353
54357
  }
54354
54358
  }
54355
- else if (dropdown === 'responsive') {
54359
+ else {
54356
54360
  this.expandButtons();
54357
54361
  }
54358
54362
  }
54359
- else if (buttonGroup && dropdown === 'responsive') {
54360
- if (this.initialButtonGroupWidth > chart.plotWidth) {
54363
+ // Forced states
54364
+ if (buttonGroup) {
54365
+ if (dropdown === 'always') {
54361
54366
  this.collapseButtons();
54362
54367
  }
54363
- else {
54368
+ if (dropdown === 'never') {
54364
54369
  this.expandButtons();
54365
54370
  }
54366
54371
  }
54372
+ this.alignButtonGroup(xOffsetForExportButton);
54367
54373
  }
54368
54374
  /**
54369
54375
  * Collapse the buttons and show the select element.
@@ -54406,17 +54412,10 @@ class RangeSelector {
54406
54412
  * @function Highcharts.RangeSelector#showDropdown
54407
54413
  */
54408
54414
  showDropdown() {
54409
- const { buttonGroup, chart, dropdownLabel, dropdown } = this;
54415
+ const { buttonGroup, dropdownLabel, dropdown } = this;
54410
54416
  if (buttonGroup && dropdown) {
54411
- const { translateX = 0, translateY = 0 } = buttonGroup, left = chart.plotLeft + translateX, top = translateY;
54412
- dropdownLabel
54413
- .attr({ x: left, y: top })
54414
- .show();
54415
- RangeSelector_css(dropdown, {
54416
- left: left + 'px',
54417
- top: top + 'px',
54418
- visibility: 'inherit'
54419
- });
54417
+ dropdownLabel.show();
54418
+ RangeSelector_css(dropdown, { visibility: 'inherit' });
54420
54419
  this.hasVisibleDropdown = true;
54421
54420
  }
54422
54421
  }
@@ -56395,7 +56394,7 @@ Pathfinder.prototype.algorithms = PathfinderAlgorithms;
56395
56394
 
56396
56395
  ;// ./code/es-modules/masters/modules/pathfinder.src.js
56397
56396
  /**
56398
- * @license Highcharts Gantt JS v12.0.2 (2024-12-04)
56397
+ * @license Highcharts Gantt JS v12.1.0 (2024-12-17)
56399
56398
  * @module highcharts/modules/pathfinder
56400
56399
  * @requires highcharts
56401
56400
  *
@@ -56523,7 +56522,7 @@ const StaticScale = {
56523
56522
 
56524
56523
  ;// ./code/es-modules/masters/modules/static-scale.src.js
56525
56524
  /**
56526
- * @license Highcharts Gantt JS v12.0.2 (2024-12-04)
56525
+ * @license Highcharts Gantt JS v12.1.0 (2024-12-17)
56527
56526
  * @module highcharts/modules/static-scale
56528
56527
  * @requires highcharts
56529
56528
  *
@@ -57334,7 +57333,7 @@ Series_SeriesRegistry.registerSeriesType('xrange', XRangeSeries);
57334
57333
 
57335
57334
  ;// ./code/es-modules/masters/modules/xrange.src.js
57336
57335
  /**
57337
- * @license Highcharts JS v12.0.2 (2024-12-04)
57336
+ * @license Highcharts JS v12.1.0 (2024-12-17)
57338
57337
  * @module highcharts/modules/xrange
57339
57338
  * @requires highcharts
57340
57339
  *
@@ -60882,7 +60881,7 @@ Series_SeriesRegistry.registerSeriesType('gantt', GanttSeries);
60882
60881
 
60883
60882
  ;// ./code/es-modules/masters/modules/gantt.src.js
60884
60883
  /**
60885
- * @license Highcharts Gantt JS v12.0.2 (2024-12-04)
60884
+ * @license Highcharts Gantt JS v12.1.0 (2024-12-17)
60886
60885
  * @module highcharts/modules/gantt
60887
60886
  * @requires highcharts
60888
60887
  *
@@ -60926,7 +60925,7 @@ gantt_src_G.Scrollbar.compose(gantt_src_G.Axis);
60926
60925
 
60927
60926
  ;// ./code/es-modules/masters/highcharts-gantt.src.js
60928
60927
  /**
60929
- * @license Highcharts Gantt JS v12.0.2 (2024-12-04)
60928
+ * @license Highcharts Gantt JS v12.1.0 (2024-12-17)
60930
60929
  * @module highcharts/highcharts-gantt
60931
60930
  *
60932
60931
  * (c) 2017-2024 Lars Cabrera, Torstein Honsi, Jon Arild Nygard & Oystein Moseng