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.
- package/bower.json +1 -1
- package/es-modules/Accessibility/Options/A11yDefaults.js +2 -0
- package/es-modules/Core/Color/Color.js +5 -12
- package/es-modules/Core/Renderer/HTML/HTMLElement.js +1 -3
- package/es-modules/Core/Renderer/SVG/SVGElement.js +3 -1
- package/es-modules/Core/Renderer/SVG/SVGLabel.js +8 -11
- package/es-modules/Core/Series/DataLabel.js +3 -1
- package/es-modules/Core/Series/Series.js +13 -15
- package/es-modules/Core/Templating.js +14 -10
- package/es-modules/Core/Time.js +6 -3
- package/es-modules/Core/Utilities.js +1 -1
- package/es-modules/Data/Converters/CSVConverter.js +1 -0
- package/es-modules/Data/Converters/DataConverter.js +31 -0
- package/es-modules/Data/Converters/GoogleSheetsConverter.js +1 -0
- package/es-modules/Data/Converters/HTMLTableConverter.js +1 -0
- package/es-modules/Data/Converters/JSONConverter.js +1 -0
- package/es-modules/Extensions/Boost/BoostSeries.js +13 -7
- package/es-modules/Extensions/DragPanes/AxisResizer.js +1 -1
- package/es-modules/Extensions/SeriesLabel/SeriesLabelDefaults.js +7 -2
- package/es-modules/Series/Bubble/BubbleSeries.js +24 -0
- package/es-modules/Series/Organization/OrganizationSeriesDefaults.js +3 -1
- package/es-modules/Series/Timeline/TimelineSeriesDefaults.js +3 -1
- package/es-modules/Series/Treegraph/TreegraphSeriesDefaults.js +3 -1
- package/es-modules/Series/Treemap/TreemapPoint.js +7 -2
- package/es-modules/Series/Treemap/TreemapSeries.js +154 -53
- package/es-modules/Series/Treemap/TreemapSeriesDefaults.js +126 -4
- package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +1 -0
- package/es-modules/Stock/RangeSelector/RangeSelector.js +68 -72
- package/es-modules/Stock/RangeSelector/RangeSelectorDefaults.js +10 -4
- package/es-modules/masters/indicators/indicators-all.src.js +4 -0
- package/es-modules/tsconfig.tsbuildinfo +1 -1
- package/highcharts-3d.js +2 -2
- package/highcharts-3d.src.js +1 -1
- package/highcharts-gantt.js +5 -5
- package/highcharts-gantt.src.js +140 -141
- package/highcharts-more.js +2 -2
- package/highcharts-more.src.js +25 -1
- package/highcharts.d.ts +281 -762
- package/highcharts.js +3 -3
- package/highcharts.src.d.ts +281 -762
- package/highcharts.src.js +57 -60
- package/highmaps.js +5 -5
- package/highmaps.src.js +84 -63
- package/highstock.js +5 -5
- package/highstock.src.js +140 -141
- package/indicators/acceleration-bands.js +2 -2
- package/indicators/acceleration-bands.src.js +1 -1
- package/indicators/accumulation-distribution.js +2 -2
- package/indicators/accumulation-distribution.src.js +1 -1
- package/indicators/ao.js +2 -2
- package/indicators/ao.src.js +1 -1
- package/indicators/apo.js +2 -2
- package/indicators/apo.src.js +1 -1
- package/indicators/aroon-oscillator.js +2 -2
- package/indicators/aroon-oscillator.src.js +1 -1
- package/indicators/aroon.js +2 -2
- package/indicators/aroon.src.js +1 -1
- package/indicators/atr.js +2 -2
- package/indicators/atr.src.js +1 -1
- package/indicators/bollinger-bands.js +2 -2
- package/indicators/bollinger-bands.src.js +1 -1
- package/indicators/cci.js +2 -2
- package/indicators/cci.src.js +1 -1
- package/indicators/chaikin.js +2 -2
- package/indicators/chaikin.src.js +1 -1
- package/indicators/cmf.js +2 -2
- package/indicators/cmf.src.js +1 -1
- package/indicators/cmo.js +2 -2
- package/indicators/cmo.src.js +1 -1
- package/indicators/dema.js +2 -2
- package/indicators/dema.src.js +1 -1
- package/indicators/disparity-index.js +2 -2
- package/indicators/disparity-index.src.js +1 -1
- package/indicators/dmi.js +2 -2
- package/indicators/dmi.src.js +1 -1
- package/indicators/dpo.js +2 -2
- package/indicators/dpo.src.js +1 -1
- package/indicators/ema.js +1 -1
- package/indicators/ichimoku-kinko-hyo.js +2 -2
- package/indicators/ichimoku-kinko-hyo.src.js +1 -1
- package/indicators/indicators-all.js +2 -2
- package/indicators/indicators-all.src.js +6 -1
- package/indicators/indicators.js +2 -2
- package/indicators/indicators.src.js +1 -1
- package/indicators/keltner-channels.js +2 -2
- package/indicators/keltner-channels.src.js +1 -1
- package/indicators/klinger.js +2 -2
- package/indicators/klinger.src.js +1 -1
- package/indicators/macd.js +2 -2
- package/indicators/macd.src.js +1 -1
- package/indicators/mfi.js +2 -2
- package/indicators/mfi.src.js +1 -1
- package/indicators/momentum.js +2 -2
- package/indicators/momentum.src.js +1 -1
- package/indicators/natr.js +2 -2
- package/indicators/natr.src.js +1 -1
- package/indicators/obv.js +2 -2
- package/indicators/obv.src.js +1 -1
- package/indicators/pivot-points.js +2 -2
- package/indicators/pivot-points.src.js +1 -1
- package/indicators/ppo.js +2 -2
- package/indicators/ppo.src.js +1 -1
- package/indicators/price-channel.js +2 -2
- package/indicators/price-channel.src.js +1 -1
- package/indicators/price-envelopes.js +2 -2
- package/indicators/price-envelopes.src.js +1 -1
- package/indicators/psar.js +2 -2
- package/indicators/psar.src.js +1 -1
- package/indicators/regressions.js +2 -2
- package/indicators/regressions.src.js +1 -1
- package/indicators/roc.js +2 -2
- package/indicators/roc.src.js +1 -1
- package/indicators/rsi.js +2 -2
- package/indicators/rsi.src.js +1 -1
- package/indicators/slow-stochastic.js +2 -2
- package/indicators/slow-stochastic.src.js +1 -1
- package/indicators/stochastic.js +2 -2
- package/indicators/stochastic.src.js +1 -1
- package/indicators/supertrend.js +2 -2
- package/indicators/supertrend.src.js +1 -1
- package/indicators/tema.js +2 -2
- package/indicators/tema.src.js +1 -1
- package/indicators/trendline.js +2 -2
- package/indicators/trendline.src.js +1 -1
- package/indicators/trix.js +2 -2
- package/indicators/trix.src.js +1 -1
- package/indicators/volume-by-price.js +2 -2
- package/indicators/volume-by-price.src.js +2 -1
- package/indicators/vwap.js +2 -2
- package/indicators/vwap.src.js +1 -1
- package/indicators/williams-r.js +2 -2
- package/indicators/williams-r.src.js +1 -1
- package/indicators/wma.js +2 -2
- package/indicators/wma.src.js +1 -1
- package/indicators/zigzag.js +2 -2
- package/indicators/zigzag.src.js +1 -1
- package/modules/accessibility.js +2 -2
- package/modules/accessibility.src.js +3 -1
- package/modules/annotations-advanced.js +3 -3
- package/modules/annotations-advanced.src.js +4 -4
- package/modules/annotations.js +2 -2
- package/modules/annotations.src.js +3 -3
- package/modules/arc-diagram.js +2 -2
- package/modules/arc-diagram.src.js +1 -1
- package/modules/arrow-symbols.js +2 -2
- package/modules/arrow-symbols.src.js +1 -1
- package/modules/boost-canvas.js +2 -2
- package/modules/boost-canvas.src.js +14 -11
- package/modules/boost.js +2 -2
- package/modules/boost.src.js +14 -11
- package/modules/broken-axis.js +2 -2
- package/modules/broken-axis.src.js +1 -1
- package/modules/bullet.js +2 -2
- package/modules/bullet.src.js +1 -1
- package/modules/coloraxis.js +2 -2
- package/modules/coloraxis.src.js +1 -1
- package/modules/current-date-indicator.js +2 -2
- package/modules/current-date-indicator.src.js +1 -1
- package/modules/cylinder.js +2 -2
- package/modules/cylinder.src.js +1 -1
- package/modules/data-tools.js +2 -2
- package/modules/data-tools.src.js +36 -1
- package/modules/data.js +2 -2
- package/modules/data.src.js +1 -1
- package/modules/datagrouping.js +2 -2
- package/modules/datagrouping.src.js +1 -1
- package/modules/debugger.js +2 -2
- package/modules/debugger.src.js +1 -1
- package/modules/dependency-wheel.js +2 -2
- package/modules/dependency-wheel.src.js +1 -1
- package/modules/dotplot.js +2 -2
- package/modules/dotplot.src.js +1 -1
- package/modules/drag-panes.js +2 -2
- package/modules/drag-panes.src.js +2 -2
- package/modules/draggable-points.js +2 -2
- package/modules/draggable-points.src.js +1 -1
- package/modules/drilldown.js +2 -2
- package/modules/drilldown.src.js +1 -1
- package/modules/dumbbell.js +2 -2
- package/modules/dumbbell.src.js +1 -1
- package/modules/export-data.js +2 -2
- package/modules/export-data.src.js +1 -1
- package/modules/exporting.js +2 -2
- package/modules/exporting.src.js +1 -1
- package/modules/flowmap.js +2 -2
- package/modules/flowmap.src.js +1 -1
- package/modules/full-screen.js +2 -2
- package/modules/full-screen.src.js +1 -1
- package/modules/funnel.js +2 -2
- package/modules/funnel.src.js +1 -1
- package/modules/funnel3d.js +2 -2
- package/modules/funnel3d.src.js +1 -1
- package/modules/gantt.js +6 -6
- package/modules/gantt.src.js +82 -80
- package/modules/geoheatmap.js +2 -2
- package/modules/geoheatmap.src.js +1 -1
- package/modules/grid-axis.js +2 -2
- package/modules/grid-axis.src.js +1 -1
- package/modules/heatmap.js +3 -3
- package/modules/heatmap.src.js +2 -2
- package/modules/heikinashi.js +2 -2
- package/modules/heikinashi.src.js +1 -1
- package/modules/histogram-bellcurve.js +2 -2
- package/modules/histogram-bellcurve.src.js +1 -1
- package/modules/hollowcandlestick.js +2 -2
- package/modules/hollowcandlestick.src.js +1 -1
- package/modules/item-series.js +2 -2
- package/modules/item-series.src.js +1 -1
- package/modules/lollipop.js +2 -2
- package/modules/lollipop.src.js +1 -1
- package/modules/map.js +4 -4
- package/modules/map.src.js +26 -2
- package/modules/marker-clusters.js +2 -2
- package/modules/marker-clusters.src.js +1 -1
- package/modules/mouse-wheel-zoom.js +2 -2
- package/modules/mouse-wheel-zoom.src.js +1 -1
- package/modules/navigator.js +2 -2
- package/modules/navigator.src.js +1 -1
- package/modules/networkgraph.js +2 -2
- package/modules/networkgraph.src.js +1 -1
- package/modules/no-data-to-display.js +2 -2
- package/modules/no-data-to-display.src.js +1 -1
- package/modules/offline-exporting.js +2 -2
- package/modules/offline-exporting.src.js +2 -2
- package/modules/organization.js +2 -2
- package/modules/organization.src.js +4 -2
- package/modules/overlapping-datalabels.js +2 -2
- package/modules/overlapping-datalabels.src.js +1 -1
- package/modules/parallel-coordinates.js +2 -2
- package/modules/parallel-coordinates.src.js +1 -1
- package/modules/pareto.js +2 -2
- package/modules/pareto.src.js +1 -1
- package/modules/pathfinder.js +2 -2
- package/modules/pathfinder.src.js +1 -1
- package/modules/pattern-fill.js +2 -2
- package/modules/pattern-fill.src.js +1 -1
- package/modules/pictorial.js +2 -2
- package/modules/pictorial.src.js +1 -1
- package/modules/pointandfigure.js +2 -2
- package/modules/pointandfigure.src.js +1 -1
- package/modules/price-indicator.js +2 -2
- package/modules/price-indicator.src.js +1 -1
- package/modules/pyramid3d.js +2 -2
- package/modules/pyramid3d.src.js +1 -1
- package/modules/renko.js +2 -2
- package/modules/renko.src.js +1 -1
- package/modules/sankey.js +2 -2
- package/modules/sankey.src.js +1 -1
- package/modules/series-label.js +2 -2
- package/modules/series-label.src.js +8 -3
- package/modules/series-on-point.js +2 -2
- package/modules/series-on-point.src.js +1 -1
- package/modules/solid-gauge.js +2 -2
- package/modules/solid-gauge.src.js +1 -1
- package/modules/sonification.js +2 -2
- package/modules/sonification.src.js +1 -1
- package/modules/static-scale.js +2 -2
- package/modules/static-scale.src.js +1 -1
- package/modules/stock-tools.js +2 -2
- package/modules/stock-tools.src.js +3 -3
- package/modules/stock.js +6 -6
- package/modules/stock.src.js +82 -80
- package/modules/streamgraph.js +2 -2
- package/modules/streamgraph.src.js +1 -1
- package/modules/sunburst.js +2 -2
- package/modules/sunburst.src.js +290 -62
- package/modules/textpath.js +2 -2
- package/modules/textpath.src.js +1 -1
- package/modules/tiledwebmap.js +3 -3
- package/modules/tiledwebmap.src.js +1 -1
- package/modules/tilemap.js +2 -2
- package/modules/tilemap.src.js +1 -1
- package/modules/timeline.js +2 -2
- package/modules/timeline.src.js +4 -2
- package/modules/treegraph.js +2 -2
- package/modules/treegraph.src.js +4 -2
- package/modules/treegrid.js +2 -2
- package/modules/treegrid.src.js +1 -1
- package/modules/treemap.js +2 -2
- package/modules/treemap.src.js +288 -60
- package/modules/variable-pie.js +2 -2
- package/modules/variable-pie.src.js +1 -1
- package/modules/variwide.js +2 -2
- package/modules/variwide.src.js +1 -1
- package/modules/vector.js +2 -2
- package/modules/vector.src.js +1 -1
- package/modules/venn.js +2 -2
- package/modules/venn.src.js +1 -1
- package/modules/windbarb.js +2 -2
- package/modules/windbarb.src.js +1 -1
- package/modules/wordcloud.js +2 -2
- package/modules/wordcloud.src.js +1 -1
- package/modules/xrange.js +2 -2
- package/modules/xrange.src.js +1 -1
- package/options/treegraph.d.ts +559 -70
- package/options/treegraph.src.d.ts +559 -70
- package/options/treemap.d.ts +314 -160
- package/options/treemap.src.d.ts +314 -160
- package/options/vbp.d.ts +1 -1
- package/options/vbp.src.d.ts +1 -1
- package/package.json +1 -1
- package/standalone-navigator.js +3 -3
- package/standalone-navigator.src.js +58 -61
- package/themes/avocado.js +2 -2
- package/themes/avocado.src.js +1 -1
- package/themes/brand-dark.js +2 -2
- package/themes/brand-dark.src.js +1 -1
- package/themes/brand-light.js +2 -2
- package/themes/brand-light.src.js +1 -1
- package/themes/dark-blue.js +2 -2
- package/themes/dark-blue.src.js +1 -1
- package/themes/dark-green.js +2 -2
- package/themes/dark-green.src.js +1 -1
- package/themes/dark-unica.js +2 -2
- package/themes/dark-unica.src.js +1 -1
- package/themes/gray.js +2 -2
- package/themes/gray.src.js +1 -1
- package/themes/grid-light.js +2 -2
- package/themes/grid-light.src.js +1 -1
- package/themes/grid.js +2 -2
- package/themes/grid.src.js +1 -1
- package/themes/high-contrast-dark.js +2 -2
- package/themes/high-contrast-dark.src.js +1 -1
- package/themes/high-contrast-light.js +2 -2
- package/themes/high-contrast-light.src.js +1 -1
- package/themes/sand-signika.js +2 -2
- package/themes/sand-signika.src.js +1 -1
- package/themes/skies.js +2 -2
- package/themes/skies.src.js +1 -1
- package/themes/sunset.js +2 -2
- package/themes/sunset.src.js +1 -1
package/highcharts-gantt.src.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Highcharts JS v12.0
|
|
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
|
|
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.
|
|
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
|
-
|
|
7465
|
-
|
|
7466
|
-
|
|
7467
|
-
|
|
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:\.,;\-\/<>\[\]%_
|
|
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:\.,;\-\/<>\[\]%_
|
|
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 (
|
|
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
|
|
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 = {
|
|
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
|
-
((
|
|
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(
|
|
11691
|
-
|
|
11692
|
-
|
|
11693
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
33122
|
-
if (
|
|
33123
|
-
|
|
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
|
|
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-
|
|
51617
|
-
*
|
|
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-
|
|
51658
|
-
*
|
|
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(
|
|
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
|
-
|
|
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 (
|
|
54343
|
-
|
|
54344
|
-
|
|
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
|
|
54359
|
+
else {
|
|
54356
54360
|
this.expandButtons();
|
|
54357
54361
|
}
|
|
54358
54362
|
}
|
|
54359
|
-
|
|
54360
|
-
|
|
54363
|
+
// Forced states
|
|
54364
|
+
if (buttonGroup) {
|
|
54365
|
+
if (dropdown === 'always') {
|
|
54361
54366
|
this.collapseButtons();
|
|
54362
54367
|
}
|
|
54363
|
-
|
|
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,
|
|
54415
|
+
const { buttonGroup, dropdownLabel, dropdown } = this;
|
|
54410
54416
|
if (buttonGroup && dropdown) {
|
|
54411
|
-
|
|
54412
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|