UNPKG

highcharts

Version:
1,322 lines 113 kB
/* * * * (c) 2010-2025 Torstein Honsi * * License: www.highcharts.com/license * * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!! * * */ 'use strict'; import ChartDefaults from './Chart/ChartDefaults.js'; import H from './Globals.js'; const { isTouchDevice } = H; import Palettes from './Color/Palettes.js'; import Time from './Time.js'; import U from './Utilities.js'; const { fireEvent, merge } = U; /* * * * API Options * * */ /** * Global default settings. * * @name Highcharts.defaultOptions * @type {Highcharts.Options} */ /** * @optionparent * @private */ const defaultOptions = { /** * An array containing the default colors for the chart's series. When * all colors are used, new colors are pulled from the start again. * * Default colors can also be set on a series or series.type basis, * see [column.colors](#plotOptions.column.colors), * [pie.colors](#plotOptions.pie.colors). * * In styled mode, the colors option doesn't exist. Instead, colors * are defined in CSS and applied either through series or point class * names, or through the [chart.colorCount](#chart.colorCount) option. * * @sample {highcharts} highcharts/chart/colors/ * Assign a global color theme * @sample highcharts/members/theme-v10/ * Latest release styled like version 10 * * @type {Array<(Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject)>} * @default [ * "#2caffe", * "#544fc5", * "#00e272", * "#fe6a35", * "#6b8abc", * "#d568fb", * "#2ee0ca", * "#fa4b42", * "#feb56a", * "#91e8e1" * ] */ colors: Palettes.colors, /** * Styled mode only. Configuration object for adding SVG definitions for * reusable elements. See [gradients, shadows and * patterns](https://www.highcharts.com/docs/chart-design-and-style/gradients-shadows-and-patterns) * for more information and code examples. * * @type {*} * @since 5.0.0 * @apioption defs */ /** * @ignore-option */ symbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'], /** * An object containing language-related strings and settings. A typical * setup uses `Highcharts.setOptions` to make the options apply to all * charts in the same page. * * ```js * Highcharts.setOptions({ * lang: { * locale: 'fr' * } * }); * ``` * * @optionparent lang */ lang: { weekFrom: 'week from', /** * The default chart title. * * @since 12.2.0 */ chartTitle: 'Chart title', /** * The browser locale to use for date and number formatting. The actual * locale used for each chart is determined in three steps: * 1. If this `lang.locale` option is specified, it is used. * 2. Else, look for the closest ancestor HTML element with a `lang` * attribute, typically the `<html>` element. * 3. If no 'lang' attribute is found, use the default browser locale. * * Use `en-GB`, British English, for approximate consistency with * Highcharts v < 12. * * @sample highcharts/lang/locale/ * Set the locale using the `lang.locale` option * @sample highcharts/lang/locale-attribute/ * Pick up the locale from the HTML `lang` attribute * @sample highcharts/members/highcharts-numberformat * Arabic locale with digits and dates * * * @since 12.0.0 * @type {string|Array<string>} */ locale: void 0, /** * The loading text that appears when the chart is set into the loading * state following a call to `chart.showLoading`. */ loading: 'Loading...', /** * An array containing the months names. Corresponds to the `%B` format * in `Highcharts.dateFormat()`. Defaults to 'undefined', * meaning the default month names are used according to the * `lang.locale` setting. * * @type {Array<string>} */ months: void 0, /** * [Format string](https://www.highcharts.com/docs/chart-concepts/templating) for the default series name. * * @since 12.2.0 */ seriesName: 'Series {add index 1}', /** * An array containing the months names in abbreviated form. Corresponds * to the `%b` format in `Highcharts.dateFormat()`. Defaults to * 'undefined', meaning the default short month names are used according * to the `lang.locale` setting. * * @type {Array<string>} */ shortMonths: void 0, /** * An array containing the weekday names. Defaults to 'undefined', * meaning the default weekday names are used according to the * `lang.locale` setting. * * @type {Array<string>} */ weekdays: void 0, /** * Short week days, starting Sunday. Defaults to 'undefined', meaning * the default short weekday names are used according to the * `lang.locale` setting. * * @sample highcharts/lang/shortweekdays/ * Finnish two-letter abbreviations * * @type {Array<string>} * @since 4.2.4 * @apioption lang.shortWeekdays */ /** * What to show in a date field for invalid dates. Defaults to an empty * string. * * @type {string} * @since 4.1.8 * @product highcharts highstock * @apioption lang.invalidDate */ /** * The title appearing on hovering the zoom in button. The text itself * defaults to "+" and can be changed in the button options. * * @type {string} * @default Zoom in * @product highmaps * @apioption lang.zoomIn */ /** * The title appearing on hovering the zoom out button. The text itself * defaults to "-" and can be changed in the button options. * * @type {string} * @default Zoom out * @product highmaps * @apioption lang.zoomOut */ /** * The default decimal point used in the `Highcharts.numberFormat` * method unless otherwise specified in the function arguments. Defaults * to the locale decimal point as determined by `lang.locale`. * * @type {string} * @default undefined * @since 1.2.2 * @apioption lang.decimalPoint */ /** * [Metric prefixes](https://en.wikipedia.org/wiki/Metric_prefix) used * to shorten high numbers in axis labels. Replacing any of the * positions with `null` causes the full number to be written. Setting * `numericSymbols` to `undefined` disables shortening altogether. * * @sample {highcharts} highcharts/lang/numericsymbols/ * Replacing the symbols with text * @sample {highstock} highcharts/lang/numericsymbols/ * Replacing the symbols with text * * @type {Array<string>} * @default ["k", "M", "G", "T", "P", "E"] * @since 2.3.0 */ numericSymbols: ['k', 'M', 'G', 'T', 'P', 'E'], /** * The default name for a pie slice (point). * @since 12.2.0 */ pieSliceName: 'Slice', /** * The magnitude of [numericSymbols](#lang.numericSymbol) replacements. * Use 10000 for Japanese, Korean and various Chinese locales, which * use symbols for 10^4, 10^8 and 10^12. * * @sample highcharts/lang/numericsymbolmagnitude/ * 10000 magnitude for Japanese * * @type {number} * @default 1000 * @since 5.0.3 * @apioption lang.numericSymbolMagnitude */ /** * The default thousands separator used in the `Highcharts.numberFormat` * method unless otherwise specified in the function arguments. Defaults * to the locale thousands separator as determined by `lang.locale`. * * @type {string} * @default undefined * @since 1.2.2 * @apioption lang.thousandsSep */ /** * The text for the label appearing when a chart is zoomed. * * @since 1.2.4 */ resetZoom: 'Reset zoom', /** * The tooltip title for the label appearing when a chart is zoomed. * * @since 1.2.4 */ /** * The default title of the Y axis * * @since 12.2.0 */ yAxisTitle: 'Values', resetZoomTitle: 'Reset zoom level 1:1' }, /** * Global options that don't apply to each chart. These options must be set * using the `Highcharts.setOptions` method. * * ```js * Highcharts.setOptions({ * global: { * buttonTheme: { * fill: '#d0d0d0' * } * } * }); * ``` */ global: { /** * General theme for buttons. This applies to the zoom button, exporting * context menu, map navigation, range selector buttons and custom * buttons generated using the `SVGRenderer.button` function. However, * each of these may be overridden with more specific options. * * @sample highcharts/global/buttontheme * General button theme * @since 11.4.2 */ buttonTheme: { /** * The fill color for buttons */ fill: "#f7f7f7" /* Palette.neutralColor3 */, /** * The padding of buttons */ padding: 8, /** * The border radius for buttons */ r: 2, /** * The stroke color for buttons */ stroke: "#cccccc" /* Palette.neutralColor20 */, /** * The stroke width for buttons */ 'stroke-width': 1, /** * CSS styling for the buttons' text */ style: { color: "#333333" /* Palette.neutralColor80 */, cursor: 'pointer', fontSize: '0.8em', fontWeight: 'normal' }, /** * State overrides for the buttons */ states: { /** * Hover state overrides for the buttons are applied in addition * to the normal state options */ hover: { fill: "#e6e6e6" /* Palette.neutralColor10 */ }, /** * Select state overrides for the buttons are applied in * addition to the normal state options */ select: { fill: "#e6e9ff" /* Palette.highlightColor10 */, style: { color: "#000000" /* Palette.neutralColor100 */, fontWeight: 'bold' } }, /** * Disabled state overrides for the buttons are applied in * addition to the normal state options */ disabled: { /** * Disabled state CSS style overrides for the buttons' text */ style: { color: "#cccccc" /* Palette.neutralColor20 */ } } } } }, /** * Time options that can apply globally or to individual charts. These * settings affect how `datetime` axes are laid out, how tooltips are * formatted, how series * [pointIntervalUnit](#plotOptions.series.pointIntervalUnit) works and how * the Highcharts Stock range selector handles time. * * The common use case is that all charts in the same Highcharts object * share the same time settings, in which case the global settings are set * using `setOptions`. * * ```js * // Apply time settings globally * Highcharts.setOptions({ * time: { * timezone: 'Europe/London' * } * }); * // Apply time settings by instance * const chart = Highcharts.chart('container', { * time: { * timezone: 'America/New_York' * }, * series: [{ * data: [1, 4, 3, 5] * }] * }); * * // Use the Time object * console.log( * 'Current time in New York', * chart.time.dateFormat('%Y-%m-%d %H:%M:%S', Date.now()) * ); * ``` * * Since v6.0.5, the time options were moved from the `global` object to the * `time` object, and time options can be set on each individual chart. * * @sample {highcharts|highstock} * highcharts/time/timezone/ * Set the timezone globally * @sample {highcharts} * highcharts/time/individual/ * Set the timezone per chart instance * @sample {highstock} * stock/time/individual/ * Set the timezone per chart instance * * @since 6.0.5 * @optionparent time */ time: { /** * A custom `Date` class for advanced date handling. For example, * [JDate](https://github.com/tahajahangir/jdate) can be hooked in to * handle Jalali dates. * * @type {*} * @since 4.0.4 * @product highcharts highstock gantt */ Date: void 0, /** * A named time zone. Supported time zone names rely on the browser * implementations, as described in the [mdn * docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#timezone). * If the given time zone is not recognized by the browser, Highcharts * provides a warning and falls back to returning a 0 offset, * corresponding to the UTC time zone. * * The time zone affects axis scaling, tickmark placement and * time display in `Highcharts.dateFormat`. * * Setting `timezone` to `undefined` falls back to the default browser * timezone setting. * * Until v11.2.0, this option depended on moment.js. * * @sample {highcharts|highstock} highcharts/time/timezone/ Europe/Oslo * * @type {string} * @since 5.0.7 * @product highcharts highstock gantt */ timezone: 'UTC', /** * The timezone offset in minutes. Positive values are west, negative * values are east of UTC, as in the ECMAScript * [getTimezoneOffset](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset) * method. Use this to display UTC based data in a predefined time zone. * * This option is deprecated as of v11.4.1 and will be removed in a * future release. Use the [time.timezone](#time.timezone) option * instead. * * @see [time.getTimezoneOffset](#time.getTimezoneOffset) * * @sample {highcharts|highstock} highcharts/time/timezoneoffset/ * Timezone offset * * @since 3.0.8 * @deprecated 11.4.2 * @product highcharts highstock gantt */ timezoneOffset: 0, /** * Whether to use UTC time for axis scaling, tickmark placement and * time display in `Highcharts.dateFormat`. Advantages of using UTC * is that the time displays equally regardless of the user agent's * time zone settings. Local time can be used when the data is loaded * in real time or when correct Daylight Saving Time transitions are * required. * * Setting `useUTC` to true is equivalent to setting `time.timezone` to * `"UTC"`. Setting `useUTC` to false is equivalent to setting * `time.timezone` to `undefined`. * * @see [time.timezone](#timezone) * * @sample {highcharts} highcharts/time/useutc-true/ * True by default * @sample {highcharts} highcharts/time/useutc-false/ * False * * @deprecated */ useUTC: void 0 }, chart: ChartDefaults, /** * The chart's main title. * * @sample {highmaps} maps/title/title/ * Title options demonstrated * @sample {highcharts} highcharts/title/align-auto/ * Default title alignment */ title: { /** * When the title is floating, the plot area will not move to make space * for it. * * @sample {highcharts} highcharts/chart/zoomtype-none/ * False by default * @sample {highcharts} highcharts/title/floating/ * True - title on top of the plot area * @sample {highstock} stock/chart/title-floating/ * True - title on top of the plot area * * @type {boolean} * @default false * @since 2.1 * @apioption title.floating */ /** * Whether to * [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html) * to render the text. * * @type {boolean} * @default false * @apioption title.useHTML */ /** * The vertical alignment of the title. Can be one of `"top"`, * `"middle"` and `"bottom"`. When a value is given, the title behaves * as if [floating](#title.floating) were `true`. * * @sample {highcharts} highcharts/title/verticalalign/ * Chart title in bottom right corner * @sample {highstock} stock/chart/title-verticalalign/ * Chart title in bottom right corner * * @type {Highcharts.VerticalAlignValue} * @since 2.1 * @apioption title.verticalAlign */ /** * The x position of the title relative to the alignment within * `chart.spacingLeft` and `chart.spacingRight`. * * @sample {highcharts} highcharts/title/align/ * Aligned to the plot area (x = 70px = margin left - spacing * left) * @sample {highstock} stock/chart/title-align/ * Aligned to the plot area (x = 50px = margin left - spacing * left) * * @type {number} * @default 0 * @since 2.0 * @apioption title.x */ /** * The y position of the title relative to the alignment within * [chart.spacingTop](#chart.spacingTop) and [chart.spacingBottom]( * #chart.spacingBottom). By default it depends on the font size. * * @sample {highcharts} highcharts/title/y/ * Title inside the plot area * @sample {highstock} stock/chart/title-verticalalign/ * Chart title in bottom right corner * * @type {number} * @since 2.0 * @apioption title.y */ /** * CSS styles for the title. Use this for font styling, but use `align`, * `x` and `y` for text alignment. * * Note that the default [title.minScale](#title.minScale) option also * affects the rendered font size. In order to keep the font size fixed * regardless of title length, set `minScale` to 1. * * In styled mode, the title style is given in the `.highcharts-title` * class. * * @sample {highcharts} highcharts/title/style/ * Custom color and weight * @sample {highstock} stock/chart/title-style/ * Custom color and weight * @sample highcharts/css/titles/ * Styled mode * * @type {Highcharts.CSSObject} * @default {highcharts|highmaps} { "color": "#333333", "fontSize": "18px" } * @default {highstock} { "color": "#333333", "fontSize": "16px" } */ style: { color: "#333333" /* Palette.neutralColor80 */, fontWeight: 'bold' }, /** * The title of the chart. To disable the title, set the `text` to * `undefined`. * * @sample {highcharts} highcharts/title/text/ * Custom title * @sample {highstock} stock/chart/title-text/ * Custom title * * @default {highcharts|highmaps} Chart title * @default {highstock} undefined */ text: 'Chart title', /** * The horizontal alignment of the title. Can be one of "left", "center" * and "right". * * Since v12 it defaults to `undefined`, meaning the alignment is * computed for best fit. If the text fits in one line, it aligned to * the center, but if it is wrapped into multiple lines, it is aligned * to the left. * * @sample {highcharts} highcharts/title/align-auto/ * Default alignment, dynamic * @sample {highcharts} highcharts/title/align/ * Aligned to the plot area (x = 70px = margin left - spacing * left) * @sample {highstock} stock/chart/title-align/ * Aligned to the plot area (x = 50px = margin left - spacing * left) * * @type {Highcharts.AlignValue} * @default undefined * @since 2.0 * @apioption title.align */ /** * The margin between the title and the plot area, or if a subtitle * is present, the margin between the subtitle and the plot area. * * @sample {highcharts} highcharts/title/margin-50/ * A chart title margin of 50 * @sample {highcharts} highcharts/title/margin-subtitle/ * The same margin applied with a subtitle * @sample {highstock} stock/chart/title-margin/ * A chart title margin of 50 * * @since 2.1 */ margin: 15, /** * When the title is too wide to fit in the chart, the default behavior * is to scale it down to fit, or apply word wrap if it is scaled down * to `minScale` and still doesn't fit. * * The default value reflects the scale, when using default font sizes, * when the title font size matches that of the subtitle. The title * still stands out as it is bold by default. * * Set `minScale` to 1 to avoid downscaling. * * @sample {highcharts} highcharts/title/align-auto/ * Downscaling demonstrated * * @since 12.0.0 */ minScale: 0.67 }, /** * The chart's subtitle. This can be used both to display a subtitle below * the main title, and to display random text anywhere in the chart. The * subtitle can be updated after chart initialization through the * `Chart.setTitle` method. * * @sample {highcharts} highcharts/title/align-auto/ * Default title alignment * @sample {highmaps} maps/title/subtitle/ * Subtitle options demonstrated */ subtitle: { /** * The horizontal alignment of the subtitle. Can be one of "left", * "center" and "right". Since v12, it defaults to `undefined`, meaning * the actual alignment is inherited from the alignment of the main * title. * * @sample {highcharts} highcharts/title/align-auto/ * Default title and subtitle alignment, dynamic * @sample {highcharts} highcharts/subtitle/align/ * Footnote at right of plot area * @sample {highstock} stock/chart/subtitle-footnote * Footnote at bottom right of plot area * * @type {Highcharts.AlignValue} * @default undefined * @since 2.0 * @apioption subtitle.align */ /** * When the subtitle is floating, the plot area will not move to make * space for it. * * @sample {highcharts} highcharts/subtitle/floating/ * Floating title and subtitle * @sample {highstock} stock/chart/subtitle-footnote * Footnote floating at bottom right of plot area * * @type {boolean} * @default false * @since 2.1 * @apioption subtitle.floating */ /** * CSS styles for the title. * * In styled mode, the subtitle style is given in the * `.highcharts-subtitle` class. * * @sample {highcharts} highcharts/subtitle/style/ * Custom color and weight * @sample {highcharts} highcharts/css/titles/ * Styled mode * @sample {highstock} stock/chart/subtitle-style * Custom color and weight * @sample {highstock} highcharts/css/titles/ * Styled mode * @sample {highmaps} highcharts/css/titles/ * Styled mode * * @type {Highcharts.CSSObject} * @default {"color": "#666666"} * @apioption subtitle.style */ /** * Whether to * [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html) * to render the text. * * @type {boolean} * @default false * @apioption subtitle.useHTML */ /** * The vertical alignment of the title. Can be one of `"top"`, * `"middle"` and `"bottom"`. When middle, the subtitle behaves as * floating. * * @sample {highcharts} highcharts/subtitle/verticalalign/ * Footnote at the bottom right of plot area * @sample {highstock} stock/chart/subtitle-footnote * Footnote at the bottom right of plot area * * @type {Highcharts.VerticalAlignValue} * @since 2.1 * @apioption subtitle.verticalAlign */ /** * The x position of the subtitle relative to the alignment within * `chart.spacingLeft` and `chart.spacingRight`. * * @sample {highcharts} highcharts/subtitle/align/ * Footnote at right of plot area * @sample {highstock} stock/chart/subtitle-footnote * Footnote at the bottom right of plot area * * @type {number} * @default 0 * @since 2.0 * @apioption subtitle.x */ /** * The y position of the subtitle relative to the alignment within * `chart.spacingTop` and `chart.spacingBottom`. By default the subtitle * is laid out below the title unless the title is floating. * * @sample {highcharts} highcharts/subtitle/verticalalign/ * Footnote at the bottom right of plot area * @sample {highstock} stock/chart/subtitle-footnote * Footnote at the bottom right of plot area * * @type {number} * @since 2.0 * @apioption subtitle.y */ /** * CSS styles for the title. * * In styled mode, the subtitle style is given in the * `.highcharts-subtitle` class. * * @sample {highcharts} highcharts/subtitle/style/ * Custom color and weight * @sample {highcharts} highcharts/css/titles/ * Styled mode * @sample {highstock} stock/chart/subtitle-style * Custom color and weight * @sample {highstock} highcharts/css/titles/ * Styled mode * @sample {highmaps} highcharts/css/titles/ * Styled mode * * @type {Highcharts.CSSObject} * @default {"color": "#666666"} */ style: { color: "#666666" /* Palette.neutralColor60 */, /** * @type {number|string} */ fontSize: '0.8em' }, /** * The subtitle of the chart. * * @sample {highcharts|highstock} highcharts/subtitle/text/ * Custom subtitle * @sample {highcharts|highstock} highcharts/subtitle/text-formatted/ * Formatted and linked text. */ text: '' }, /** * The chart's caption, which will render below the chart and will be part * of exported charts. The caption can be updated after chart initialization * through the `Chart.update` or `Chart.caption.update` methods. * * @sample highcharts/caption/text/ * A chart with a caption * @since 7.2.0 */ caption: { /** * When the caption is floating, the plot area will not move to make * space for it. * * @type {boolean} * @default false * @apioption caption.floating */ /** * The margin between the caption and the plot area. */ margin: 15, /** * Whether to * [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html) * to render the text. * * @type {boolean} * @default false * @apioption caption.useHTML */ /** * The x position of the caption relative to the alignment within * `chart.spacingLeft` and `chart.spacingRight`. * * @type {number} * @default 0 * @apioption caption.x */ /** * The y position of the caption relative to the alignment within * `chart.spacingTop` and `chart.spacingBottom`. * * @type {number} * @apioption caption.y */ /** * CSS styles for the caption. * * In styled mode, the caption style is given in the * `.highcharts-caption` class. * * @sample {highcharts} highcharts/css/titles/ * Styled mode * * @type {Highcharts.CSSObject} * @default {"color": "#666666"} */ style: { color: "#666666" /* Palette.neutralColor60 */, /** * @type {number|string} */ fontSize: '0.8em' }, /** * The caption text of the chart. * * @sample {highcharts} highcharts/caption/text/ * Custom caption */ text: '', /** * The horizontal alignment of the caption. Can be one of "left", * "center" and "right". * * @type {Highcharts.AlignValue} */ align: 'left', /** * The vertical alignment of the caption. Can be one of `"top"`, * `"middle"` and `"bottom"`. When middle, the caption behaves as * floating. * * @type {Highcharts.VerticalAlignValue} */ verticalAlign: 'bottom' }, /** * The plotOptions is a wrapper object for config objects for each series * type. The config objects for each series can also be overridden for * each series item as given in the series array. * * Configuration options for the series are given in three levels. Options * for all series in a chart are given in the [plotOptions.series]( * #plotOptions.series) object. Then options for all series of a specific * type are given in the plotOptions of that type, for example * `plotOptions.line`. Next, options for one single series are given in * [the series array](#series). */ plotOptions: {}, /** * The legend is a box containing a symbol and name for each series * item or point item in the chart. Each series (or points in case * of pie charts) is represented by a symbol and its name in the legend. * * It is possible to override the symbol creator function and create * [custom legend symbols](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/studies/legend-custom-symbol/). * * @productdesc {highmaps} * A Highmaps legend by default contains one legend item per series, but if * a `colorAxis` is defined, the axis will be displayed in the legend. * Either as a gradient, or as multiple legend items for `dataClasses`. */ legend: { /** * The background color of the legend. * * @see In styled mode, the legend background fill can be applied with * the `.highcharts-legend-box` class. * * @sample {highcharts} highcharts/legend/backgroundcolor/ * Yellowish background * @sample {highstock} stock/legend/align/ * Various legend options * @sample {highmaps} maps/legend/border-background/ * Border and background options * * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject} * @apioption legend.backgroundColor */ /** * The width of the drawn border around the legend. * * @see In styled mode, the legend border stroke width can be applied * with the `.highcharts-legend-box` class. * * @sample {highcharts} highcharts/legend/borderwidth/ * 2px border width * @sample {highstock} stock/legend/align/ * Various legend options * @sample {highmaps} maps/legend/border-background/ * Border and background options * * @type {number} * @default 0 * @apioption legend.borderWidth */ /** * Enable or disable the legend. There is also a series-specific option, * [showInLegend](#plotOptions.series.showInLegend), that can hide the * series from the legend. In some series types this is `false` by * default, so it must set to `true` in order to show the legend for the * series. * * @sample {highcharts} highcharts/legend/enabled-false/ Legend disabled * @sample {highstock} stock/legend/align/ Various legend options * @sample {highmaps} maps/legend/enabled-false/ Legend disabled * * @default {highstock} false * @default {highmaps} true * @default {gantt} false */ enabled: true, /** * The horizontal alignment of the legend box within the chart area. * Valid values are `left`, `center` and `right`. * * In the case that the legend is aligned in a corner position, the * `layout` option will determine whether to place it above/below * or on the side of the plot area. * * @sample {highcharts} highcharts/legend/align/ * Legend at the right of the chart * @sample {highstock} stock/legend/align/ * Various legend options * @sample {highmaps} maps/legend/alignment/ * Legend alignment * * @type {Highcharts.AlignValue} * @since 2.0 */ align: 'center', /** * If the [layout](legend.layout) is `horizontal` and the legend items * span over two lines or more, whether to align the items into vertical * columns. Setting this to `false` makes room for more items, but will * look more messy. * * @since 6.1.0 */ alignColumns: true, /** * A CSS class name to apply to the legend group. */ className: 'highcharts-no-tooltip', /** * General event handlers for the legend. These event hooks can * also be attached to the legend at run time using the * `Highcharts.addEvent` function. * * @declare Highcharts.LegendEventsOptionsObject * * @private */ events: {}, /** * Fires when the legend item belonging to the series is clicked. One * parameter, `event`, is passed to the function. The default action * is to toggle the visibility of the series, point or data class. This * can be prevented by returning `false` or calling * `event.preventDefault()`. * * @sample {highcharts} highcharts/legend/itemclick/ * Confirm hiding and showing * @sample {highcharts} highcharts/legend/pie-legend-itemclick/ * Confirm toggle visibility of pie slices * * @type {Highcharts.LegendItemClickCallbackFunction} * @context Highcharts.Legend * @apioption legend.events.itemClick */ /** * When the legend is floating, the plot area ignores it and is allowed * to be placed below it. * * @sample {highcharts} highcharts/legend/floating-false/ * False by default * @sample {highcharts} highcharts/legend/floating-true/ * True * @sample {highmaps} maps/legend/alignment/ * Floating legend * * @type {boolean} * @default false * @since 2.1 * @apioption legend.floating */ /** * The layout of the legend items. Can be one of `horizontal` or * `vertical` or `proximate`. When `proximate`, the legend items will be * placed as close as possible to the graphs they're representing, * except in inverted charts or when the legend position doesn't allow * it. * * @sample {highcharts} highcharts/legend/layout-horizontal/ * Horizontal by default * @sample {highcharts} highcharts/legend/layout-vertical/ * Vertical * @sample highcharts/legend/layout-proximate * Labels proximate to the data * @sample {highstock} stock/legend/layout-horizontal/ * Horizontal by default * @sample {highmaps} maps/legend/padding-itemmargin/ * Vertical with data classes * @sample {highmaps} maps/legend/layout-vertical/ * Vertical with color axis gradient * * @validvalue ["horizontal", "vertical", "proximate"] */ layout: 'horizontal', /** * In a legend with horizontal layout, the itemDistance defines the * pixel distance between each item. * * @sample {highcharts} highcharts/legend/layout-horizontal/ * 50px item distance * @sample {highstock} highcharts/legend/layout-horizontal/ * 50px item distance * * @type {number} * @default {highcharts} 20 * @default {highstock} 20 * @default {highmaps} 8 * @since 3.0.3 * @apioption legend.itemDistance */ /** * The pixel bottom margin for each legend item. * * @sample {highcharts|highstock} highcharts/legend/padding-itemmargin/ * Padding and item margins demonstrated * @sample {highmaps} maps/legend/padding-itemmargin/ * Padding and item margins demonstrated * * @since 2.2.0 */ itemMarginBottom: 2, /** * The pixel top margin for each legend item. * * @sample {highcharts|highstock} highcharts/legend/padding-itemmargin/ * Padding and item margins demonstrated * @sample {highmaps} maps/legend/padding-itemmargin/ * Padding and item margins demonstrated * * @since 2.2.0 */ itemMarginTop: 2, /** * The width for each legend item. By default the items are laid out * successively. In a [horizontal layout](legend.layout), if the items * are laid out across two rows or more, they will be vertically aligned * depending on the [legend.alignColumns](legend.alignColumns) option. * * @sample {highcharts} highcharts/legend/itemwidth-default/ * Undefined by default * @sample {highcharts} highcharts/legend/itemwidth-80/ * 80 for aligned legend items * * @type {number} * @since 2.0 * @apioption legend.itemWidth */ /** * A [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting) * for each legend label. Available variables relates to properties on * the series, or the point in case of pies. * * @type {string} * @default {name} * @since 1.3 * @apioption legend.labelFormat */ /* eslint-disable valid-jsdoc */ /** * Callback function to format each of the series' labels. The `this` * keyword refers to the series object, or the point object in case of * pie charts. By default the series or point name is printed. * * @productdesc {highmaps} * In Highmaps the context can also be a data class in case of a * `colorAxis`. * * @sample {highcharts} highcharts/legend/labelformatter/ * Add text * @sample {highmaps} maps/legend/labelformatter/ * Data classes with label formatter * * @type {Highcharts.FormatterCallbackFunction<Point|Series>} */ labelFormatter: function () { // eslint-enable valid-jsdoc return this.name; }, /** * Line height for the legend items. Deprecated as of 2.1\. Instead, * the line height for each item can be set using * `itemStyle.lineHeight`, and the padding between items using * `itemMarginTop` and `itemMarginBottom`. * * @sample {highcharts} highcharts/legend/lineheight/ * Setting padding * * @deprecated * * @type {number} * @default 16 * @since 2.0 * @product highcharts gantt * @apioption legend.lineHeight */ /** * If the plot area sized is calculated automatically and the legend is * not floating, the legend margin is the space between the legend and * the axis labels or plot area. * * @sample {highcharts} highcharts/legend/margin-default/ * 12 pixels by default * @sample {highcharts} highcharts/legend/margin-30/ * 30 pixels * * @type {number} * @default 12 * @since 2.1 * @apioption legend.margin */ /** * Maximum pixel height for the legend. When the maximum height is * extended, navigation will show. * * @type {number} * @since 2.3.0 * @apioption legend.maxHeight */ /** * The color of the drawn border around the legend. * * @see In styled mode, the legend border stroke can be applied with the * `.highcharts-legend-box` class. * * @sample {highcharts} highcharts/legend/bordercolor/ * Brown border * @sample {highstock} stock/legend/align/ * Various legend options * @sample {highmaps} maps/legend/border-background/ * Border and background options * * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject} */ borderColor: "#999999" /* Palette.neutralColor40 */, /** * The border corner radius of the legend. * * @sample {highcharts} highcharts/legend/borderradius-default/ * Square by default * @sample {highcharts} highcharts/legend/borderradius-round/ * 5px rounded * @sample {highmaps} maps/legend/border-background/ * Border and background options */ borderRadius: 0, /** * Options for the paging or navigation appearing when the legend is * overflown. Navigation works well on screen, but not in static * exported images. One way of working around that is to * [increase the chart height in * export](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/legend/navigation-enabled-false/). * * @sample highcharts/legend/scrollable-vertical/ * Legend with vertical scrollable extension * @sample highcharts/legend/scrollable-horizontal/ * Legend with horizontal scrollable extension * */ navigation: { /** * How to animate the pages when navigating up or down. A value of * `true` applies the default navigation given in the * `chart.animation` option. Additional options can be given as an * object containing values for easing and duration. * * @sample {highcharts} highcharts/legend/navigation/ * Legend page navigation demonstrated * @sample {highstock} highcharts/legend/navigation/ * Legend page navigation demonstrated * * @type {boolean|Partial<Highcharts.AnimationOptionsObject>} * @default true * @since 2.2.4 * @apioption legend.navigation.animation */ /** * The pixel size of the up and down arrows in the legend paging * navigation. * * @sample {highcharts} highcharts/legend/navigation/ * Legend page navigation demonstrated * @sample {highstock} highcharts/legend/navigation/ * Legend page navigation demonstrated * * @type {number} * @default 12 * @since 2.2.4 * @apioption legend.navigation.arrowSize */ /** * Whether to enable the legend navigation. In most cases, disabling * the navigation results in an unwanted overflow. * * See also the * [adapt chart to legend](https://github.com/highcharts/adapt-chart-to-legend) * plugin for a solution to extend the chart height to make room for * the legend, optionally in exported charts only. * * @type {boolean} * @default true * @since 4.2.4 * @apioption legend.navigation.enabled */ /** * Text styles for the legend page navigation. * * @see In styled mode, the navigation items are styled with the * `.highcharts-legend-navigation` class. * * @sample {highcharts} highcharts/legend/navigation/ * Legend page navigation demonstrated * @sample {highstock} highcharts/legend/navigation/ * Legend page navigation demonstrated * * @type {Highcharts.CSSObject} * @since 2.2.4 * @apioption legend.navigation.style */ style: { /** * @type {number|string} */ fontSize: '0.8em' }, /** * The color for the active up or down arrow in the legend page * navigation. * * @see In styled mode, the active arrow be styled with the * `.highcharts-legend-nav-active` class. * * @sample {highcharts} highcharts/legend/navigation/ * Legend page navigation demonstrated * @sample {highstock} highcharts/legend/navigation/ * Legend page navigation demonstrated * * @type {Highcharts.ColorString|H