aboutsummaryrefslogtreecommitdiff
path: root/src/lib/color.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/color.ts')
-rw-r--r--src/lib/color.ts36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/lib/color.ts b/src/lib/color.ts
new file mode 100644
index 0000000..59b320d
--- /dev/null
+++ b/src/lib/color.ts
@@ -0,0 +1,36 @@
+interface Color {
+ red: number,
+ green: number,
+ blue: number,
+}
+
+export function parse(str: string): Color {
+ return {
+ red: parseInt(str.slice(1,3), 16),
+ green: parseInt(str.slice(3,5), 16),
+ blue: parseInt(str.slice(5,7), 16),
+ }
+}
+
+// https://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrastratio
+export function contrastRatio(c1: Color, c2: Color): number {
+ const r1 = relativeLuminance(c1)
+ const r2 = relativeLuminance(c2)
+
+ return r1 > r2
+ ? (r1 + 0.05) / (r2 + 0.05)
+ : (r2 + 0.05) / (r1 + 0.05)
+}
+
+function relativeLuminance(c: Color): number {
+ return (
+ 0.2126 * fromSRGB(c.red / 255)
+ + 0.7152 * fromSRGB(c.green / 255)
+ + 0.0722 * fromSRGB(c.blue / 255))
+}
+
+function fromSRGB(sRGB: number): number {
+ return sRGB <= 0.03928
+ ? sRGB / 12.92
+ : Math.pow(((sRGB + 0.055) / 1.055), 2.4)
+}