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/highstock.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 +
|
|
@@ -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-
|
|
52339
|
-
*
|
|
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-
|
|
52380
|
-
*
|
|
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(
|
|
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
|
-
|
|
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 (
|
|
54037
|
-
|
|
54038
|
-
|
|
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
|
|
54053
|
+
else {
|
|
54050
54054
|
this.expandButtons();
|
|
54051
54055
|
}
|
|
54052
54056
|
}
|
|
54053
|
-
|
|
54054
|
-
|
|
54057
|
+
// Forced states
|
|
54058
|
+
if (buttonGroup) {
|
|
54059
|
+
if (dropdown === 'always') {
|
|
54055
54060
|
this.collapseButtons();
|
|
54056
54061
|
}
|
|
54057
|
-
|
|
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,
|
|
54109
|
+
const { buttonGroup, dropdownLabel, dropdown } = this;
|
|
54104
54110
|
if (buttonGroup && dropdown) {
|
|
54105
|
-
|
|
54106
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
+
* 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
|
|
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})());
|