UNPKG

@grafana/ui

Version:
1 lines 17 kB
{"version":3,"file":"gradientFills.mjs","sources":["../../../../../src/components/uPlot/config/gradientFills.ts"],"sourcesContent":["import tinycolor from 'tinycolor2';\nimport uPlot from 'uplot';\n\nimport {\n colorManipulator,\n FieldColorMode,\n FieldColorModeId,\n GrafanaTheme2,\n ThresholdsConfig,\n ThresholdsMode,\n} from '@grafana/data';\nimport { ScaleOrientation } from '@grafana/schema';\n\nimport { getCanvasContext } from '../../../utils/measureText';\n\nfunction makeDirectionalGradient(direction: GradientDirection, bbox: uPlot.BBox, ctx: CanvasRenderingContext2D) {\n let x0 = 0,\n y0 = 0,\n x1 = 0,\n y1 = 0;\n\n if (direction === GradientDirection.Down) {\n y0 = bbox.top;\n y1 = bbox.top + bbox.height;\n } else if (direction === GradientDirection.Left) {\n x0 = bbox.left + bbox.width;\n x1 = bbox.left;\n } else if (direction === GradientDirection.Up) {\n y0 = bbox.top + bbox.height;\n y1 = bbox.top;\n } else if (direction === GradientDirection.Right) {\n x0 = bbox.left;\n x1 = bbox.left + bbox.width;\n }\n\n return ctx.createLinearGradient(x0, y0, x1, y1);\n}\n\nexport function getOpacityGradientFn(\n color: string,\n opacity: number\n): (self: uPlot, seriesIdx: number) => CanvasGradient {\n return (plot: uPlot, seriesIdx: number) => {\n const ctx = getCanvasContext();\n const gradient = makeDirectionalGradient(\n plot.scales.x!.ori === ScaleOrientation.Horizontal ? GradientDirection.Down : GradientDirection.Left,\n plot.bbox,\n ctx\n );\n\n gradient.addColorStop(0, colorManipulator.alpha(color, opacity));\n gradient.addColorStop(1, colorManipulator.alpha(color, 0));\n\n return gradient;\n };\n}\n\nexport function getHueGradientFn(\n color: string,\n opacity: number,\n theme: GrafanaTheme2\n): (self: uPlot, seriesIdx: number) => CanvasGradient {\n return (plot: uPlot, seriesIdx: number) => {\n const ctx = getCanvasContext();\n const gradient = makeDirectionalGradient(\n plot.scales.x!.ori === ScaleOrientation.Horizontal ? GradientDirection.Down : GradientDirection.Left,\n plot.bbox,\n ctx\n );\n\n const color1 = tinycolor(color).spin(-25).darken(5);\n const color2 = tinycolor(color).saturate(20).spin(20).brighten(10);\n\n if (theme.isDark) {\n gradient.addColorStop(0, color2.lighten(10).setAlpha(opacity).toString());\n gradient.addColorStop(1, color1.darken(10).setAlpha(opacity).toString());\n } else {\n gradient.addColorStop(0, color2.lighten(10).setAlpha(opacity).toString());\n gradient.addColorStop(1, color1.setAlpha(opacity).toString());\n }\n\n return gradient;\n };\n}\n\nexport enum GradientDirection {\n Right = 0,\n Up = 1,\n Left = 2,\n Down = 3,\n}\n\ntype ValueStop = [value: number, color: string];\n\ntype ScaleValueStops = ValueStop[];\n\nexport function scaleGradient(u: uPlot, scaleKey: string, scaleStops: ScaleValueStops, discrete = false) {\n let scale = u.scales[scaleKey];\n\n // we want the stop below or at the scaleMax\n // and the stop below or at the scaleMin, else the stop above scaleMin\n let minStopIdx: number | null = null;\n let maxStopIdx: number | null = null;\n\n for (let i = 0; i < scaleStops.length; i++) {\n let stopVal = scaleStops[i][0];\n\n if (stopVal <= scale.min! || minStopIdx == null) {\n minStopIdx = i;\n }\n\n maxStopIdx = i;\n\n if (stopVal >= scale.max!) {\n break;\n }\n }\n\n if (minStopIdx === maxStopIdx) {\n return scaleStops[minStopIdx!][1];\n }\n\n let minStopVal = scaleStops[minStopIdx!][0];\n let maxStopVal = scaleStops[maxStopIdx!][0];\n\n if (minStopVal === -Infinity) {\n minStopVal = scale.min!;\n }\n\n if (maxStopVal === Infinity) {\n maxStopVal = scale.max!;\n }\n\n let minStopPos = Math.round(u.valToPos(minStopVal, scaleKey, true));\n let maxStopPos = Math.round(u.valToPos(maxStopVal, scaleKey, true));\n\n let range = minStopPos - maxStopPos;\n\n if (range === 0) {\n return scaleStops[maxStopIdx!][1];\n }\n\n let x0, y0, x1, y1;\n\n if (u.scales.x!.ori === ScaleOrientation.Horizontal) {\n x0 = x1 = 0;\n y0 = minStopPos;\n y1 = maxStopPos;\n } else {\n y0 = y1 = 0;\n x0 = minStopPos;\n x1 = maxStopPos;\n }\n\n let ctx = getCanvasContext();\n\n let grd = ctx.createLinearGradient(x0, y0, x1, y1);\n\n let prevColor: string;\n\n for (let i = minStopIdx!; i <= maxStopIdx!; i++) {\n let s = scaleStops[i];\n\n let stopPos =\n i === minStopIdx ? minStopPos : i === maxStopIdx ? maxStopPos : Math.round(u.valToPos(s[0], scaleKey, true));\n\n let pct = (minStopPos - stopPos) / range;\n\n if (discrete && i > minStopIdx!) {\n grd.addColorStop(pct, prevColor!);\n }\n\n grd.addColorStop(pct, (prevColor = s[1]));\n }\n\n return grd;\n}\n\nexport function getDataRange(plot: uPlot, scaleKey: string) {\n let sc = plot.scales[scaleKey];\n\n let min = Infinity;\n let max = -Infinity;\n\n plot.series.forEach((ser, seriesIdx) => {\n if (ser.show && ser.scale === scaleKey) {\n // uPlot skips finding data min/max when a scale has a pre-defined range\n if (ser.min == null) {\n let data = plot.data[seriesIdx];\n for (let i = 0; i < data.length; i++) {\n if (data[i] != null) {\n min = Math.min(min, data[i]!);\n max = Math.max(max, data[i]!);\n }\n }\n } else {\n min = Math.min(min, ser.min!);\n max = Math.max(max, ser.max!);\n }\n }\n });\n\n if (max === min) {\n min = sc.min!;\n max = sc.max!;\n }\n\n return [min, max];\n}\n\nexport function getGradientRange(\n u: uPlot,\n scaleKey: string,\n hardMin?: number | null,\n hardMax?: number | null,\n softMin?: number | null,\n softMax?: number | null\n) {\n let min = hardMin ?? softMin ?? null;\n let max = hardMax ?? softMax ?? null;\n\n if (min == null || max == null) {\n let [dataMin, dataMax] = getDataRange(u, scaleKey);\n\n min = min ?? dataMin ?? 0;\n max = max ?? dataMax ?? 100;\n }\n\n return [min, max];\n}\n\nfunction isStepTransparent(color: string) {\n // steps are stored as names or 8-char hex\n return color === 'transparent' || (color[0] === '#' && color.slice(-2) === '00');\n}\n\nexport function getScaleGradientFn(\n opacity: number,\n theme: GrafanaTheme2,\n colorMode?: FieldColorMode,\n thresholds?: ThresholdsConfig,\n hardMin?: number | null,\n hardMax?: number | null,\n softMin?: number | null,\n softMax?: number | null\n): (self: uPlot, seriesIdx: number) => CanvasGradient | string {\n if (!colorMode) {\n throw Error('Missing colorMode required for color scheme gradients');\n }\n\n if (!thresholds) {\n throw Error('Missing thresholds required for color scheme gradients');\n }\n\n return (plot: uPlot, seriesIdx: number) => {\n let scaleKey = plot.series[seriesIdx].scale!;\n\n let gradient: CanvasGradient | string = '';\n\n if (colorMode.id === FieldColorModeId.Thresholds) {\n if (thresholds.mode === ThresholdsMode.Absolute) {\n const valueStops: ValueStop[] = thresholds.steps.map((step) => [\n step.value,\n isStepTransparent(step.color)\n ? '#0000'\n : colorManipulator.alpha(theme.visualization.getColorByName(step.color), opacity),\n ]);\n gradient = scaleGradient(plot, scaleKey, valueStops, true);\n } else {\n const [min, max] = getGradientRange(plot, scaleKey, hardMin, hardMax, softMin, softMax);\n const range = max - min;\n const valueStops: ValueStop[] = thresholds.steps.map((step) => [\n min + range * (step.value / 100),\n colorManipulator.alpha(theme.visualization.getColorByName(step.color), opacity),\n ]);\n gradient = scaleGradient(plot, scaleKey, valueStops, true);\n }\n } else if (colorMode.getColors) {\n const colors = colorMode.getColors(theme);\n const [min, max] = getGradientRange(plot, scaleKey, hardMin, hardMax, softMin, softMax);\n const range = max - min;\n const valueStops: ValueStop[] = colors.map((color, i) => [\n min + range * (i / (colors.length - 1)),\n colorManipulator.alpha(theme.visualization.getColorByName(color), opacity),\n ]);\n gradient = scaleGradient(plot, scaleKey, valueStops, false);\n }\n\n return gradient;\n };\n}\n"],"names":["GradientDirection"],"mappings":"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"}