├── .gitignore
├── colors.js
├── css-colours.js
├── index.html
├── package-lock.json
├── package.json
├── readme.md
└── style.css
/.gitignore:
--------------------------------------------------------------------------------
1 | dist/
2 | .DS_Store
3 | node_modules/
4 | .cache/
5 | haters/
6 |
--------------------------------------------------------------------------------
/colors.js:
--------------------------------------------------------------------------------
1 | import hexToHSL from 'hex-to-hsl';
2 |
3 | export const colors = {
4 | black: '#000000',
5 | silver: '#C0C0C0',
6 | gray: '#808080',
7 | grey: '#808080',
8 | white: '#FFFFFF',
9 | maroon: '#800000',
10 | red: '#FF0000',
11 | purple: '#800080',
12 | fuchsia: '#FF00FF',
13 | green: '#008000',
14 | lime: '#00FF00',
15 | olive: '#808000',
16 | yellow: '#FFFF00',
17 | navy: '#000080',
18 | blue: '#0000FF',
19 | teal: '#008080',
20 | aqua: '#00FFFF',
21 | darkblue: '#00008B',
22 | mediumblue: '#0000CD',
23 | darkgreen: '#006400',
24 | darkcyan: '#008B8B',
25 | deepskyblue: '#00BFFF',
26 | darkturquoise: '#00CED1',
27 | mediumspringgreen: '#00FA9A',
28 | springgreen: '#00FF7F',
29 | cyan: '#00FFFF',
30 | midnightblue: '#191970',
31 | dodgerblue: '#1E90FF',
32 | lightseagreen: '#20B2AA',
33 | forestgreen: '#228B22',
34 | seagreen: '#2E8B57',
35 | darkslategray: '#2F4F4F',
36 | darkslategrey: '#2F4F4F',
37 | limegreen: '#32CD32',
38 | mediumseagreen: '#3CB371',
39 | turquoise: '#40E0D0',
40 | royalblue: '#4169E1',
41 | steelblue: '#4682B4',
42 | darkslateblue: '#483D8B',
43 | mediumturquoise: '#48D1CC',
44 | indigo: '#4B0082',
45 | darkolivegreen: '#556B2F',
46 | cadetblue: '#5F9EA0',
47 | cornflowerblue: '#6495ED',
48 | rebeccapurple: '#663399',
49 | mediumaquamarine: '#66CDAA',
50 | dimgray: '#696969',
51 | dimgrey: '#696969',
52 | slateblue: '#6A5ACD',
53 | olivedrab: '#6B8E23',
54 | slategray: '#708090',
55 | slategrey: '#708090',
56 | lightslategray: '#778899',
57 | lightslategrey: '#778899',
58 | mediumslateblue: '#7B68EE',
59 | lawngreen: '#7CFC00',
60 | chartreuse: '#7FFF00',
61 | aquamarine: '#7FFFD4',
62 | skyblue: '#87CEEB',
63 | lightskyblue: '#87CEFA',
64 | blueviolet: '#8A2BE2',
65 | darkred: '#8B0000',
66 | darkmagenta: '#8B008B',
67 | saddlebrown: '#8B4513',
68 | darkseagreen: '#8FBC8F',
69 | lightgreen: '#90EE90',
70 | mediumpurple: '#9370DB',
71 | darkviolet: '#9400D3',
72 | palegreen: '#98FB98',
73 | darkorchid: '#9932CC',
74 | yellowgreen: '#9ACD32',
75 | sienna: '#A0522D',
76 | brown: '#A52A2A',
77 | darkgray: '#A9A9A9',
78 | darkgrey: '#A9A9A9',
79 | lightblue: '#ADD8E6',
80 | greenyellow: '#ADFF2F',
81 | paleturquoise: '#AFEEEE',
82 | lightsteelblue: '#B0C4DE',
83 | powderblue: '#B0E0E6',
84 | firebrick: '#B22222',
85 | darkgoldenrod: '#B8860B',
86 | mediumorchid: '#BA55D3',
87 | rosybrown: '#BC8F8F',
88 | darkkhaki: '#BDB76B',
89 | mediumvioletred: '#C71585',
90 | indianred: '#CD5C5C',
91 | peru: '#CD853F',
92 | chocolate: '#D2691E',
93 | tan: '#D2B48C',
94 | lightgray: '#D3D3D3',
95 | lightgrey: '#D3D3D3',
96 | thistle: '#D8BFD8',
97 | orchid: '#DA70D6',
98 | goldenrod: '#DAA520',
99 | palevioletred: '#DB7093',
100 | crimson: '#DC143C',
101 | gainsboro: '#DCDCDC',
102 | plum: '#DDA0DD',
103 | burlywood: '#DEB887',
104 | lightcyan: '#E0FFFF',
105 | lavender: '#E6E6FA',
106 | darksalmon: '#E9967A',
107 | violet: '#EE82EE',
108 | palegoldenrod: '#EEE8AA',
109 | lightcoral: '#F08080',
110 | khaki: '#F0E68C',
111 | aliceblue: '#F0F8FF',
112 | honeydew: '#F0FFF0',
113 | azure: '#F0FFFF',
114 | sandybrown: '#F4A460',
115 | wheat: '#F5DEB3',
116 | beige: '#F5F5DC',
117 | whitesmoke: '#F5F5F5',
118 | mintcream: '#F5FFFA',
119 | ghostwhite: '#F8F8FF',
120 | salmon: '#FA8072',
121 | antiquewhite: '#FAEBD7',
122 | linen: '#FAF0E6',
123 | lightgoldenrodyellow: '#FAFAD2',
124 | oldlace: '#FDF5E6',
125 | magenta: '#FF00FF',
126 | deeppink: '#FF1493',
127 | orangered: '#FF4500',
128 | tomato: '#FF6347',
129 | hotpink: '#FF69B4',
130 | coral: '#FF7F50',
131 | darkorange: '#FF8C00',
132 | lightsalmon: '#FFA07A',
133 | orange: '#FFA500',
134 | lightpink: '#FFB6C1',
135 | pink: '#FFC0CB',
136 | gold: '#FFD700',
137 | peachpuff: '#FFDAB9',
138 | navajowhite: '#FFDEAD',
139 | moccasin: '#FFE4B5',
140 | bisque: '#FFE4C4',
141 | mistyrose: '#FFE4E1',
142 | blanchedalmond: '#FFEBCD',
143 | papayawhip: '#FFEFD5',
144 | lavenderblush: '#FFF0F5',
145 | seashell: '#FFF5EE',
146 | cornsilk: '#FFF8DC',
147 | lemonchiffon: '#FFFACD',
148 | floralwhite: '#FFFAF0',
149 | snow: '#FFFAFA',
150 | lightyellow: '#FFFFE0',
151 | ivory: '#FFFFF0',
152 | };
153 |
154 | export function complementaryColor(colorName) {
155 | // first find the hex for that color name
156 | const hex = colors[colorName];
157 | // first convert the color the hsl
158 | const [h, s, l] = hexToHSL(hex);
159 | // then return that hsl, but complimentary
160 | return [h + 180, `${s}%`, `${l}%`];
161 | }
162 |
163 | export function isDark(colorName) {
164 | const hex = colors[colorName].substring(1, 7);
165 | const r = parseInt(hex.substring(0, 2), 16);
166 | const g = parseInt(hex.substring(2, 4), 16);
167 | const b = parseInt(hex.substring(4, 6), 16);
168 | return r * 0.299 + g * 0.587 + b * 0.114 < 120;
169 | }
170 |
171 | export function isValidColor(word) {
172 | return !!colors[word];
173 | }
174 |
175 | function countVowels(word) {
176 | let count = [...word].filter((letter, i) => ['a', 'e', 'i', 'o', 'u'].includes(letter)).length;
177 | if (word[word.length - 1] === 'y') {
178 | count++;
179 | }
180 | return count;
181 | }
182 |
183 | const colorsArray = Object.entries(colors).reduce((acc, [name, hex]) => {
184 | const colorObject = {
185 | name,
186 | hex,
187 | hsl: hexToHSL(hex),
188 | isDark: isDark(name),
189 | vowels: countVowels(name)
190 | }
191 | return [...acc, colorObject];
192 | }, [])
193 |
194 | export const colorsByLength = [...colorsArray].sort((a, b) => a.name.length - b.name.length);
195 | export const colorsByHue = [...colorsArray].sort((a, b) => b.hsl[0] - a.hsl[0]);
196 | export const colorsBySaturation = [...colorsArray].sort((a, b) => b.hsl[1] - a.hsl[1]);
197 | export const colorsByLightness = [...colorsArray].sort((a, b) => b.hsl[2] - a.hsl[2]);
198 | export const colorsByAll = [...colorsArray].sort((a, b) => b.hsl[0] - a.hsl[0]).sort((a, b) => b.hsl[1] - a.hsl[1]).sort((a, b) => b.hsl[2] - a.hsl[2]);
199 | export const colorsByVowels = [...colorsArray].sort((a, b) => b.vowels - a.vowels);
200 |
201 |
--------------------------------------------------------------------------------
/css-colours.js:
--------------------------------------------------------------------------------
1 | import { colorsByLength, isValidColor, isDark, colorsByHue, colorsBySaturation, colorsByLightness, colorsByAll, colorsByVowels } from './colors';
2 |
3 | function displayColoursBy(colorsToDisplay, el, toShow = 'hsl') {
4 | const spans = colorsToDisplay
5 | .map(
6 | color =>
7 | `${color.name.toUpperCase()}
${color[toShow]}`
10 | )
11 | .join('');
12 | el.innerHTML = spans;
13 | }
14 |
15 | function displayGradient(colorsToDisplay, el, toShow = 'hsl') {
16 | const spans = colorsToDisplay
17 | .map(
18 | (color, i) => {
19 | const lastColor = i > 0 ? colorsToDisplay[i - 1] : color;
20 | return `${color.name.toUpperCase()}
${color[toShow].join('/')}`
23 | }
24 | )
25 | .join('');
26 | el.innerHTML = spans;
27 | }
28 |
29 | // displayColours();
30 | displayColoursBy(colorsByLength, document.querySelector('.by-length'));
31 | displayColoursBy(colorsByHue, document.querySelector('.by-hue'));
32 | displayColoursBy(colorsBySaturation, document.querySelector('.by-saturation'));
33 | displayColoursBy(colorsByLightness, document.querySelector('.by-lightness'));
34 | displayColoursBy(colorsByAll, document.querySelector('.by-all'));
35 | displayGradient(colorsByVowels, document.querySelector('.by-gradient'));
36 | displayColoursBy(colorsByVowels, document.querySelector('.by-vowels'), 'vowels');
37 |
38 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |