diff --git a/src/components/menu.tsx b/src/components/menu.tsx
index 3907267..a773986 100644
--- a/src/components/menu.tsx
+++ b/src/components/menu.tsx
@@ -16,6 +16,7 @@ import {
Timelapse as TimelapseIcon,
Help as HelpIcon,
CoPresent as CoPresentIcon,
+ ColorLens as ColorLensIcon,
} from '@mui/icons-material';
import { useContext } from "react";
@@ -82,6 +83,13 @@ const getMenu: IMenu[] = [
url: '/convert',
needsInternet: false,
},
+ {
+ name: 'Colour Picker',
+ icon: ,
+ category: Category.Conversion,
+ url: '/colour',
+ needsInternet: false,
+ },
{
name: 'Cron Calculator',
icon: ,
diff --git a/src/index.tsx b/src/index.tsx
index 44710ff..750dc0a 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -7,7 +7,7 @@ import Layout from "./theme/layout";
import { ErrorBoundary } from "./error";
import {
Home, AboutPage, CronConversionPage, DomainToolsHome, HelpPage, InspectionHome,
- InspectonResultDisplay, StringConversionPage, UnixEpochPage
+ InspectonResultDisplay, StringConversionPage, UnixEpochPage, ColourPickerPage
} from './pages';
import { ConnectionContext } from './context';
@@ -39,6 +39,9 @@ const App = () => {
} />
} />
} />
+ } />
+ } />
+ } />
} />
} />
} />
diff --git a/src/interfaces.ts b/src/interfaces.ts
index 0c879f3..7d35772 100644
--- a/src/interfaces.ts
+++ b/src/interfaces.ts
@@ -149,3 +149,38 @@ export interface IDomainSelection {
protocol: string;
url: string;
}
+
+export interface RGB {
+ r: number;
+ g: number;
+ b: number;
+}
+
+export interface HSL {
+ h: number;
+ s: number;
+ l: number;
+}
+
+export interface CMYK {
+ c: number;
+ m: number;
+ y: number;
+ k: number;
+}
+
+export interface Hue {
+ p: number;
+ q: number;
+ t: number;
+}
+
+export interface IColourValues {
+ hex: string;
+ rgb: RGB;
+ hsl: HSL;
+ cmyk: CMYK;
+ htmlCode: string;
+ xkcdCode: string;
+ oxVar: string;
+}
diff --git a/src/pages/colour.tsx b/src/pages/colour.tsx
new file mode 100644
index 0000000..f35eff1
--- /dev/null
+++ b/src/pages/colour.tsx
@@ -0,0 +1,287 @@
+import { Button, Card, Grid, InputAdornment, TextField, Typography } from "@mui/material";
+import { useEffect, useState } from "react";
+import { CMYK, HSL, IColourValues, RGB } from "../interfaces";
+import { cmykToAll, hexToAll, hslToAll, isValidColorString, rgbToAll } from "../utils/colourUtils";
+
+const siteTitle = "Colour Picker";
+
+const ColourPickerPage = () => {
+ const inputGet = window.location.hash.split('/').slice(-1)[0];
+ const startingVal = isValidColorString(inputGet) ? inputGet : '9c27b0';
+ const [colours, setColours] = useState(hexToAll(`#${startingVal}`));
+
+ useEffect(() => { document.title = `${siteTitle} - What's This?` });
+
+ useEffect(() => {
+ if (isValidColorString(colours.hex)) {
+ window.location.href = `/#/colour/${colours.hex.replace('#', '')}`
+ }
+ }, [colours]);
+
+ return (
+ <>
+ {siteTitle}
+ Select a colour you like, and convert it into many different formats.
+
+
+
+
+ Picker
+
+
+ {
+ setColours(hexToAll(e.target.value));
+ }} />
+
+
+
+
+
+ Hex
+
+
+ setColours(hexToAll(e.target.value))}
+ />
+
+
+
+
+
+
+
+
+ RGB
+
+
+
+ R,
+ }}
+ onChange={(e) => {
+ const rgb: RGB = { ...colours.rgb, r: parseInt(e.target.value) }
+ setColours(rgbToAll(rgb));
+ }}
+ />
+
+
+ G,
+ }}
+ onChange={(e) => {
+ const rgb: RGB = { ...colours.rgb, g: parseInt(e.target.value) }
+ setColours(rgbToAll(rgb));
+ }}
+ />
+
+
+ B,
+ }}
+ onChange={(e) => {
+ const rgb: RGB = { ...colours.rgb, b: parseInt(e.target.value) }
+ setColours(rgbToAll(rgb));
+ }}
+ />
+
+
+
+
+
+
+
+
+
+ HSL
+
+
+
+ H,
+ }}
+ onChange={(e) => {
+ const hsl: HSL = { ...colours.hsl, h: parseInt(e.target.value) }
+ setColours(hslToAll(hsl));
+ }}
+ />
+
+
+ S,
+ endAdornment: %,
+ }}
+ onChange={(e) => {
+ const hsl: HSL = { ...colours.hsl, s: parseInt(e.target.value) }
+ setColours(hslToAll(hsl));
+ }}
+ />
+
+
+ L,
+ endAdornment: %,
+ }}
+ onChange={(e) => {
+ const hsl: HSL = { ...colours.hsl, l: parseInt(e.target.value) }
+ setColours(hslToAll(hsl));
+ }}
+ />
+
+
+
+
+
+
+
+
+
+ CMYK
+
+
+
+ C,
+ endAdornment: %,
+ }}
+ onChange={(e) => {
+ const cmyk: CMYK = { ...colours.cmyk, c: parseInt(e.target.value) }
+ setColours(cmykToAll(cmyk));
+ }}
+ />
+
+
+ M,
+ endAdornment: %,
+ }}
+ onChange={(e) => {
+ const cmyk: CMYK = { ...colours.cmyk, m: parseInt(e.target.value) }
+ setColours(cmykToAll(cmyk));
+ }}
+ />
+
+
+ Y,
+ endAdornment: %,
+ }}
+ onChange={(e) => {
+ const cmyk: CMYK = { ...colours.cmyk, y: parseInt(e.target.value) }
+ setColours(cmykToAll(cmyk));
+ }}
+ />
+
+
+ K,
+ endAdornment: %,
+ }}
+ onChange={(e) => {
+ const cmyk: CMYK = { ...colours.cmyk, k: parseInt(e.target.value) }
+ setColours(cmykToAll(cmyk));
+ }}
+ />
+
+
+
+
+
+
+
+
+
+ HTML Name
+
+
+ {colours.htmlCode}
+
+
+
+
+
+ XKCD Name
+
+
+ {colours.xkcdCode}
+
+
+
+
+
+ 0x Variant
+
+
+ {colours.oxVar}
+
+
+
+ >
+ );
+}
+
+export default ColourPickerPage;
diff --git a/src/pages/index.ts b/src/pages/index.ts
index 8d11ee7..ae79eef 100644
--- a/src/pages/index.ts
+++ b/src/pages/index.ts
@@ -5,3 +5,4 @@ export { default as StringConversionPage } from './converter';
export { default as CronConversionPage } from './cron';
export { AboutPage, HelpPage } from './help';
export { default as UnixEpochPage } from './time';
+export { default as ColourPickerPage } from './colour';
diff --git a/src/utils/colourCodes/htmlColours.json b/src/utils/colourCodes/htmlColours.json
new file mode 100644
index 0000000..384de5d
--- /dev/null
+++ b/src/utils/colourCodes/htmlColours.json
@@ -0,0 +1,143 @@
+{
+ "AliceBlue": "#F0F8FF",
+ "AntiqueWhite": "#FAEBD7",
+ "Aqua": "#00FFFF",
+ "Aquamarine": "#7FFFD4",
+ "Azure": "#F0FFFF",
+ "Beige": "#F5F5DC",
+ "Bisque": "#FFE4C4",
+ "Black": "#000000",
+ "BlanchedAlmond": "#FFEBCD",
+ "Blue": "#0000FF",
+ "BlueViolet": "#8A2BE2",
+ "Brown": "#A52A2A",
+ "Burlywood": "#DEB887",
+ "CadetBlue": "#5F9EA0",
+ "Chartreuse": "#7FFF00",
+ "Chocolate": "#D2691E",
+ "Coral": "#FF7F50",
+ "CornflowerBlue": "#6495ED",
+ "Cornsilk": "#FFF8DC",
+ "Crimson": "#DC143C",
+ "Cyan": "#00FFFF",
+ "DarkBlue": "#00008B",
+ "DarkCyan": "#008B8B",
+ "DarkGoldenrod": "#B8860B",
+ "DarkGray": "#A9A9A9",
+ "DarkGreen": "#006400",
+ "DarkKhaki": "#BDB76B",
+ "DarkMagenta": "#8B008B",
+ "DarkOliveGreen": "#556B2F",
+ "DarkOrange": "#FF8C00",
+ "DarkOrchid": "#9932CC",
+ "DarkRed": "#8B0000",
+ "DarkSalmon": "#E9967A",
+ "DarkSeaGreen": "#8FBC8F",
+ "DarkSlateBlue": "#483D8B",
+ "DarkSlateGray": "#2F4F4F",
+ "DarkTurquoise": "#00CED1",
+ "DarkViolet": "#9400D3",
+ "DeepPink": "#FF1493",
+ "DeepSkyBlue": "#00BFFF",
+ "DimGray": "#696969",
+ "DodgerBlue": "#1E90FF",
+ "Firebrick": "#B22222",
+ "FloralWhite": "#FFFAF0",
+ "ForestGreen": "#228B22",
+ "Fuchsia": "#FF00FF",
+ "Gainsboro": "#DCDCDC",
+ "GhostWhite": "#F8F8FF",
+ "Gold": "#FFD700",
+ "Goldenrod": "#DAA520",
+ "Gray": "#808080",
+ "Green": "#008000",
+ "GreenYellow": "#ADFF2F",
+ "Honeydew": "#F0FFF0",
+ "HotPink": "#FF69B4",
+ "IndianRed": "#CD5C5C",
+ "Indigo": "#4B0082",
+ "Ivory": "#FFFFF0",
+ "Khaki": "#F0E68C",
+ "Lavender": "#E6E6FA",
+ "LavenderBlush": "#FFF0F5",
+ "LawnGreen": "#7CFC00",
+ "LemonChiffon": "#FFFACD",
+ "LightBlue": "#ADD8E6",
+ "LightCoral": "#F08080",
+ "LightCyan": "#E0FFFF",
+ "LightGoldenrodYellow": "#FAFAD2",
+ "LightGray": "#D3D3D3",
+ "LightGreen": "#90EE90",
+ "LightPink": "#FFB6C1",
+ "LightSalmon": "#FFA07A",
+ "LightSeaGreen": "#20B2AA",
+ "LightSkyBlue": "#87CEFA",
+ "LightSlateGray": "#778899",
+ "LightSteelBlue": "#B0C4DE",
+ "LightYellow": "#FFFFE0",
+ "Lime": "#00FF00",
+ "LimeGreen": "#32CD32",
+ "Linen": "#FAF0E6",
+ "Magenta": "#FF00FF",
+ "Maroon": "#800000",
+ "MediumAquamarine": "#66CDAA",
+ "MediumBlue": "#0000CD",
+ "MediumOrchid": "#BA55D3",
+ "MediumPurple": "#9370DB",
+ "MediumSeaGreen": "#3CB371",
+ "MediumSlateBlue": "#7B68EE",
+ "MediumSpringGreen": "#00FA9A",
+ "MediumTurquoise": "#48D1CC",
+ "MediumVioletRed": "#C71585",
+ "MidnightBlue": "#191970",
+ "MintCream": "#F5FFFA",
+ "MistyRose": "#FFE4E1",
+ "Moccasin": "#FFE4B5",
+ "NavajoWhite": "#FFDEAD",
+ "Navy": "#000080",
+ "OldLace": "#FDF5E6",
+ "Olive": "#808000",
+ "OliveDrab": "#6B8E23",
+ "Orange": "#FFA500",
+ "OrangeRed": "#FF4500",
+ "Orchid": "#DA70D6",
+ "PaleGoldenrod": "#EEE8AA",
+ "PaleGreen": "#98FB98",
+ "PaleTurquoise": "#AFEEEE",
+ "PaleVioletRed": "#DB7093",
+ "PapayaWhip": "#FFEFD5",
+ "PeachPuff": "#FFDAB9",
+ "Peru": "#CD853F",
+ "Pink": "#FFC0CB",
+ "Plum": "#DDA0DD",
+ "PowderBlue": "#B0E0E6",
+ "Purple": "#800080",
+ "RebeccaPurple": "#663399",
+ "Red": "#FF0000",
+ "RosyBrown": "#BC8F8F",
+ "RoyalBlue": "#4169E1",
+ "SaddleBrown": "#8B4513",
+ "Salmon": "#FA8072",
+ "SandyBrown": "#F4A460",
+ "SeaGreen": "#2E8B57",
+ "SeaShell": "#FFF5EE",
+ "Sienna": "#A0522D",
+ "Silver": "#C0C0C0",
+ "SkyBlue": "#87CEEB",
+ "SlateBlue": "#6A5ACD",
+ "SlateGray": "#708090",
+ "Snow": "#FFFAFA",
+ "SpringGreen": "#00FF7F",
+ "SteelBlue": "#4682B4",
+ "Tan": "#D2B48C",
+ "Teal": "#008080",
+ "Thistle": "#D8BFD8",
+ "Tomato": "#FF6347",
+ "Turquoise": "#40E0D0",
+ "Violet": "#EE82EE",
+ "Wheat": "#F5DEB3",
+ "White": "#FFFFFF",
+ "WhiteSmoke": "#F5F5F5",
+ "Yellow": "#FFFF00",
+ "YellowGreen": "#9ACD32"
+}
diff --git a/src/utils/colourCodes/xkcdColours.json b/src/utils/colourCodes/xkcdColours.json
new file mode 100644
index 0000000..8b39c6d
--- /dev/null
+++ b/src/utils/colourCodes/xkcdColours.json
@@ -0,0 +1,951 @@
+{
+ "Cloudy Blue": "#ACC2D9",
+ "Dark Pastel Green": "#56AE57",
+ "Dust": "#B2996E",
+ "Electric Lime": "#A8FF04",
+ "Fresh Green": "#69D84F",
+ "Light Eggplant": "#894585",
+ "Nasty Green": "#70B23F",
+ "Really Light Blue": "#D4FFFF",
+ "Tea": "#65AB7C",
+ "Warm Purple": "#952E8F",
+ "Yellowish Tan": "#FCFC81",
+ "Cement": "#A5A391",
+ "Dark Grass Green": "#388004",
+ "Dusty Teal": "#4C9085",
+ "Grey Teal": "#5E9B8A",
+ "Macaroni And Cheese": "#EFB435",
+ "Pinkish Tan": "#D99B82",
+ "Spruce": "#0A5F38",
+ "Strong Blue": "#0C06F7",
+ "Toxic Green": "#61DE2A",
+ "Windows Blue": "#3778BF",
+ "Blue Blue": "#2242C7",
+ "Blue With A Hint Of Purple": "#533CC6",
+ "Booger": "#9BB53C",
+ "Bright Sea Green": "#05FFA6",
+ "Dark Green Blue": "#1F6357",
+ "Deep Turquoise": "#017374",
+ "Green Teal": "#0CB577",
+ "Strong Pink": "#FF0789",
+ "Bland": "#AFA88B",
+ "Deep Aqua": "#08787F",
+ "Lavender Pink": "#DD85D7",
+ "Light Moss Green": "#A6C875",
+ "Light Seafoam Green": "#A7FFB5",
+ "Olive Yellow": "#C2B709",
+ "Pig Pink": "#E78EA5",
+ "Deep Lilac": "#966EBD",
+ "Desert": "#CCAD60",
+ "Dusty Lavender": "#AC86A8",
+ "Purpley Grey": "#947E94",
+ "Purply": "#983FB2",
+ "Candy Pink": "#FF63E9",
+ "Light Pastel Green": "#B2FBA5",
+ "Boring Green": "#63B365",
+ "Kiwi Green": "#8EE53F",
+ "Light Grey Green": "#B7E1A1",
+ "Orange Pink": "#FF6F52",
+ "Tea Green": "#BDF8A3",
+ "Very Light Brown": "#D3B683",
+ "Egg Shell": "#FFFCC4",
+ "Eggplant Purple": "#430541",
+ "Powder Pink": "#FFB2D0",
+ "Reddish Grey": "#997570",
+ "Baby Shit Brown": "#AD900D",
+ "Liliac": "#C48EFD",
+ "Stormy Blue": "#507B9C",
+ "Ugly Brown": "#7D7103",
+ "Custard": "#FFFD78",
+ "Darkish Pink": "#DA467D",
+ "Deep Brown": "#410200",
+ "Greenish Beige": "#C9D179",
+ "Manilla": "#FFFA86",
+ "Off Blue": "#5684AE",
+ "Battleship Grey": "#6B7C85",
+ "Browny Green": "#6F6C0A",
+ "Bruise": "#7E4071",
+ "Kelley Green": "#009337",
+ "Sickly Yellow": "#D0E429",
+ "Sunny Yellow": "#FFF917",
+ "Azul": "#1D5DEC",
+ "Darkgreen": "#054907",
+ "Green/Yellow": "#B5CE08",
+ "Lichen": "#8FB67B",
+ "Light Light Green": "#C8FFB0",
+ "Pale Gold": "#FDDE6C",
+ "Sun Yellow": "#FFDF22",
+ "Tan Green": "#A9BE70",
+ "Burple": "#6832E3",
+ "Butterscotch": "#FDB147",
+ "Toupe": "#C7AC7D",
+ "Dark Cream": "#FFF39A",
+ "Indian Red": "#850E04",
+ "Light Lavendar": "#EFC0FE",
+ "Poison Green": "#40FD14",
+ "Baby Puke Green": "#B6C406",
+ "Bright Yellow Green": "#9DFF00",
+ "Charcoal Grey": "#3C4142",
+ "Squash": "#F2AB15",
+ "Cinnamon": "#AC4F06",
+ "Light Pea Green": "#C4FE82",
+ "Radioactive Green": "#2CFA1F",
+ "Raw Sienna": "#9A6200",
+ "Baby Purple": "#CA9BF7",
+ "Cocoa": "#875F42",
+ "Light Royal Blue": "#3A2EFE",
+ "Orangeish": "#FD8D49",
+ "Rust Brown": "#8B3103",
+ "Sand Brown": "#CBA560",
+ "Swamp": "#698339",
+ "Tealish Green": "#0CDC73",
+ "Burnt Siena": "#B75203",
+ "Camo": "#7F8F4E",
+ "Dusk Blue": "#26538D",
+ "Fern": "#63A950",
+ "Old Rose": "#C87F89",
+ "Pale Light Green": "#B1FC99",
+ "Peachy Pink": "#FF9A8A",
+ "Rosy Pink": "#F6688E",
+ "Light Bluish Green": "#76FDA8",
+ "Light Bright Green": "#53FE5C",
+ "Light Neon Green": "#4EFD54",
+ "Light Seafoam": "#A0FEBF",
+ "Tiffany Blue": "#7BF2DA",
+ "Washed Out Green": "#BCF5A6",
+ "Browny Orange": "#CA6B02",
+ "Nice Blue": "#107AB0",
+ "Sapphire": "#2138AB",
+ "Greyish Teal": "#719F91",
+ "Orangey Yellow": "#FDB915",
+ "Parchment": "#FEFCAF",
+ "Straw": "#FCF679",
+ "Very Dark Brown": "#1D0200",
+ "Terracota": "#CB6843",
+ "Ugly Blue": "#31668A",
+ "Clear Blue": "#247AFD",
+ "Creme": "#FFFFB6",
+ "Foam Green": "#90FDA9",
+ "Grey/Green": "#86A17D",
+ "Light Gold": "#FDDC5C",
+ "Seafoam Blue": "#78D1B6",
+ "Topaz": "#13BBAF",
+ "Violet Pink": "#FB5FFC",
+ "Wintergreen": "#20F986",
+ "Yellow Tan": "#FFE36E",
+ "Dark Fuchsia": "#9D0759",
+ "Indigo Blue": "#3A18B1",
+ "Light Yellowish Green": "#C2FF89",
+ "Pale Magenta": "#D767AD",
+ "Rich Purple": "#720058",
+ "Sunflower Yellow": "#FFDA03",
+ "Green/Blue": "#01C08D",
+ "Leather": "#AC7434",
+ "Racing Green": "#014600",
+ "Vivid Purple": "#9900FA",
+ "Dark Royal Blue": "#02066F",
+ "Hazel": "#8E7618",
+ "Muted Pink": "#D1768F",
+ "Booger Green": "#96B403",
+ "Canary": "#FDFF63",
+ "Cool Grey": "#95A3A6",
+ "Dark Taupe": "#7F684E",
+ "Darkish Purple": "#751973",
+ "True Green": "#089404",
+ "Coral Pink": "#FF6163",
+ "Dark Sage": "#598556",
+ "Dark Slate Blue": "#214761",
+ "Flat Blue": "#3C73A8",
+ "Mushroom": "#BA9E88",
+ "Rich Blue": "#021BF9",
+ "Dirty Purple": "#734A65",
+ "Greenblue": "#23C48B",
+ "Icky Green": "#8FAE22",
+ "Light Khaki": "#E6F2A2",
+ "Warm Blue": "#4B57DB",
+ "Dark Hot Pink": "#D90166",
+ "Deep Sea Blue": "#015482",
+ "Carmine": "#9D0216",
+ "Dark Yellow Green": "#728F02",
+ "Pale Peach": "#FFE5AD",
+ "Plum Purple": "#4E0550",
+ "Golden Rod": "#F9BC08",
+ "Neon Red": "#FF073A",
+ "Old Pink": "#C77986",
+ "Very Pale Blue": "#D6FFFE",
+ "Blood Orange": "#FE4B03",
+ "Grapefruit": "#FD5956",
+ "Sand Yellow": "#FCE166",
+ "Clay Brown": "#B2713D",
+ "Dark Blue Grey": "#1F3B4D",
+ "Flat Green": "#699D4C",
+ "Light Green Blue": "#56FCA2",
+ "Warm Pink": "#FB5581",
+ "Dodger Blue": "#3E82FC",
+ "Gross Green": "#A0BF16",
+ "Ice": "#D6FFFA",
+ "Metallic Blue": "#4F738E",
+ "Pale Salmon": "#FFB19A",
+ "Sap Green": "#5C8B15",
+ "Algae": "#54AC68",
+ "Bluey Grey": "#89A0B0",
+ "Greeny Grey": "#7EA07A",
+ "Highlighter Green": "#1BFC06",
+ "Light Light Blue": "#CAFFFB",
+ "Light Mint": "#B6FFBB",
+ "Raw Umber": "#A75E09",
+ "Vivid Blue": "#152EFF",
+ "Deep Lavender": "#8D5EB7",
+ "Dull Teal": "#5F9E8F",
+ "Light Greenish Blue": "#63F7B4",
+ "Mud Green": "#606602",
+ "Pinky": "#FC86AA",
+ "Red Wine": "#8C0034",
+ "Shit Green": "#758000",
+ "Tan Brown": "#AB7E4C",
+ "Darkblue": "#030764",
+ "Rosa": "#FE86A4",
+ "Lipstick": "#D5174E",
+ "Pale Mauve": "#FED0FC",
+ "Claret": "#680018",
+ "Dandelion": "#FEDF08",
+ "Orangered": "#FE420F",
+ "Poop Green": "#6F7C00",
+ "Ruby": "#CA0147",
+ "Dark": "#1B2431",
+ "Greenish Turquoise": "#00FBB0",
+ "Pastel Red": "#DB5856",
+ "Piss Yellow": "#DDD618",
+ "Bright Cyan": "#41FDFE",
+ "Dark Coral": "#CF524E",
+ "Algae Green": "#21C36F",
+ "Darkish Red": "#A90308",
+ "Reddy Brown": "#6E1005",
+ "Blush Pink": "#FE828C",
+ "Camouflage Green": "#4B6113",
+ "Lawn Green": "#4DA409",
+ "Putty": "#BEAE8A",
+ "Vibrant Blue": "#0339F8",
+ "Dark Sand": "#A88F59",
+ "Purple/Blue": "#5D21D0",
+ "Saffron": "#FEB209",
+ "Twilight": "#4E518B",
+ "Warm Brown": "#964E02",
+ "Bluegrey": "#85A3B2",
+ "Bubble Gum Pink": "#FF69AF",
+ "Duck Egg Blue": "#C3FBF4",
+ "Greenish Cyan": "#2AFEB7",
+ "Petrol": "#005F6A",
+ "Royal": "#0C1793",
+ "Butter": "#FFFF81",
+ "Dusty Orange": "#F0833A",
+ "Off Yellow": "#F1F33F",
+ "Pale Olive Green": "#B1D27B",
+ "Orangish": "#FC824A",
+ "Leaf": "#71AA34",
+ "Light Blue Grey": "#B7C9E2",
+ "Dried Blood": "#4B0101",
+ "Lightish Purple": "#A552E6",
+ "Rusty Red": "#AF2F0D",
+ "Lavender Blue": "#8B88F8",
+ "Light Grass Green": "#9AF764",
+ "Light Mint Green": "#A6FBB2",
+ "Sunflower": "#FFC512",
+ "Velvet": "#750851",
+ "Brick Orange": "#C14A09",
+ "Lightish Red": "#FE2F4A",
+ "Pure Blue": "#0203E2",
+ "Twilight Blue": "#0A437A",
+ "Violet Red": "#A50055",
+ "Yellowy Brown": "#AE8B0C",
+ "Carnation": "#FD798F",
+ "Muddy Yellow": "#BFAC05",
+ "Dark Seafoam Green": "#3EAF76",
+ "Deep Rose": "#C74767",
+ "Dusty Red": "#B9484E",
+ "Grey/Blue": "#647D8E",
+ "Lemon Lime": "#BFFE28",
+ "Purple/Pink": "#D725DE",
+ "Brown Yellow": "#B29705",
+ "Purple Brown": "#673A3F",
+ "Wisteria": "#A87DC2",
+ "Banana Yellow": "#FAFE4B",
+ "Lipstick Red": "#C0022F",
+ "Water Blue": "#0E87CC",
+ "Brown Grey": "#8D8468",
+ "Vibrant Purple": "#AD03DE",
+ "Baby Green": "#8CFF9E",
+ "Barf Green": "#94AC02",
+ "Eggshell Blue": "#C4FFF7",
+ "Sandy Yellow": "#FDEE73",
+ "Cool Green": "#33B864",
+ "Pale": "#FFF9D0",
+ "Blue/Grey": "#758DA3",
+ "Hot Magenta": "#F504C9",
+ "Greyblue": "#77A1B5",
+ "Purpley": "#8756E4",
+ "Baby Shit Green": "#889717",
+ "Brownish Pink": "#C27E79",
+ "Dark Aquamarine": "#017371",
+ "Diarrhea": "#9F8303",
+ "Light Mustard": "#F7D560",
+ "Pale Sky Blue": "#BDF6FE",
+ "Turtle Green": "#75B84F",
+ "Bright Olive": "#9CBB04",
+ "Dark Grey Blue": "#29465B",
+ "Greeny Brown": "#696006",
+ "Lemon Green": "#ADF802",
+ "Light Periwinkle": "#C1C6FC",
+ "Seaweed Green": "#35AD6B",
+ "Sunshine Yellow": "#FFFD37",
+ "Ugly Purple": "#A442A0",
+ "Medium Pink": "#F36196",
+ "Puke Brown": "#947706",
+ "Very Light Pink": "#FFF4F2",
+ "Viridian": "#1E9167",
+ "Bile": "#B5C306",
+ "Faded Yellow": "#FEFF7F",
+ "Very Pale Green": "#CFFDBC",
+ "Vibrant Green": "#0ADD08",
+ "Bright Lime": "#87FD05",
+ "Spearmint": "#1EF876",
+ "Light Aquamarine": "#7BFDC7",
+ "Light Sage": "#BCECAC",
+ "Yellowgreen": "#BBF90F",
+ "Baby Poo": "#AB9004",
+ "Dark Seafoam": "#1FB57A",
+ "Deep Teal": "#00555A",
+ "Heather": "#A484AC",
+ "Rust Orange": "#C45508",
+ "Dirty Blue": "#3F829D",
+ "Fern Green": "#548D44",
+ "Bright Lilac": "#C95EFB",
+ "Weird Green": "#3AE57F",
+ "Peacock Blue": "#016795",
+ "Avocado Green": "#87A922",
+ "Faded Orange": "#F0944D",
+ "Grape Purple": "#5D1451",
+ "Hot Green": "#25FF29",
+ "Lime Yellow": "#D0FE1D",
+ "Mango": "#FFA62B",
+ "Shamrock": "#01B44C",
+ "Bubblegum": "#FF6CB5",
+ "Purplish Brown": "#6B4247",
+ "Vomit Yellow": "#C7C10C",
+ "Pale Cyan": "#B7FFFA",
+ "Key Lime": "#AEFF6E",
+ "Tomato Red": "#EC2D01",
+ "Lightgreen": "#76FF7B",
+ "Merlot": "#730039",
+ "Night Blue": "#040348",
+ "Purpleish Pink": "#DF4EC8",
+ "Apple": "#6ECB3C",
+ "Baby Poop Green": "#8F9805",
+ "Green Apple": "#5EDC1F",
+ "Heliotrope": "#D94FF5",
+ "Yellow/Green": "#C8FD3D",
+ "Almost Black": "#070D0D",
+ "Cool Blue": "#4984B8",
+ "Leafy Green": "#51B73B",
+ "Mustard Brown": "#AC7E04",
+ "Dusk": "#4E5481",
+ "Dull Brown": "#876E4B",
+ "Frog Green": "#58BC08",
+ "Vivid Green": "#2FEF10",
+ "Bright Light Green": "#2DFE54",
+ "Fluro Green": "#0AFF02",
+ "Kiwi": "#9CEF43",
+ "Seaweed": "#18D17B",
+ "Navy Green": "#35530A",
+ "Ultramarine Blue": "#1805DB",
+ "Iris": "#6258C4",
+ "Pastel Orange": "#FF964F",
+ "Yellowish Orange": "#FFAB0F",
+ "Perrywinkle": "#8F8CE7",
+ "Tealish": "#24BCA8",
+ "Dark Plum": "#3F012C",
+ "Pear": "#CBF85F",
+ "Pinkish Orange": "#FF724C",
+ "Midnight Purple": "#280137",
+ "Light Urple": "#B36FF6",
+ "Dark Mint": "#48C072",
+ "Greenish Tan": "#BCCB7A",
+ "Light Burgundy": "#A8415B",
+ "Turquoise Blue": "#06B1C4",
+ "Ugly Pink": "#CD7584",
+ "Sandy": "#F1DA7A",
+ "Electric Pink": "#FF0490",
+ "Muted Purple": "#805B87",
+ "Mid Green": "#50A747",
+ "Greyish": "#A8A495",
+ "Neon Yellow": "#CFFF04",
+ "Banana": "#FFFF7E",
+ "Carnation Pink": "#FF7FA7",
+ "Tomato": "#EF4026",
+ "Sea": "#3C9992",
+ "Muddy Brown": "#886806",
+ "Turquoise Green": "#04F489",
+ "Buff": "#FEF69E",
+ "Fawn": "#CFAF7B",
+ "Muted Blue": "#3B719F",
+ "Pale Rose": "#FDC1C5",
+ "Dark Mint Green": "#20C073",
+ "Amethyst": "#9B5FC0",
+ "Blue/Green": "#0F9B8E",
+ "Chestnut": "#742802",
+ "Sick Green": "#9DB92C",
+ "Pea": "#A4BF20",
+ "Rusty Orange": "#CD5909",
+ "Stone": "#ADA587",
+ "Rose Red": "#BE013C",
+ "Pale Aqua": "#B8FFEB",
+ "Deep Orange": "#DC4D01",
+ "Earth": "#A2653E",
+ "Mossy Green": "#638B27",
+ "Grassy Green": "#419C03",
+ "Pale Lime Green": "#B1FF65",
+ "Light Grey Blue": "#9DBCD4",
+ "Pale Grey": "#FDFDFE",
+ "Asparagus": "#77AB56",
+ "Blueberry": "#464196",
+ "Purple Red": "#990147",
+ "Pale Lime": "#BEFD73",
+ "Greenish Teal": "#32BF84",
+ "Caramel": "#AF6F09",
+ "Deep Magenta": "#A0025C",
+ "Light Peach": "#FFD8B1",
+ "Milk Chocolate": "#7F4E1E",
+ "Ocher": "#BF9B0C",
+ "Off Green": "#6BA353",
+ "Purply Pink": "#F075E6",
+ "Lightblue": "#7BC8F6",
+ "Dusky Blue": "#475F94",
+ "Golden": "#F5BF03",
+ "Light Beige": "#FFFEB6",
+ "Butter Yellow": "#FFFD74",
+ "Dusky Purple": "#895B7B",
+ "French Blue": "#436BAD",
+ "Ugly Yellow": "#D0C101",
+ "Greeny Yellow": "#C6F808",
+ "Orangish Red": "#F43605",
+ "Shamrock Green": "#02C14D",
+ "Orangish Brown": "#B25F03",
+ "Tree Green": "#2A7E19",
+ "Deep Violet": "#490648",
+ "Gunmetal": "#536267",
+ "Blue/Purple": "#5A06EF",
+ "Cherry": "#CF0234",
+ "Sandy Brown": "#C4A661",
+ "Warm Grey": "#978A84",
+ "Dark Indigo": "#1F0954",
+ "Midnight": "#03012D",
+ "Bluey Green": "#2BB179",
+ "Grey Pink": "#C3909B",
+ "Soft Purple": "#A66FB5",
+ "Blood": "#770001",
+ "Brown Red": "#922B05",
+ "Medium Grey": "#7D7F7C",
+ "Berry": "#990F4B",
+ "Poo": "#8F7303",
+ "Purpley Pink": "#C83CB9",
+ "Light Salmon": "#FEA993",
+ "Snot": "#ACBB0D",
+ "Easter Purple": "#C071FE",
+ "Light Yellow Green": "#CCFD7F",
+ "Dark Navy Blue": "#00022E",
+ "Drab": "#828344",
+ "Light Rose": "#FFC5CB",
+ "Rouge": "#AB1239",
+ "Purplish Red": "#B0054B",
+ "Slime Green": "#99CC04",
+ "Baby Poop": "#937C00",
+ "Irish Green": "#019529",
+ "Pink/Purple": "#EF1DE7",
+ "Dark Navy": "#000435",
+ "Greeny Blue": "#42B395",
+ "Light Plum": "#9D5783",
+ "Pinkish Grey": "#C8ACA9",
+ "Dirty Orange": "#C87606",
+ "Rust Red": "#AA2704",
+ "Pale Lilac": "#E4CBFF",
+ "Orangey Red": "#FA4224",
+ "Primary Blue": "#0804F9",
+ "Kermit Green": "#5CB200",
+ "Brownish Purple": "#76424E",
+ "Murky Green": "#6C7A0E",
+ "Wheat": "#FBDD7E",
+ "Very Dark Purple": "#2A0134",
+ "Bottle Green": "#044A05",
+ "Watermelon": "#FD4659",
+ "Deep Sky Blue": "#0D75F8",
+ "Fire Engine Red": "#FE0002",
+ "Yellow Ochre": "#CB9D06",
+ "Pumpkin Orange": "#FB7D07",
+ "Pale Olive": "#B9CC81",
+ "Light Lilac": "#EDC8FF",
+ "Lightish Green": "#61E160",
+ "Carolina Blue": "#8AB8FE",
+ "Mulberry": "#920A4E",
+ "Shocking Pink": "#FE02A2",
+ "Auburn": "#9A3001",
+ "Bright Lime Green": "#65FE08",
+ "Celadon": "#BEFDB7",
+ "Pinkish Brown": "#B17261",
+ "Poo Brown": "#885F01",
+ "Bright Sky Blue": "#02CCFE",
+ "Celery": "#C1FD95",
+ "Dirt Brown": "#836539",
+ "Strawberry": "#FB2943",
+ "Dark Lime": "#84B701",
+ "Copper": "#B66325",
+ "Medium Brown": "#7F5112",
+ "Muted Green": "#5FA052",
+ "Robin'S Egg": "#6DEDFD",
+ "Bright Aqua": "#0BF9EA",
+ "Bright Lavender": "#C760FF",
+ "Ivory": "#FFFFCB",
+ "Very Light Purple": "#F6CEFC",
+ "Light Navy": "#155084",
+ "Pink Red": "#F5054F",
+ "Olive Brown": "#645403",
+ "Poop Brown": "#7A5901",
+ "Mustard Green": "#A8B504",
+ "Ocean Green": "#3D9973",
+ "Very Dark Blue": "#000133",
+ "Dusty Green": "#76A973",
+ "Light Navy Blue": "#2E5A88",
+ "Minty Green": "#0BF77D",
+ "Adobe": "#BD6C48",
+ "Barney": "#AC1DB8",
+ "Jade Green": "#2BAF6A",
+ "Bright Light Blue": "#26F7FD",
+ "Light Lime": "#AEFD6C",
+ "Dark Khaki": "#9B8F55",
+ "Orange Yellow": "#FFAD01",
+ "Ocre": "#C69C04",
+ "Maize": "#F4D054",
+ "Faded Pink": "#DE9DAC",
+ "British Racing Green": "#05480D",
+ "Sandstone": "#C9AE74",
+ "Mud Brown": "#60460F",
+ "Light Sea Green": "#98F6B0",
+ "Robin Egg Blue": "#8AF1FE",
+ "Aqua Marine": "#2EE8BB",
+ "Dark Sea Green": "#11875D",
+ "Soft Pink": "#FDB0C0",
+ "Orangey Brown": "#B16002",
+ "Cherry Red": "#F7022A",
+ "Burnt Yellow": "#D5AB09",
+ "Brownish Grey": "#86775F",
+ "Camel": "#C69F59",
+ "Purplish Grey": "#7A687F",
+ "Marine": "#042E60",
+ "Greyish Pink": "#C88D94",
+ "Pale Turquoise": "#A5FBD5",
+ "Pastel Yellow": "#FFFE71",
+ "Bluey Purple": "#6241C7",
+ "Canary Yellow": "#FFFE40",
+ "Faded Red": "#D3494E",
+ "Sepia": "#985E2B",
+ "Coffee": "#A6814C",
+ "Bright Magenta": "#FF08E8",
+ "Mocha": "#9D7651",
+ "Ecru": "#FEFFCA",
+ "Purpleish": "#98568D",
+ "Cranberry": "#9E003A",
+ "Darkish Green": "#287C37",
+ "Brown Orange": "#B96902",
+ "Dusky Rose": "#BA6873",
+ "Melon": "#FF7855",
+ "Sickly Green": "#94B21C",
+ "Silver": "#C5C9C7",
+ "Purply Blue": "#661AEE",
+ "Purpleish Blue": "#6140EF",
+ "Hospital Green": "#9BE5AA",
+ "Shit Brown": "#7B5804",
+ "Mid Blue": "#276AB3",
+ "Amber": "#FEB308",
+ "Easter Green": "#8CFD7E",
+ "Soft Blue": "#6488EA",
+ "Cerulean Blue": "#056EEE",
+ "Golden Brown": "#B27A01",
+ "Bright Turquoise": "#0FFEF9",
+ "Red Pink": "#FA2A55",
+ "Red Purple": "#820747",
+ "Greyish Brown": "#7A6A4F",
+ "Vermillion": "#F4320C",
+ "Russet": "#A13905",
+ "Steel Grey": "#6F828A",
+ "Lighter Purple": "#A55AF4",
+ "Bright Violet": "#AD0AFD",
+ "Prussian Blue": "#004577",
+ "Slate Green": "#658D6D",
+ "Dirty Pink": "#CA7B80",
+ "Dark Blue Green": "#005249",
+ "Pine": "#2B5D34",
+ "Yellowy Green": "#BFF128",
+ "Dark Gold": "#B59410",
+ "Bluish": "#2976BB",
+ "Darkish Blue": "#014182",
+ "Dull Red": "#BB3F3F",
+ "Pinky Red": "#FC2647",
+ "Bronze": "#A87900",
+ "Pale Teal": "#82CBB2",
+ "Military Green": "#667C3E",
+ "Barbie Pink": "#FE46A5",
+ "Bubblegum Pink": "#FE83CC",
+ "Pea Soup Green": "#94A617",
+ "Dark Mustard": "#A88905",
+ "Shit": "#7F5F00",
+ "Medium Purple": "#9E43A2",
+ "Very Dark Green": "#062E03",
+ "Dirt": "#8A6E45",
+ "Dusky Pink": "#CC7A8B",
+ "Red Violet": "#9E0168",
+ "Lemon Yellow": "#FDFF38",
+ "Pistachio": "#C0FA8B",
+ "Dull Yellow": "#EEDC5B",
+ "Dark Lime Green": "#7EBD01",
+ "Denim Blue": "#3B5B92",
+ "Teal Blue": "#01889F",
+ "Lightish Blue": "#3D7AFD",
+ "Purpley Blue": "#5F34E7",
+ "Light Indigo": "#6D5ACF",
+ "Swamp Green": "#748500",
+ "Brown Green": "#706C11",
+ "Dark Maroon": "#3C0008",
+ "Hot Purple": "#CB00F5",
+ "Dark Forest Green": "#002D04",
+ "Faded Blue": "#658CBB",
+ "Drab Green": "#749551",
+ "Light Lime Green": "#B9FF66",
+ "Snot Green": "#9DC100",
+ "Yellowish": "#FAEE66",
+ "Light Blue Green": "#7EFBB3",
+ "Bordeaux": "#7B002C",
+ "Light Mauve": "#C292A1",
+ "Ocean": "#017B92",
+ "Marigold": "#FCC006",
+ "Muddy Green": "#657432",
+ "Dull Orange": "#D8863B",
+ "Steel": "#738595",
+ "Electric Purple": "#AA23FF",
+ "Fluorescent Green": "#08FF08",
+ "Yellowish Brown": "#9B7A01",
+ "Blush": "#F29E8E",
+ "Soft Green": "#6FC276",
+ "Bright Orange": "#FF5B00",
+ "Lemon": "#FDFF52",
+ "Purple Grey": "#866F85",
+ "Acid Green": "#8FFE09",
+ "Pale Lavender": "#EECFFE",
+ "Violet Blue": "#510AC9",
+ "Light Forest Green": "#4F9153",
+ "Burnt Red": "#9F2305",
+ "Khaki Green": "#728639",
+ "Cerise": "#DE0C62",
+ "Faded Purple": "#916E99",
+ "Apricot": "#FFB16D",
+ "Dark Olive Green": "#3C4D03",
+ "Grey Brown": "#7F7053",
+ "Green Grey": "#77926F",
+ "True Blue": "#010FCC",
+ "Pale Violet": "#CEAEFA",
+ "Periwinkle Blue": "#8F99FB",
+ "Light Sky Blue": "#C6FCFF",
+ "Blurple": "#5539CC",
+ "Green Brown": "#544E03",
+ "Bluegreen": "#017A79",
+ "Bright Teal": "#01F9C6",
+ "Brownish Yellow": "#C9B003",
+ "Pea Soup": "#929901",
+ "Forest": "#0B5509",
+ "Barney Purple": "#A00498",
+ "Ultramarine": "#2000B1",
+ "Purplish": "#94568C",
+ "Puke Yellow": "#C2BE0E",
+ "Bluish Grey": "#748B97",
+ "Dark Periwinkle": "#665FD1",
+ "Dark Lilac": "#9C6DA5",
+ "Reddish": "#C44240",
+ "Light Maroon": "#A24857",
+ "Dusty Purple": "#825F87",
+ "Terra Cotta": "#C9643B",
+ "Avocado": "#90B134",
+ "Marine Blue": "#01386A",
+ "Teal Green": "#25A36F",
+ "Slate Grey": "#59656D",
+ "Lighter Green": "#75FD63",
+ "Electric Green": "#21FC0D",
+ "Dusty Blue": "#5A86AD",
+ "Golden Yellow": "#FEC615",
+ "Bright Yellow": "#FFFD01",
+ "Light Lavender": "#DFC5FE",
+ "Umber": "#B26400",
+ "Poop": "#7F5E00",
+ "Dark Peach": "#DE7E5D",
+ "Jungle Green": "#048243",
+ "Eggshell": "#FFFFD4",
+ "Denim": "#3B638C",
+ "Yellow Brown": "#B79400",
+ "Dull Purple": "#84597E",
+ "Chocolate Brown": "#411900",
+ "Wine Red": "#7B0323",
+ "Neon Blue": "#04D9FF",
+ "Dirty Green": "#667E2C",
+ "Light Tan": "#FBEEAC",
+ "Ice Blue": "#D7FFFE",
+ "Cadet Blue": "#4E7496",
+ "Dark Mauve": "#874C62",
+ "Very Light Blue": "#D5FFFF",
+ "Grey Purple": "#826D8C",
+ "Pastel Pink": "#FFBACD",
+ "Very Light Green": "#D1FFBD",
+ "Dark Sky Blue": "#448EE4",
+ "Evergreen": "#05472A",
+ "Dull Pink": "#D5869D",
+ "Aubergine": "#3D0734",
+ "Mahogany": "#4A0100",
+ "Reddish Orange": "#F8481C",
+ "Deep Green": "#02590F",
+ "Vomit Green": "#89A203",
+ "Purple Pink": "#E03FD8",
+ "Dusty Pink": "#D58A94",
+ "Faded Green": "#7BB274",
+ "Camo Green": "#526525",
+ "Pinky Purple": "#C94CBE",
+ "Pink Purple": "#DB4BDA",
+ "Brownish Red": "#9E3623",
+ "Dark Rose": "#B5485D",
+ "Mud": "#735C12",
+ "Brownish": "#9C6D57",
+ "Emerald Green": "#028F1E",
+ "Pale Brown": "#B1916E",
+ "Dull Blue": "#49759C",
+ "Burnt Umber": "#A0450E",
+ "Medium Green": "#39AD48",
+ "Clay": "#B66A50",
+ "Light Aqua": "#8CFFDB",
+ "Light Olive Green": "#A4BE5C",
+ "Brownish Orange": "#CB7723",
+ "Dark Aqua": "#05696B",
+ "Purplish Pink": "#CE5DAE",
+ "Dark Salmon": "#C85A53",
+ "Greenish Grey": "#96AE8D",
+ "Jade": "#1FA774",
+ "Ugly Green": "#7A9703",
+ "Dark Beige": "#AC9362",
+ "Emerald": "#01A049",
+ "Pale Red": "#D9544D",
+ "Light Magenta": "#FA5FF7",
+ "Sky": "#82CAFC",
+ "Light Cyan": "#ACFFFC",
+ "Yellow Orange": "#FCB001",
+ "Reddish Purple": "#910951",
+ "Reddish Pink": "#FE2C54",
+ "Orchid": "#C875C4",
+ "Dirty Yellow": "#CDC50A",
+ "Orange Red": "#FD411E",
+ "Deep Red": "#9A0200",
+ "Orange Brown": "#BE6400",
+ "Cobalt Blue": "#030AA7",
+ "Neon Pink": "#FE019A",
+ "Rose Pink": "#F7879A",
+ "Greyish Purple": "#887191",
+ "Raspberry": "#B00149",
+ "Aqua Green": "#12E193",
+ "Salmon Pink": "#FE7B7C",
+ "Tangerine": "#FF9408",
+ "Brownish Green": "#6A6E09",
+ "Red Brown": "#8B2E16",
+ "Greenish Brown": "#696112",
+ "Pumpkin": "#E17701",
+ "Pine Green": "#0A481E",
+ "Charcoal": "#343837",
+ "Baby Pink": "#FFB7CE",
+ "Cornflower": "#6A79F7",
+ "Blue Violet": "#5D06E9",
+ "Chocolate": "#3D1C02",
+ "Greyish Green": "#82A67D",
+ "Scarlet": "#BE0119",
+ "Green Yellow": "#C9FF27",
+ "Dark Olive": "#373E02",
+ "Sienna": "#A9561E",
+ "Pastel Purple": "#CAA0FF",
+ "Terracotta": "#CA6641",
+ "Aqua Blue": "#02D8E9",
+ "Sage Green": "#88B378",
+ "Blood Red": "#980002",
+ "Deep Pink": "#CB0162",
+ "Grass": "#5CAC2D",
+ "Moss": "#769958",
+ "Pastel Blue": "#A2BFFE",
+ "Bluish Green": "#10A674",
+ "Green Blue": "#06B48B",
+ "Dark Tan": "#AF884A",
+ "Greenish Blue": "#0B8B87",
+ "Pale Orange": "#FFA756",
+ "Vomit": "#A2A415",
+ "Forrest Green": "#154406",
+ "Dark Lavender": "#856798",
+ "Dark Violet": "#34013F",
+ "Purple Blue": "#632DE9",
+ "Dark Cyan": "#0A888A",
+ "Olive Drab": "#6F7632",
+ "Pinkish": "#D46A7E",
+ "Cobalt": "#1E488F",
+ "Neon Purple": "#BC13FE",
+ "Light Turquoise": "#7EF4CC",
+ "Apple Green": "#76CD26",
+ "Dull Green": "#74A662",
+ "Wine": "#80013F",
+ "Powder Blue": "#B1D1FC",
+ "Off White": "#FFFFE4",
+ "Electric Blue": "#0652FF",
+ "Dark Turquoise": "#045C5A",
+ "Blue Purple": "#5729CE",
+ "Azure": "#069AF3",
+ "Bright Red": "#FF000D",
+ "Pinkish Red": "#F10C45",
+ "Cornflower Blue": "#5170D7",
+ "Light Olive": "#ACBF69",
+ "Grape": "#6C3461",
+ "Greyish Blue": "#5E819D",
+ "Purplish Blue": "#601EF9",
+ "Yellowish Green": "#B0DD16",
+ "Greenish Yellow": "#CDFD02",
+ "Medium Blue": "#2C6FBB",
+ "Dusty Rose": "#C0737A",
+ "Light Violet": "#D6B4FC",
+ "Midnight Blue": "#020035",
+ "Bluish Purple": "#703BE7",
+ "Red Orange": "#FD3C06",
+ "Dark Magenta": "#960056",
+ "Greenish": "#40A368",
+ "Ocean Blue": "#03719C",
+ "Coral": "#FC5A50",
+ "Cream": "#FFFFC2",
+ "Reddish Brown": "#7F2B0A",
+ "Burnt Sienna": "#B04E0F",
+ "Brick": "#A03623",
+ "Sage": "#87AE73",
+ "Grey Green": "#789B73",
+ "White": "#FFFFFF",
+ "Robin'S Egg Blue": "#98EFF9",
+ "Moss Green": "#658B38",
+ "Steel Blue": "#5A7D9A",
+ "Eggplant": "#380835",
+ "Light Yellow": "#FFFE7A",
+ "Leaf Green": "#5CA904",
+ "Light Grey": "#D8DCD6",
+ "Puke": "#A5A502",
+ "Pinkish Purple": "#D648D7",
+ "Sea Blue": "#047495",
+ "Pale Purple": "#B790D4",
+ "Slate Blue": "#5B7C99",
+ "Blue Grey": "#607C8E",
+ "Hunter Green": "#0B4008",
+ "Fuchsia": "#ED0DD9",
+ "Crimson": "#8C000F",
+ "Pale Yellow": "#FFFF84",
+ "Ochre": "#BF9005",
+ "Mustard Yellow": "#D2BD0A",
+ "Light Red": "#FF474C",
+ "Cerulean": "#0485D1",
+ "Pale Pink": "#FFCFDC",
+ "Deep Blue": "#040273",
+ "Rust": "#A83C09",
+ "Light Teal": "#90E4C1",
+ "Slate": "#516572",
+ "Goldenrod": "#FAC205",
+ "Dark Yellow": "#D5B60A",
+ "Dark Grey": "#363737",
+ "Army Green": "#4B5D16",
+ "Grey Blue": "#6B8BA4",
+ "Seafoam": "#80F9AD",
+ "Puce": "#A57E52",
+ "Spring Green": "#A9F971",
+ "Dark Orange": "#C65102",
+ "Sand": "#E2CA76",
+ "Pastel Green": "#B0FF9D",
+ "Mint": "#9FFEB0",
+ "Light Orange": "#FDAA48",
+ "Bright Pink": "#FE01B1",
+ "Chartreuse": "#C1F80A",
+ "Deep Purple": "#36013F",
+ "Dark Brown": "#341C02",
+ "Taupe": "#B9A281",
+ "Pea Green": "#8EAB12",
+ "Puke Green": "#9AAE07",
+ "Kelly Green": "#02AB2E",
+ "Seafoam Green": "#7AF9AB",
+ "Blue Green": "#137E6D",
+ "Khaki": "#AAA662",
+ "Burgundy": "#610023",
+ "Dark Teal": "#014D4E",
+ "Brick Red": "#8F1402",
+ "Royal Purple": "#4B006E",
+ "Plum": "#580F41",
+ "Mint Green": "#8FFF9F",
+ "Gold": "#DBB40C",
+ "Baby Blue": "#A2CFFE",
+ "Yellow Green": "#C0FB2D",
+ "Bright Purple": "#BE03FD",
+ "Dark Red": "#840000",
+ "Pale Blue": "#D0FEFE",
+ "Grass Green": "#3F9B0B",
+ "Navy": "#01153E",
+ "Aquamarine": "#04D8B2",
+ "Burnt Orange": "#C04E01",
+ "Neon Green": "#0CFF0C",
+ "Bright Blue": "#0165FC",
+ "Rose": "#CF6275",
+ "Light Pink": "#FFD1DF",
+ "Mustard": "#CEB301",
+ "Indigo": "#380282",
+ "Lime": "#AAFF32",
+ "Sea Green": "#53FCA1",
+ "Periwinkle": "#8E82FE",
+ "Dark Pink": "#CB416B",
+ "Olive Green": "#677A04",
+ "Peach": "#FFB07C",
+ "Pale Green": "#C7FDB5",
+ "Light Brown": "#AD8150",
+ "Hot Pink": "#FF028D",
+ "Black": "#000000",
+ "Lilac": "#CEA2FD",
+ "Navy Blue": "#001146",
+ "Royal Blue": "#0504AA",
+ "Beige": "#E6DAA6",
+ "Salmon": "#FF796C",
+ "Olive": "#6E750E",
+ "Maroon": "#650021",
+ "Bright Green": "#01FF07",
+ "Dark Purple": "#35063E",
+ "Mauve": "#AE7181",
+ "Forest Green": "#06470C",
+ "Aqua": "#13EAC9",
+ "Cyan": "#00FFFF",
+ "Tan": "#D1B26F",
+ "Dark Blue": "#00035B",
+ "Lavender": "#C79FEF",
+ "Turquoise": "#06C2AC",
+ "Dark Green": "#033500",
+ "Violet": "#9A0EEA",
+ "Light Purple": "#BF77F6",
+ "Lime Green": "#89FE05",
+ "Grey": "#929591",
+ "Sky Blue": "#75BBFD",
+ "Yellow": "#FFFF14",
+ "Magenta": "#C20078",
+ "Light Green": "#96F97B",
+ "Orange": "#F97306",
+ "Teal": "#029386",
+ "Light Blue": "#95D0FC",
+ "Red": "#E50000",
+ "Brown": "#653700",
+ "Pink": "#FF81C0",
+ "Blue": "#0343DF",
+ "Green": "#15B01A",
+ "Purple": "#7E1E9C"
+}
diff --git a/src/utils/colourUtils.ts b/src/utils/colourUtils.ts
new file mode 100644
index 0000000..58adcd2
--- /dev/null
+++ b/src/utils/colourUtils.ts
@@ -0,0 +1,164 @@
+import { CMYK, HSL, IColourValues, RGB } from "../interfaces";
+import htmlCodes from "./colourCodes/htmlColours.json";
+import xkcdCodes from "./colourCodes/xkcdColours.json";
+
+const hexToRgb = (hex: string): RGB => {
+ hex = hex.replace("#", "");
+
+ return {
+ r: parseInt(hex.substring(0, 2), 16),
+ g: parseInt(hex.substring(2, 4), 16),
+ b: parseInt(hex.substring(4, 6), 16)
+ };
+}
+
+const rgbToHex = (rgb: RGB): string => {
+ rgb.r = Math.min(255, Math.max(0, rgb.r));
+ rgb.g = Math.min(255, Math.max(0, rgb.g));
+ rgb.b = Math.min(255, Math.max(0, rgb.b));
+
+ const hexR = rgb.r.toString(16).padStart(2, "0");
+ const hexG = rgb.g.toString(16).padStart(2, "0");
+ const hexB = rgb.b.toString(16).padStart(2, "0");
+
+ return `#${hexR}${hexG}${hexB}`;
+}
+
+const rgbToHSL = (rgb: RGB): HSL => {
+ const rNormalized = rgb.r / 255;
+ const gNormalized = rgb.g / 255;
+ const bNormalized = rgb.b / 255;
+
+ const max = Math.max(rNormalized, gNormalized, bNormalized);
+ const min = Math.min(rNormalized, gNormalized, bNormalized);
+ let h = 0, s, l = (max + min) / 2;
+
+ if (max === min) {
+ h = s = 0; // achromatic
+ } else {
+ const d = max - min;
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
+
+ switch (max) {
+ case rNormalized:
+ h = (gNormalized - bNormalized) / d + (gNormalized < bNormalized ? 6 : 0);
+ break;
+ case gNormalized:
+ h = (bNormalized - rNormalized) / d + 2;
+ break;
+ case bNormalized:
+ h = (rNormalized - gNormalized) / d + 4;
+ break;
+ }
+
+ h /= 6;
+ }
+
+ return {
+ h: Math.round(h * 360),
+ s: Math.round(s * 100),
+ l: Math.round(l * 100)
+ };
+}
+
+const rgbToCMYK = (rgb: RGB): CMYK => {
+ const rNormalized = rgb.r / 255;
+ const gNormalized = rgb.g / 255;
+ const bNormalized = rgb.b / 255;
+
+ const k = 1 - Math.max(rNormalized, gNormalized, bNormalized);
+ const c = (1 - rNormalized - k) / (1 - k);
+ const m = (1 - gNormalized - k) / (1 - k);
+ const y = (1 - bNormalized - k) / (1 - k);
+
+ return {
+ c: Math.round(c * 100),
+ m: Math.round(m * 100),
+ y: Math.round(y * 100),
+ k: Math.round(k * 100)
+ };
+}
+
+const hslToRGB = (hsl: HSL): RGB => {
+ const hueToRGB = (p: number, q: number, t: number): number => {
+ if (t < 0) t += 1;
+ if (t > 1) t -= 1;
+ if (t < 1 / 6) return p + (q - p) * 6 * t;
+ if (t < 1 / 2) return q;
+ if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
+ return p;
+ }
+
+ const { h, s, l } = hsl;
+ const hNormalized = h / 360;
+ const sNormalized = s / 100;
+ const lNormalized = l / 100;
+
+ if (sNormalized === 0) {
+ // Achromatic color (gray)
+ const grayValue = Math.round(lNormalized * 255);
+ return { r: grayValue, g: grayValue, b: grayValue };
+ }
+
+ const q = lNormalized < 0.5 ? lNormalized * (1 + sNormalized) : lNormalized + sNormalized - lNormalized * sNormalized;
+ const p = 2 * lNormalized - q;
+
+ const r = Math.round(hueToRGB(p, q, hNormalized + 1 / 3) * 255);
+ const g = Math.round(hueToRGB(p, q, hNormalized) * 255);
+ const b = Math.round(hueToRGB(p, q, hNormalized - 1 / 3) * 255);
+
+ return { r, g, b };
+}
+
+const cmykToRGB = (cmyk: CMYK): RGB => {
+ const { c, m, y, k } = cmyk;
+ const cNormalized = c / 100;
+ const mNormalized = m / 100;
+ const yNormalized = y / 100;
+ const kNormalized = k / 100;
+
+ const r = Math.round(255 * (1 - cNormalized) * (1 - kNormalized));
+ const g = Math.round(255 * (1 - mNormalized) * (1 - kNormalized));
+ const b = Math.round(255 * (1 - yNormalized) * (1 - kNormalized));
+
+ return { r, g, b };
+}
+
+const getHTMLColorName = (hexColor: string): string => getColorName(hexColor, htmlCodes);
+const getXKCDColorName = (hexColor: string): string => getColorName(hexColor, xkcdCodes);
+
+const getColorName = (hexColor: string, collective: { [key: string]: string }): string => {
+ hexColor = hexColor.toUpperCase();
+
+ for (const colorName in collective) {
+ if (collective[colorName] === hexColor) {
+ return colorName;
+ }
+ }
+
+ return "Not Defined";
+}
+
+export const isValidColorString = (str: string) => {
+ const colorPattern = /^(#)?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
+ return colorPattern.test(str);
+}
+
+export const rgbToAll = (rgb: RGB): IColourValues => {
+ const hex = rgbToHex(rgb);
+ return ({
+ hex: hex,
+ rgb: rgb,
+ cmyk: rgbToCMYK(rgb),
+ hsl: rgbToHSL(rgb),
+ htmlCode: getHTMLColorName(hex),
+ xkcdCode: getXKCDColorName(hex),
+ oxVar: hex.toUpperCase().replace('#', '0x')
+ });
+}
+
+export const hexToAll = (hex: string): IColourValues => rgbToAll(hexToRgb(hex));
+
+export const hslToAll = (hsl: HSL): IColourValues => rgbToAll(hslToRGB(hsl));
+
+export const cmykToAll = (cmyk: CMYK): IColourValues => rgbToAll(cmykToRGB(cmyk));