color-contrast-finder
Version:
The Color Contrast Finder is a library that automatically selects text colors that contrast with a given color.
2 lines (1 loc) • 5.04 kB
JavaScript
(function(d,c){typeof exports=="object"&&typeof module<"u"?c(exports):typeof define=="function"&&define.amd?define(["exports"],c):(d=typeof globalThis<"u"?globalThis:d||self,c(d["color-contrast-finder"]={}))})(this,(function(d){"use strict";const c={WHITE:"#FFFFFF",BLACK:"#000000"},h=1,m={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",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#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",grey:"#808080",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",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#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",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",slategrey:"#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"};function w(f){if(!/^#?([a-fA-F0-9]{3}|[a-fA-F0-9]{4}|[a-fA-F0-9]{6}|[a-fA-F0-9]{8})$/.test(f))throw new Error("Invalid HEX color code");const e=f.replace(/^#/,"");let a,n,o,t=h;return e.length===3||e.length===4?(a=parseInt(e[0]+e[0],16),n=parseInt(e[1]+e[1],16),o=parseInt(e[2]+e[2],16),e.length===4&&(t=parseInt(e[3]+e[3],16)/255)):(a=parseInt(e.slice(0,2),16),n=parseInt(e.slice(2,4),16),o=parseInt(e.slice(4,6),16),e.length===8&&(t=parseInt(e.slice(6,8),16)/255)),{r:a,g:n,b:o,a:t}}function y(f){const r=f.trim(),e=r.startsWith("rgb(")&&r.endsWith(")"),a=r.startsWith("rgba(")&&r.endsWith(")");if(!e&&!a)throw new Error("Invalid RGB color code");const n=r.slice(r.indexOf("(")+1,-1).split(",");if(e&&n.length!==3||a&&n.length!==4)throw new Error("Invalid RGB color code");const o=b=>{const l=Number(b.trim());if(!Number.isInteger(l)||l<0||l>255)throw new Error("Invalid RGB color code");return l},t=b=>{if(b==null)return h;const l=Number(b.trim());if(!Number.isFinite(l)||l<0||l>1)throw new Error("Invalid RGB color code");return l},[s,i,u,g]=n;return{r:o(s),g:o(i),b:o(u),a:t(g)}}function k(f){let r=f.trim().toLowerCase();if(r in m&&(r=m[r]),r.startsWith("#"))return w(r);if(r.startsWith("rgb")){const e=y(r);if(e)return e;throw new Error("Invalid RGB color format")}throw new Error("Invalid color format")}function p({r:f,g:r,b:e}){const a=s=>{const i=s/255;return i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)},n=a(f),o=a(r),t=a(e);return n*.2126+o*.7152+t*.0722}function v(f,r){const e=p({r:255,g:255,b:255});return f<1?f*r+(1-f)*e:r}function C(f,r,e,a){return f>=r?e:a}function I(f){const{color:r,threshold:e=.5,highColor:a=c.BLACK,lowColor:n=c.WHITE}=f,{r:o,g:t,b:s,a:i}=k(r),u=p({r:o,g:t,b:s}),g=v(i,u);return C(g,e,a,n)}d.findContrastColor=I,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})}));