@@ -9,23 +9,94 @@ export const hashCode = (s: string) => {
99 } , 0 ) ;
1010} ;
1111
12- // TODO: colors used in charts as well, need to move to constants
13- // 11 distinct colors from https://mokole.com/palette.html
1412export const COLORS = [
15- '#008000' , // green
16- '#4169e1' , // royalblue
17- '#ffd700' , // gold
18- '#ff8c00' , // darkorange
19- '#808000' , // olive
20- '#e9967a' , // darksalmon
21- '#ff1493' , // deeppink
22- '#00bfff' , // deepskyblue
23- '#da70d6' , // orchid
24- '#8b4513' , //saddlebrown
25- '#b22222' , // firebrick
13+ [
14+ 'var(--versions-red-1)' ,
15+ 'var(--versions-red-2)' ,
16+ 'var(--versions-red-3)' ,
17+ 'var(--versions-red-4)' ,
18+ ] ,
19+ [
20+ 'var(--versions-orange-red-1)' ,
21+ 'var(--versions-orange-red-2)' ,
22+ 'var(--versions-orange-red-3)' ,
23+ 'var(--versions-orange-red-4)' ,
24+ ] ,
25+ [
26+ 'var(--versions-orange-1)' ,
27+ 'var(--versions-orange-2)' ,
28+ 'var(--versions-orange-3)' ,
29+ 'var(--versions-orange-4)' ,
30+ ] ,
31+ [
32+ 'var(--versions-yellow-1)' ,
33+ 'var(--versions-yellow-2)' ,
34+ 'var(--versions-yellow-3)' ,
35+ 'var(--versions-yellow-4)' ,
36+ ] ,
37+ [
38+ 'var(--versions-green-1)' ,
39+ 'var(--versions-green-2)' ,
40+ 'var(--versions-green-3)' ,
41+ 'var(--versions-green-4)' ,
42+ ] ,
43+ [
44+ 'var(--versions-teal-1)' ,
45+ 'var(--versions-teal-2)' ,
46+ 'var(--versions-teal-3)' ,
47+ 'var(--versions-teal-4)' ,
48+ ] ,
49+ [
50+ 'var(--versions-cyan-1)' ,
51+ 'var(--versions-cyan-2)' ,
52+ 'var(--versions-cyan-3)' ,
53+ 'var(--versions-cyan-4)' ,
54+ ] ,
55+ [
56+ 'var(--versions-blue-1)' ,
57+ 'var(--versions-blue-2)' ,
58+ 'var(--versions-blue-3)' ,
59+ 'var(--versions-blue-4)' ,
60+ ] ,
61+ [
62+ 'var(--versions-purple-1)' ,
63+ 'var(--versions-purple-2)' ,
64+ 'var(--versions-purple-3)' ,
65+ 'var(--versions-purple-4)' ,
66+ ] ,
67+ [
68+ 'var(--versions-pink-1)' ,
69+ 'var(--versions-pink-2)' ,
70+ 'var(--versions-pink-3)' ,
71+ 'var(--versions-pink-4)' ,
72+ ] ,
2673] ;
2774
28- export const DEFAULT_COLOR = '#3cb371' ; // mediumseagreen
75+ export const DEFAULT_COLOR = 'var(--g-color-base-generic-medium)' ;
76+
77+ /** Calculates sub color index */
78+ export function getMinorVersionColorVariant ( minorIndex : number , minorQuantity : number ) {
79+ // We have 4 sub colors for each color
80+ // For 4+ minors first 25% will be colored with the first most bright color
81+ // Every next 25% will be colored with corresponding color
82+ // Do not use all colors if there are less than 4 minors
83+
84+ if ( minorQuantity === 1 ) {
85+ return 0 ;
86+ }
87+ // Use only 2 colors
88+ if ( minorQuantity === 2 ) {
89+ return Math . floor ( ( 2 * minorIndex ) / minorQuantity ) ;
90+ }
91+ // Use only 3 colors
92+ if ( minorQuantity === 3 ) {
93+ return Math . floor ( ( 3 * minorIndex ) / minorQuantity ) ;
94+ }
95+
96+ // Max minor index is minorQuantity - 1
97+ // So result values always will be in range from 0 to 3
98+ return Math . floor ( ( 4 * minorIndex ) / minorQuantity ) ;
99+ }
29100
30101export const getVersionsMap = ( versions : string [ ] , initialMap : VersionsMap = new Map ( ) ) => {
31102 versions . forEach ( ( version ) => {
@@ -60,7 +131,8 @@ export const getVersionToColorMap = (versionsMap: VersionsMap) => {
60131 if ( / ^ ( \w + - ) ? s t a b l e / . test ( item . version ) ) {
61132 currentColorIndex = ( currentColorIndex + 1 ) % COLORS . length ;
62133
63- versionToColor . set ( item . version , COLORS [ currentColorIndex ] ) ;
134+ // Use fisrt color for major
135+ versionToColor . set ( item . version , COLORS [ currentColorIndex ] [ 0 ] ) ;
64136
65137 const minors = Array . from ( versionsMap . get ( item . version ) || [ ] )
66138 . filter ( ( v ) => v !== item . version )
@@ -78,14 +150,12 @@ export const getVersionToColorMap = (versionsMap: VersionsMap) => {
78150 // so the newer version gets the brighter color
79151 . sort ( ( a , b ) => b . hash - a . hash )
80152 . forEach ( ( minor , minorIndex ) => {
81- const majorColor = COLORS [ currentColorIndex ] ;
82- const opacityPercent = Math . max (
83- 100 - minorIndex * ( 100 / minorQuantity ) ,
84- 20 ,
153+ const minorColorVariant = getMinorVersionColorVariant (
154+ minorIndex ,
155+ minorQuantity ,
85156 ) ;
86- const hexOpacity = Math . round ( ( opacityPercent * 255 ) / 100 ) . toString ( 16 ) ;
87- const versionColor = `${ majorColor } ${ hexOpacity } ` ;
88- versionToColor . set ( minor . version , versionColor ) ;
157+ const minorColor = COLORS [ currentColorIndex ] [ minorColorVariant ] ;
158+ versionToColor . set ( minor . version , minorColor ) ;
89159 } ) ;
90160 } else {
91161 versionToColor . set ( item . version , DEFAULT_COLOR ) ;
0 commit comments