@grafana/ui
Version:
Grafana Components Library
1 lines • 8.55 kB
Source Map (JSON)
{"version":3,"file":"UPlotThresholds.mjs","sources":["../../../../../src/components/uPlot/config/UPlotThresholds.ts"],"sourcesContent":["import tinycolor from 'tinycolor2';\nimport uPlot from 'uplot';\n\nimport { GrafanaTheme2, Threshold, ThresholdsConfig, ThresholdsMode } from '@grafana/data';\nimport { GraphThresholdsStyleConfig, GraphThresholdsStyleMode, ScaleOrientation } from '@grafana/schema';\n\nimport { getGradientRange, scaleGradient } from './gradientFills';\n\nexport interface UPlotThresholdOptions {\n scaleKey: string;\n thresholds: ThresholdsConfig;\n config: GraphThresholdsStyleConfig;\n theme: GrafanaTheme2;\n hardMin?: number | null;\n hardMax?: number | null;\n softMin?: number | null;\n softMax?: number | null;\n}\n\nexport function getThresholdsDrawHook(options: UPlotThresholdOptions) {\n const dashSegments =\n options.config.mode === GraphThresholdsStyleMode.Dashed ||\n options.config.mode === GraphThresholdsStyleMode.DashedAndArea\n ? [10, 10]\n : [];\n\n function addLines(u: uPlot, yScaleKey: string, steps: Threshold[], theme: GrafanaTheme2) {\n let ctx = u.ctx;\n\n // Thresholds below a transparent threshold is treated like \"less than\", and line drawn previous threshold\n let transparentIndex = 0;\n\n for (let idx = 0; idx < steps.length; idx++) {\n const step = steps[idx];\n if (step.color === 'transparent') {\n transparentIndex = idx;\n break;\n }\n }\n\n ctx.lineWidth = 2;\n ctx.setLineDash(dashSegments);\n\n // Ignore the base -Infinity threshold by always starting on index 1\n for (let idx = 1; idx < steps.length; idx++) {\n const step = steps[idx];\n let color: tinycolor.Instance;\n\n // if we are below a transparent index treat this a less then threshold, use previous thresholds color\n if (transparentIndex >= idx && idx > 0) {\n color = tinycolor(theme.visualization.getColorByName(steps[idx - 1].color));\n } else {\n color = tinycolor(theme.visualization.getColorByName(step.color));\n }\n\n // Unless alpha specififed set to default value\n if (color.getAlpha() === 1) {\n color.setAlpha(0.7);\n }\n\n const isHorizontal = u.scales.x!.ori === ScaleOrientation.Horizontal;\n const scaleVal = u.valToPos(step.value, yScaleKey, true);\n\n let x0 = Math.round(isHorizontal ? u.bbox.left : scaleVal);\n let y0 = Math.round(isHorizontal ? scaleVal : u.bbox.top);\n let x1 = Math.round(isHorizontal ? u.bbox.left + u.bbox.width : scaleVal);\n let y1 = Math.round(isHorizontal ? scaleVal : u.bbox.top + u.bbox.height);\n\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n\n ctx.strokeStyle = color.toString();\n ctx.stroke();\n }\n }\n\n function addAreas(u: uPlot, yScaleKey: string, steps: Threshold[], theme: GrafanaTheme2) {\n let ctx = u.ctx;\n\n let grd = scaleGradient(\n u,\n yScaleKey,\n steps.map((step) => {\n let color = tinycolor(theme.visualization.getColorByName(step.color));\n\n if (color.getAlpha() === 1) {\n color.setAlpha(0.15);\n }\n\n return [step.value, color.toString()];\n }),\n true\n );\n\n ctx.fillStyle = grd;\n ctx.fillRect(u.bbox.left, u.bbox.top, u.bbox.width, u.bbox.height);\n }\n\n const { scaleKey, thresholds, theme, config, hardMin, hardMax, softMin, softMax } = options;\n\n return (u: uPlot) => {\n const ctx = u.ctx;\n const { min: xMin, max: xMax } = u.scales.x;\n const { min: yMin, max: yMax } = u.scales[scaleKey];\n\n if (xMin == null || xMax == null || yMin == null || yMax == null) {\n return;\n }\n\n let { steps, mode } = thresholds;\n\n if (mode === ThresholdsMode.Percentage) {\n let [min, max] = getGradientRange(u, scaleKey, hardMin, hardMax, softMin, softMax);\n let range = max - min;\n\n steps = steps.map((step) => ({\n ...step,\n value: min + range * (step.value / 100),\n }));\n }\n\n ctx.save();\n\n switch (config.mode) {\n case GraphThresholdsStyleMode.Line:\n case GraphThresholdsStyleMode.Dashed:\n addLines(u, scaleKey, steps, theme);\n break;\n case GraphThresholdsStyleMode.Area:\n addAreas(u, scaleKey, steps, theme);\n break;\n case GraphThresholdsStyleMode.LineAndArea:\n case GraphThresholdsStyleMode.DashedAndArea:\n addAreas(u, scaleKey, steps, theme);\n addLines(u, scaleKey, steps, theme);\n }\n\n ctx.restore();\n };\n}\n"],"names":["theme"],"mappings":"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"}