UNPKG

highcharts

Version:
112 lines (111 loc) 4.19 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 { scatter: { prototype: { pointClass: ScatterPoint } } } = SeriesRegistry.seriesTypes; import U from '../../Core/Utilities.js'; const { clamp, defined, extend, pick } = U; /* * * * Class * * */ class HeatmapPoint extends ScatterPoint { /* * * * Functions * * */ /** @private */ applyOptions(options, x) { // #17970, if point is null remove its color, because it may be updated if (this.isNull || this.value === null) { delete this.color; } super.applyOptions(options, x); this.formatPrefix = this.isNull || this.value === null ? 'null' : 'point'; return this; } /** @private */ getCellAttributes() { const point = this, series = point.series, seriesOptions = series.options, xPad = (seriesOptions.colsize || 1) / 2, yPad = (seriesOptions.rowsize || 1) / 2, xAxis = series.xAxis, yAxis = series.yAxis, markerOptions = point.options.marker || series.options.marker, pointPlacement = series.pointPlacementToXValue(), // #7860 pointPadding = pick(point.pointPadding, seriesOptions.pointPadding, 0), cellAttr = { x1: clamp(Math.round(xAxis.len - xAxis.translate(point.x - xPad, false, true, false, true, -pointPlacement)), -xAxis.len, 2 * xAxis.len), x2: clamp(Math.round(xAxis.len - xAxis.translate(point.x + xPad, false, true, false, true, -pointPlacement)), -xAxis.len, 2 * xAxis.len), y1: clamp(Math.round(yAxis.translate(point.y - yPad, false, true, false, true)), -yAxis.len, 2 * yAxis.len), y2: clamp(Math.round(yAxis.translate(point.y + yPad, false, true, false, true)), -yAxis.len, 2 * yAxis.len) }; const dimensions = [['width', 'x'], ['height', 'y']]; // Handle marker's fixed width, and height values including border // and pointPadding while calculating cell attributes. for (const dimension of dimensions) { const prop = dimension[0], direction = dimension[1]; let start = direction + '1', end = direction + '2'; const side = Math.abs(cellAttr[start] - cellAttr[end]), borderWidth = markerOptions && markerOptions.lineWidth || 0, plotPos = Math.abs(cellAttr[start] + cellAttr[end]) / 2, widthOrHeight = markerOptions && markerOptions[prop]; if (defined(widthOrHeight) && widthOrHeight < side) { const halfCellSize = widthOrHeight / 2 + borderWidth / 2; cellAttr[start] = plotPos - halfCellSize; cellAttr[end] = plotPos + halfCellSize; } // Handle pointPadding if (pointPadding) { if ((direction === 'x' && xAxis.reversed) || (direction === 'y' && !yAxis.reversed)) { start = end; end = direction + '1'; } cellAttr[start] += pointPadding; cellAttr[end] -= pointPadding; } } return cellAttr; } /** * @private */ haloPath(size) { if (!size) { return []; } const { x = 0, y = 0, width = 0, height = 0 } = this.shapeArgs || {}; return [ ['M', x - size, y - size], ['L', x - size, y + height + size], ['L', x + width + size, y + height + size], ['L', x + width + size, y - size], ['Z'] ]; } /** * Color points have a value option that determines whether or not it is * a null point * @private */ isValid() { // Undefined is allowed return (this.value !== Infinity && this.value !== -Infinity); } } extend(HeatmapPoint.prototype, { dataLabelOnNull: true, moveToTopOnHover: true, ttBelow: false }); /* * * * Default Export * * */ export default HeatmapPoint;