gitscope
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/utils/color-generator.ts · v0.6.1
Source
1 e6e6467 Dawsh 2y ago /**
2 e6e6467 Dawsh 2y ago * @module Color range generator
3 e6e6467 Dawsh 2y ago *
4 e6e6467 Dawsh 2y ago */
5 e6e6467 Dawsh 2y ago
6 e6e6467 Dawsh 2y ago function calculatePoint(i: number, intervalSize: number, colorRangeInfo: ColorRange) {
7 e6e6467 Dawsh 2y ago const { colorStart, colorEnd, useEndAsStart } = colorRangeInfo;
8 e6e6467 Dawsh 2y ago return (useEndAsStart
9 e6e6467 Dawsh 2y ago ? (colorEnd - (i * intervalSize))
10 e6e6467 Dawsh 2y ago : (colorStart + (i * intervalSize)));
11 e6e6467 Dawsh 2y ago }
12 e6e6467 Dawsh 2y ago
13 e6e6467 Dawsh 2y ago /* Must use an interpolated color scale, which has a range of [0, 1] */
14 e6e6467 Dawsh 2y ago interface ColorRange {
15 e6e6467 Dawsh 2y ago colorStart: number;
16 e6e6467 Dawsh 2y ago colorEnd: number;
17 e6e6467 Dawsh 2y ago useEndAsStart: boolean;
18 e6e6467 Dawsh 2y ago }
19 e6e6467 Dawsh 2y ago
20 e6e6467 Dawsh 2y ago /**
21 e6e6467 Dawsh 2y ago * @param dataLength - Number of colors to be generated
22 e6e6467 Dawsh 2y ago * @param colorScale - The D3 interpolate color scale
23 e6e6467 Dawsh 2y ago * @param colorRangeInfo - Color range spectrum
24 e6e6467 Dawsh 2y ago * @returns An array of colors within the choosen spectrum
25 e6e6467 Dawsh 2y ago *
26 e6e6467 Dawsh 2y ago * @description
27 e6e6467 Dawsh 2y ago * - Must use an interpolated color scale, which has a range of [0, 1].
28 e6e6467 Dawsh 2y ago * - D3 Interpolators are interpolateInfero, interpolateCool, interpolateRainbow, interpolateSpectral, interpolateRdYlBu
29 e6e6467 Dawsh 2y ago */
30 e6e6467 Dawsh 2y ago export function interpolateColors(dataLength: number, colorScale: (c: number) => string, colorRangeInfo: ColorRange) {
31 e6e6467 Dawsh 2y ago const { colorStart, colorEnd } = colorRangeInfo;
32 e6e6467 Dawsh 2y ago const colorRange = colorEnd - colorStart;
33 e6e6467 Dawsh 2y ago const intervalSize = colorRange / dataLength;
34 e6e6467 Dawsh 2y ago let i, colorPoint;
35 e6e6467 Dawsh 2y ago const colorArray = [];
36 e6e6467 Dawsh 2y ago
37 e6e6467 Dawsh 2y ago for (i = 0; i < dataLength; i++) {
38 e6e6467 Dawsh 2y ago colorPoint = calculatePoint(i, intervalSize, colorRangeInfo);
39 e6e6467 Dawsh 2y ago colorArray.push(colorScale(colorPoint));
40 e6e6467 Dawsh 2y ago }
41 e6e6467 Dawsh 2y ago
42 e6e6467 Dawsh 2y ago return colorArray;
43 e6e6467 Dawsh 2y ago }