UNPKG

highcharts

Version:
127 lines (126 loc) 3.85 kB
/* * * * (c) 2010-2025 Torstein Honsi * * License: www.highcharts.com/license * * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!! * * */ 'use strict'; import SeriesRegistry from '../Core/Series/SeriesRegistry.js'; const { column: { prototype: columnProto } } = SeriesRegistry.seriesTypes; import SVGElement from '../Core/Renderer/SVG/SVGElement.js'; import U from '../Core/Utilities.js'; const { addEvent, defined } = U; /* * * * Composition * * */ var ColorMapComposition; (function (ColorMapComposition) { /* * * * Constants * * */ ColorMapComposition.pointMembers = { dataLabelOnNull: true, moveToTopOnHover: true, isValid: pointIsValid }; ColorMapComposition.seriesMembers = { colorKey: 'value', axisTypes: ['xAxis', 'yAxis', 'colorAxis'], parallelArrays: ['x', 'y', 'value'], pointArrayMap: ['value'], trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'], colorAttribs: seriesColorAttribs, pointAttribs: columnProto.pointAttribs }; /* * * * Functions * * */ /** * @private */ function compose(SeriesClass) { const PointClass = SeriesClass.prototype.pointClass; addEvent(PointClass, 'afterSetState', onPointAfterSetState); return SeriesClass; } ColorMapComposition.compose = compose; /** * Move points to the top of the z-index order when hovered. * @private */ function onPointAfterSetState(e) { const point = this, series = point.series, renderer = series.chart.renderer; if (point.moveToTopOnHover && point.graphic) { if (!series.stateMarkerGraphic) { // Create a `use` element and add it to the end of the group, // which would make it appear on top of the other elements. This // deals with z-index without reordering DOM elements (#13049). series.stateMarkerGraphic = new SVGElement(renderer, 'use') .css({ pointerEvents: 'none' }) .add(point.graphic.parentGroup); } if (e?.state === 'hover') { // Give the graphic DOM element the same id as the Point // instance point.graphic.attr({ id: this.id }); series.stateMarkerGraphic.attr({ href: `${renderer.url}#${this.id}`, visibility: 'visible' }); } else { series.stateMarkerGraphic.attr({ href: '' }); } } } /** * Color points have a value option that determines whether or not it is * a null point * @private */ function pointIsValid() { return (this.value !== null && this.value !== Infinity && this.value !== -Infinity && // Undefined is allowed, but NaN is not (#17279) (this.value === void 0 || !isNaN(this.value))); } /** * Get the color attributes to apply on the graphic * @private * @function Highcharts.colorMapSeriesMixin.colorAttribs * @param {Highcharts.Point} point * @return {Highcharts.SVGAttributes} * The SVG attributes */ function seriesColorAttribs(point) { const ret = {}; if (defined(point.color) && (!point.state || point.state === 'normal') // #15746 ) { ret[this.colorProp || 'fill'] = point.color; } return ret; } })(ColorMapComposition || (ColorMapComposition = {})); /* * * * Default Export * * */ export default ColorMapComposition;