@sardine/colour 2.3.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -3
- package/dist/assertions.d.ts +4 -1
- package/dist/convertCSSRGBtoHex.d.ts +3 -0
- package/dist/convertCSSRGBtoRGB.d.ts +12 -0
- package/dist/convertRGBtoHSV.d.ts +16 -0
- package/dist/getContrastRatio.d.ts +3 -2
- package/dist/index.cjs +359 -259
- package/dist/index.d.ts +5 -4
- package/dist/index.min.js +1 -7
- package/dist/index.mjs +360 -260
- package/dist/isDarkColour.d.ts +2 -2
- package/dist/sortHexColours.d.ts +26 -0
- package/dist/types.d.ts +12 -1
- package/dist/util/index.d.ts +2 -12
- package/dist/util/regexers.d.ts +6 -9
- package/package.json +73 -57
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { isCSSRGBColour, isHexColour, isNamedCSSColour } from "./assertions";
|
|
2
2
|
export { ciede2000 } from "./CIEDE2000";
|
|
3
3
|
export { convertCSSRGBtoHex } from "./convertCSSRGBtoHex";
|
|
4
4
|
export { convertCSSRGBtoRGB } from "./convertCSSRGBtoRGB";
|
|
5
|
+
export { convertHextoCSSRGB } from "./convertHextoCSSRGB";
|
|
5
6
|
export { convertHextoNamedCSSColour } from "./convertHextoNamedCSSColour";
|
|
6
7
|
export { convertHextoRGB } from "./convertHextoRGB";
|
|
7
|
-
export { convertHextoCSSRGB } from "./convertHextoCSSRGB";
|
|
8
8
|
export { convertNamedCSSColourtoHex } from "./convertNamedCSSColourtoHex";
|
|
9
9
|
export { convertNamedCSSColourtoRGB } from "./convertNamedCSSColourtoRGB";
|
|
10
10
|
export { convertRGBtoCSSRGB } from "./convertRGBtoCSSRGB";
|
|
@@ -13,8 +13,8 @@ export { convertRGBtoLab } from "./convertRGBtoLab";
|
|
|
13
13
|
export { convertRGBtoNamedCSSColour } from "./convertRGBtoNamedCSSColour";
|
|
14
14
|
export { convertRGBtoXYZ } from "./convertRGBtoXYZ";
|
|
15
15
|
export { convertXYZtoLab } from "./convertXYZtoLab";
|
|
16
|
-
export { findNearestCSSRGBColour } from "./findNearestCSSRGBColour";
|
|
17
16
|
export { findNearestColour } from "./findNearestColour";
|
|
17
|
+
export { findNearestCSSRGBColour } from "./findNearestCSSRGBColour";
|
|
18
18
|
export { findNearestHexColour } from "./findNearestHexColour";
|
|
19
19
|
export { findNearestNamedCSSColour } from "./findNearestNamedCSSColour";
|
|
20
20
|
export { findNearestRGBColour } from "./findNearestRGBColour";
|
|
@@ -25,8 +25,9 @@ export { getContrastRatioFromNamedCSSColour } from "./getContrastRatioFromNamedC
|
|
|
25
25
|
export { getSRGBLuminanceFromHex } from "./getSRGBLuminanceFromHex";
|
|
26
26
|
export { getSRGBLuminanceFromRGB } from "./getSRGBLuminanceFromRGB";
|
|
27
27
|
export { isCSSNamedDarkColour } from "./isCSSNameDarkColour";
|
|
28
|
-
export { isCSSRGBColour } from "./assertions";
|
|
29
28
|
export { isCSSRGBDarkColour } from "./isCSSRGBDarkColour";
|
|
30
29
|
export { isDarkColour } from "./isDarkColour";
|
|
31
30
|
export { isHexDarkColour } from "./isHexDarkColour";
|
|
32
31
|
export { pickHexColourContrast } from "./pickHexColourContrast";
|
|
32
|
+
export { RGBdistance } from "./RGBdistance";
|
|
33
|
+
export { sortHexColours } from "./sortHexColours";
|
package/dist/index.min.js
CHANGED
|
@@ -1,7 +1 @@
|
|
|
1
|
-
"use strict";function T(e,t){if(e===0&&t===0)return 0;const n=Math.atan2(e,t)*(180/Math.PI);return n>=0?n:n+360}function Ce({C1:e,C2:t,h1_d:n,h2_d:o}){if(e*t===0)return 0;const r=o-n;return Math.abs(r)<=180?r:r>180?r-360:r+360}function Se({C1:e,C2:t,h1_d:n,h2_d:o}){if(e*t===0)return o+n;const r=Math.abs(n-o);return r<=180?(o+n)/2:r>180&&n+o<360?(o+n+360)/2:(o+n-360)/2}const b=e=>e*(Math.PI/180),U=e=>Math.sqrt(e**7/(e**7+25**7));function g(e,t){const n=e/255,o=t?.03928:.04045;let r;return n>o?r=((n+.055)/1.055)**2.4:r=n/12.92,r}function y(e){const t=.20689655172413793,n=t**3;let o;return e>n?o=Math.cbrt(e):o=e/(3*t**2)+4/29,o}function pe(e,t,n){return Math.min(Math.max(e,t),n)}function j(e,t){const n=e.L,o=e.a,r=e.b,a=t.L,s=t.a,c=t.b,f=1,m=1,G=1,h=Math.sqrt(o**2+r**2),C=Math.sqrt(s**2+c**2),ue=a-n,le=(h+C)/2,P=.5*(1-U(le)),A=o*(1+P),F=s*(1+P),B=Math.sqrt(A**2+r**2),k=Math.sqrt(F**2+c**2),w=(B+k)/2,E=k-B,Y=T(r,A),X=T(c,F),de=Ce({C1:h,C2:C,h1_d:Y,h2_d:X}),Z=2*Math.sqrt(B*k)*Math.sin(b(de)/2),S=Se({C1:h,C2:C,h1_d:Y,h2_d:X}),D=(n+a)/2,me=1-.17*Math.cos(b(S-30))+.24*Math.cos(b(2*S))+.32*Math.cos(b(3*S+6))-.2*Math.cos(b(4*S-63)),be=1+.015*(D-50)**2/Math.sqrt(20+(D-50)**2),z=.045*w+1,_=1+.015*w*me,ge=30*Math.exp(-(((S-275)/25)**2)),he=-2*U(w)*Math.sin(b(ge*2));return Math.sqrt((ue/(f*be))**2+(E/(m*z))**2+(Z/(G*_))**2+he*(E/(m*z))*(Z/(G*_)))}function O(e){const{R:t,G:n,B:o}=e,r=g(t)*100,a=g(n)*100,s=g(o)*100,c=r*.4124+a*.3576+s*.1805,f=r*.2126+a*.7152+s*.0722,m=r*.0193+a*.1192+s*.9505;return{X:c,Y:f,Z:m}}function V(e){const{X:t,Y:n,Z:o}=e,r=t/95.047,a=n/100,s=o/108.883,c=y(r),f=y(a),m=y(s),G=116*f-16,h=500*(c-f),C=200*(f-m);return{L:G,a:h,b:C}}function N(e){const t=O(e);return V(t)}const J=(e,t)=>{const n=N(e),o=N(t);return j(n,o)},K=/^#[a-fA-F0-9]{6}$/,Q=/^#[a-fA-F0-9]{8}$/,ee=/^#[a-fA-F0-9]{3}$/,te=/^#[a-fA-F0-9]{4}$/,ne=/^rgba*\(\s*([-+]?\d+)\s*(?:,)?\s*([-+]?\d+)\s*(?:,)?\s*([-+]?\d+)\s*(?:,*|\/*)\s*([-+]?\d*[.]?\d+[%]?)*\)$/i;function i(e){const t=e.match(ne);if(!t)throw new Error(`convertCSSRGBtoHex expects a valid CSS RGB string but got ${e}`);const n=o=>o?Number.parseFloat(o):void 0;return{R:n(t[1]),G:n(t[2]),B:n(t[3]),A:n(t[4])}}function p({R:e,G:t,B:n,A:o}){const r=a=>pe(a,0,255).toString(16).padStart(2,"0");return`#${r(e)}${r(t)}${r(n)}${o?r(Math.round(o*255)):""}`}function M(e){const t=i(e);return p(t)}const H=new Map([["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"],["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"],["transparent","#00000000"],["turquoise","#40e0d0"],["violet","#ee82ee"],["wheat","#f5deb3"],["white","#ffffff"],["whitesmoke","#f5f5f5"],["yellow","#ffff00"],["yellowgreen","#9acd32"]]);function re(e){for(const[t,n]of H.entries())if(n===e)return t}function u(e){if(typeof e!="string")throw new Error(`convertHextoRGB expects a string but got a ${typeof e}`);if(e.match(K))return{R:Number.parseInt(`${e[1]}${e[2]}`,16),G:Number.parseInt(`${e[3]}${e[4]}`,16),B:Number.parseInt(`${e[5]}${e[6]}`,16)};if(e.match(ee))return{R:Number.parseInt(`${e[1]}${e[1]}`,16),G:Number.parseInt(`${e[2]}${e[2]}`,16),B:Number.parseInt(`${e[3]}${e[3]}`,16)};if(e.match(Q))return{R:Number.parseInt(`${e[1]}${e[2]}`,16),G:Number.parseInt(`${e[3]}${e[4]}`,16),B:Number.parseInt(`${e[5]}${e[6]}`,16),A:Math.round(Number.parseInt(`${e[7]}${e[8]}`,16)/255*100)/100};if(e.match(te))return{R:Number.parseInt(`${e[1]}${e[1]}`,16),G:Number.parseInt(`${e[2]}${e[2]}`,16),B:Number.parseInt(`${e[3]}${e[3]}`,16),A:Math.round(Number.parseInt(`${e[4]}${e[4]}`,16)/255*100)/100};throw new Error(`convertHextoRGB expects an valid hexadecimal colour value but got ${e}`)}function Re(e){const t=u(e);return t.A?`rgba(${t.R},${t.G},${t.B},${t.A})`:`rgb(${t.R},${t.G},${t.B})`}function l(e){return H.get(e)}function R(e){const t=l(e);if(t)return u(t)}function q({R:e,G:t,B:n,A:o}){return`rgb(${e} ${t} ${n}${o?` / ${o}`:""})`}function I(e){const t=p(e);return re(t)}function $(e,t){if(!t||t.length<2)return e;const n=[];for(const r of t){const a=J(e,r);n.push([r,a])}return n.sort((r,a)=>r[1]-a[1])[0][0]}function $e(e,t){if(!t||t.length<2)return e;const n=i(e),o=t.map(a=>i(a)),r=$(n,o);return q(r)}function L(e){return!!e.match(ne)}function oe(e){return!!e.match(K)||!!e.match(Q)||!!e.match(te)||!!e.match(ee)}function ae(e){return H.has(e)}function ve(e,t){if(!t||t.length<2)return e;let n,o;const r=[];if(oe(e)&&(n=u(e),o="hex"),L(e)&&(n=i(e),o="cssRGB"),ae(e)&&(n=R(e),o="namedCSS"),!n)return;for(const s of t)oe(s)&&r.push(u(s)),L(s)&&r.push(i(s)),ae(s)&&r.push(R(s));if(r.length<2)return e;const a=$(n,r);return o==="hex"?p(a):o==="cssRGB"?q(a):I(a)}function Ge(e,t){if(!t||t.length<2)return e;const n=u(e),o=t.map(a=>u(a)),r=$(n,o);return p(r)}function Be(e,t){if(!t||t.length<2)return e;const n=R(e),r=t.map(s=>R(s)).filter(s=>s!==void 0);if(!n||r.length<2)return e;const a=$(n,r);return I(a)}function v({R:e,G:t,B:n},o){const r=o==="WCAG2.1",a=g(e,r),s=g(t,r),c=g(n,r);return .2126*a+.7152*s+.0722*c}function d(e,t){const n=u(e);return v(n,t)}function se(e,t){const n=Math.max(e,t),o=Math.min(e,t),r=(n+.05)/(o+.05);return Math.floor(r*1e3)/1e3}function W(e,t,n){const o=d(e,n),r=d(t,n);return se(o,r)}function ke(e,t,n){let o,r;if(e.startsWith("#"))o=e;else if(e.startsWith("rgb"))o=M(e);else{const a=l(e);if(a===void 0)throw new Error(`getContrastRatio expects valid CSS named colours.
|
|
2
|
-
${e} is not a valid CSS named colour.
|
|
3
|
-
See https://developer.mozilla.org/en-US/docs/Web/CSS/named-color`);o=a}if(t.startsWith("#"))r=t;else if(t.startsWith("rgb"))r=M(t);else{const a=l(t);if(a===void 0)throw new Error(`getContrastRatio expects valid CSS named colours.
|
|
4
|
-
${t} is not a valid CSS named colour.
|
|
5
|
-
See https://developer.mozilla.org/en-US/docs/Web/CSS/named-color`);r=a}return W(o,r,n)}function we(e,t,n){const o=i(e),r=i(t),a=v(o,n),s=v(r,n);return se(a,s)}function ye(e,t,n){const o=l(e),r=l(t);if(o===void 0||r===void 0)throw new Error(`getContrastRatioFromNamedCSSColour expects valid CSS named colours.
|
|
6
|
-
${e} or ${t} are not valid CSS named colours.
|
|
7
|
-
See https://developer.mozilla.org/en-US/docs/Web/CSS/named-color`);return W(o,r,n)}function x(e,t){const n=d(e,t)+.05,o=1.05/n,r=n/.05;return o>r}function ce(e,t){const n=l(e);if(n)return x(n,t);throw new Error(`${e} is not a valid colour format. isCSSNamedDarkColour only accepts CSS named colours. Check more details here https://developer.mozilla.org/en-US/docs/Web/CSS/named-color`)}function fe(e,t){const n=i(e),o=v(n,t),r=1.05/o,a=o/.05;return r>a}function Ne(e,t){try{return e.startsWith("#")?x(e,t):e.startsWith("rgb")?fe(e,t):ce(e,t)}catch{throw new Error(`${e} is not a valid colour format. isDarkColour accepts CSS RGB formats, ie rgb(0,0,0) and rgba(255, 255, 255, 0.4), hexadecimal and CSS named colours.`)}}const ie=(e,t)=>e>t?e/t:t/e,Me=({backgroundColour:e,optionOneColour:t,optionTwoColour:n},o)=>{const r=d(e,o)+.05,a=d(t,o)+.05,s=d(n,o)+.05,c=ie(a,r),f=ie(s,r);return c>f?t:n};export{J as RGBdistance,j as ciede2000,M as convertCSSRGBtoHex,i as convertCSSRGBtoRGB,Re as convertHextoCSSRGB,re as convertHextoNamedCSSColour,u as convertHextoRGB,l as convertNamedCSSColourtoHex,R as convertNamedCSSColourtoRGB,q as convertRGBtoCSSRGB,p as convertRGBtoHex,N as convertRGBtoLab,I as convertRGBtoNamedCSSColour,O as convertRGBtoXYZ,V as convertXYZtoLab,$e as findNearestCSSRGBColour,ve as findNearestColour,Ge as findNearestHexColour,Be as findNearestNamedCSSColour,$ as findNearestRGBColour,ke as getContrastRatio,we as getContrastRatioFromCSSRGB,W as getContrastRatioFromHex,ye as getContrastRatioFromNamedCSSColour,d as getSRGBLuminanceFromHex,v as getSRGBLuminanceFromRGB,ce as isCSSNamedDarkColour,L as isCSSRGBColour,fe as isCSSRGBDarkColour,Ne as isDarkColour,x as isHexDarkColour,Me as pickHexColourContrast};
|
|
1
|
+
"use strict";const $=new Map([["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"],["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"],["slategrey","#708090"],["snow","#fffafa"],["springgreen","#00ff7f"],["steelblue","#4682b4"],["tan","#d2b48c"],["teal","#008080"],["thistle","#d8bfd8"],["tomato","#ff6347"],["transparent","#00000000"],["turquoise","#40e0d0"],["violet","#ee82ee"],["wheat","#f5deb3"],["white","#ffffff"],["whitesmoke","#f5f5f5"],["yellow","#ffff00"],["yellowgreen","#9acd32"]]),j=/^#(?:[0-9a-fA-F]{8}|[0-9a-fA-F]{6}|[0-9a-fA-F]{4}|[0-9a-fA-F]{3})$/,Q=/^rgba?\(\s*([-+]?\d*\.?\d+%?)\s*[,\s]\s*([-+]?\d*\.?\d+%?)\s*[,\s]\s*([-+]?\d*\.?\d+%?)\s*(?:[,/]\s*([-+]?\d*\.?\d+%?))?\s*\)$/i;function x(e){return Q.test(e)}function L(e){return j.test(e)}function A(e){return $.has(e)}function J(e,t){if(e===0&&t===0)return 0;const n=Math.atan2(e,t)*(180/Math.PI);return n>=0?n:n+360}function Se({C1:e,C2:t,h1_d:n,h2_d:o}){if(e*t===0)return 0;const r=o-n;return Math.abs(r)<=180?r:r>180?r-360:r+360}function Re({C1:e,C2:t,h1_d:n,h2_d:o}){if(e*t===0)return o+n;const r=Math.abs(n-o);return r<=180?(o+n)/2:r>180&&n+o<360?(o+n+360)/2:(o+n-360)/2}const ve=Math.PI/180,m=e=>e*ve,Be=25**7,K=e=>Math.sqrt(e**7/(e**7+Be));function C(e,t){const n=e/255,o=t?.03928:.04045;let r;return n>o?r=((n+.055)/1.055)**2.4:r=n/12.92,r}const ee=6/29,Ge=ee**3,we=3*ee**2;function H(e){return e>Ge?Math.cbrt(e):e/we+4/29}function ke(e,t,n){return Math.min(Math.max(e,t),n)}const w="https://developer.mozilla.org/en-US/docs/Web/CSS/named-color";function te(e,t){const n=e.L,o=e.a,r=e.b,a=t.L,s=t.a,f=t.b,c=1,i=1,l=1,u=Math.sqrt(o**2+r**2),p=Math.sqrt(s**2+f**2),de=a-n,ge=(u+p)/2,D=.5*(1-K(ge)),F=o*(1+D),T=s*(1+D),k=Math.sqrt(F**2+r**2),y=Math.sqrt(T**2+f**2),M=(k+y)/2,Y=y-k,O=J(r,F),X=J(f,T),he=Se({C1:u,C2:p,h1_d:O,h2_d:X}),Z=2*Math.sqrt(k*y)*Math.sin(m(he)/2),S=Re({C1:u,C2:p,h1_d:O,h2_d:X}),V=(n+a)/2,be=1-.17*Math.cos(m(S-30))+.24*Math.cos(m(2*S))+.32*Math.cos(m(3*S+6))-.2*Math.cos(m(4*S-63)),me=1+.015*(V-50)**2/Math.sqrt(20+(V-50)**2),U=.045*M+1,z=1+.015*M*be,Ce=30*Math.exp(-(((S-275)/25)**2)),pe=-2*K(M)*Math.sin(m(Ce*2));return Math.sqrt((de/(c*me))**2+(Y/(i*U))**2+(Z/(l*z))**2+pe*(Y/(i*U))*(Z/(l*z)))}function ne(e,t=!1){if(e.endsWith("%")){const n=Number.parseFloat(e.slice(0,-1));return t?n/100:Math.round(n/100*255)}return Number.parseFloat(e)}function I(e){if(e)return ne(e)}function ye(e){if(e)return ne(e,!0)}function d(e){const t=e.match(Q);if(!t)throw new Error(`convertCSSRGBtoRGB expects a valid CSS RGB string but got ${e}`);return{R:I(t[1]),G:I(t[2]),B:I(t[3]),A:ye(t[4])}}function R({R:e,G:t,B:n,A:o}){const r=a=>ke(a,0,255).toString(16).padStart(2,"0");return`#${r(e)}${r(t)}${r(n)}${o?r(Math.round(o*255)):""}`}function N(e){const t=d(e);return R(t)}function g(e){if(typeof e!="string")throw new Error(`convertHextoRGB expects a string but got a ${typeof e}`);if(!j.test(e))throw new Error(`convertHextoRGB expects a valid hexadecimal colour value but got ${e}`);switch(e.length){case 7:return{R:parseInt(e.slice(1,3),16),G:parseInt(e.slice(3,5),16),B:parseInt(e.slice(5,7),16)};case 4:return{R:parseInt(e.slice(1,2).repeat(2),16),G:parseInt(e.slice(2,3).repeat(2),16),B:parseInt(e.slice(3,4).repeat(2),16)};case 9:return{R:parseInt(e.slice(1,3),16),G:parseInt(e.slice(3,5),16),B:parseInt(e.slice(5,7),16),A:Math.round(parseInt(e.slice(7,9),16)/255*100)/100};default:return{R:parseInt(e.slice(1,2).repeat(2),16),G:parseInt(e.slice(2,3).repeat(2),16),B:parseInt(e.slice(3,4).repeat(2),16),A:Math.round(parseInt(e.slice(4,5).repeat(2),16)/255*100)/100}}}function Me(e){const t=g(e);return t.A?`rgba(${t.R},${t.G},${t.B},${t.A})`:`rgb(${t.R},${t.G},${t.B})`}function re(e){for(const[t,n]of $.entries())if(n===e)return t}function h(e){return $.get(e)}function v(e){const t=h(e);if(t)return g(t)}function _({R:e,G:t,B:n,A:o}){return`rgb(${e} ${t} ${n}${o?` / ${o}`:""})`}function oe(e){const{R:t,G:n,B:o}=e,r=C(t)*100,a=C(n)*100,s=C(o)*100,f=r*.4124+a*.3576+s*.1805,c=r*.2126+a*.7152+s*.0722,i=r*.0193+a*.1192+s*.9505;return{X:f,Y:c,Z:i}}function ae(e){const{X:t,Y:n,Z:o}=e,r=t/95.047,a=n/100,s=o/108.883,f=H(r),c=H(a),i=H(s),l=116*c-16,u=500*(f-c),p=200*(c-i);return{L:l,a:u,b:p}}function q(e){const t=oe(e);return ae(t)}function E(e){const t=R(e);return re(t)}const se=(e,t)=>{const n=q(e),o=q(t);return te(n,o)};function B(e,t){if(!t||t.length<2)return e;let n=e,o=Number.POSITIVE_INFINITY;for(const r of t){const a=se(e,r);a<o&&(o=a,n=r)}return n}function $e(e,t){if(!t||t.length<2)return e;let n,o;const r=[];if(L(e)?(n=g(e),o="hex"):x(e)?(n=d(e),o="cssRGB"):A(e)&&(n=v(e),o="namedCSS"),!n)return;for(const s of t)if(L(s))r.push(g(s));else if(x(s))r.push(d(s));else if(A(s)){const f=v(s);f&&r.push(f)}if(r.length<2)return e;const a=B(n,r);return o==="hex"?R(a):o==="cssRGB"?_(a):E(a)}function xe(e,t){if(!t||t.length<2)return e;const n=d(e),o=t.map(a=>d(a)),r=B(n,o);return _(r)}function Le(e,t){if(!t||t.length<2)return e;const n=g(e),o=t.map(a=>g(a)),r=B(n,o);return R(r)}function Ae(e,t){if(!t||t.length<2)return e;const n=v(e),r=t.map(s=>v(s)).filter(s=>s!==void 0);if(!n||r.length<2)return e;const a=B(n,r);return E(a)}function G({R:e,G:t,B:n},o){const r=o==="WCAG2.1",a=C(e,r),s=C(t,r),f=C(n,r);return .2126*a+.7152*s+.0722*f}function b(e,t){const n=g(e);return G(n,t)}function ce(e,t){const n=Math.max(e,t),o=Math.min(e,t),r=(n+.05)/(o+.05);return Math.floor(r*1e3)/1e3}function P(e,t,n){const o=b(e,n),r=b(t,n);return ce(o,r)}function He(e,t,n){let o,r;if(e.startsWith("#"))o=e;else if(e.startsWith("rgb"))o=N(e);else{const a=h(e);if(a===void 0)throw new Error(`getContrastRatio expects valid CSS named colours. ${e} is not a valid CSS named colour. See ${w}`);o=a}if(t.startsWith("#"))r=t;else if(t.startsWith("rgb"))r=N(t);else{const a=h(t);if(a===void 0)throw new Error(`getContrastRatio expects valid CSS named colours. ${t} is not a valid CSS named colour. See ${w}`);r=a}return P(o,r,n)}function Ie(e,t,n){const o=d(e),r=d(t),a=G(o,n),s=G(r,n);return ce(a,s)}function Ne(e,t,n){const o=h(e),r=h(t);if(o===void 0||r===void 0)throw new Error(`getContrastRatioFromNamedCSSColour expects valid CSS named colours. ${e} or ${t} are not valid CSS named colours. See ${w}`);return P(o,r,n)}function W(e,t){const n=b(e,t)+.05,o=1.05/n,r=n/.05;return o>r}function fe(e,t){const n=h(e);if(n)return W(n,t);throw new Error(`${e} is not a valid colour format. isCSSNamedDarkColour only accepts CSS named colours. See ${w}`)}function ie(e,t){const n=d(e),o=G(n,t),r=1.05/o,a=o/.05;return r>a}function _e(e,t){try{return e.startsWith("#")?W(e,t):e.startsWith("rgb")?ie(e,t):fe(e,t)}catch{throw new Error(`${e} is not a valid colour format. isDarkColour accepts CSS RGB formats, ie rgb(0,0,0), rgba(255, 255, 255, 0.4), rgb(50%, 25%, 100%), and rgba(50%, 25%, 100%, 80%), hexadecimal and CSS named colours.`)}}const ue=(e,t)=>e>t?e/t:t/e,qe=({backgroundColour:e,optionOneColour:t,optionTwoColour:n},o)=>{const r=b(e,o)+.05,a=b(t,o)+.05,s=b(n,o)+.05,f=ue(a,r),c=ue(s,r);return f>c?t:n};function Ee(e,t,n){const o=e/255,r=t/255,a=n/255,s=Math.max(o,r,a),f=Math.min(o,r,a);let c=0,i=0;const l=s,u=s-f;return s===0?i=0:i=u/s,u!==0&&(s===o?c=(r-a)/u%6:s===r?c=(a-o)/u+2:s===a&&(c=(o-r)/u+4),c=c*60,c<0&&(c=c+360)),{h:c,s:i,v:l}}function Pe(e){const{R:t,G:n,B:o,A:r}=g(e),a=typeof r=="number"?r:1,{h:s,s:f,v:c}=Ee(t,n,o);return{h:s,s:f,v:c,a}}function le(e){return e===0?1:e===1?2:0}function We(e){const t=new Map;for(const a of e)t.has(a)||t.set(a,Pe(a));const n=[],o=[],r=[];for(const a of e){const{s,a:f}=t.get(a);f===0?r.push(a):s===0?o.push(a):n.push(a)}return n.sort((a,s)=>{const f=t.get(a),c=t.get(s);return f.h!==c.h?f.h-c.h:c.s-f.s}),o.sort((a,s)=>{const f=t.get(a),c=t.get(s),i=le(f.v),l=le(c.v);return i!==l?i-l:f.v-c.v}),r.sort((a,s)=>{const f=t.get(a),c=t.get(s);return f.v-c.v}),[...n,...o,...r]}export{se as RGBdistance,te as ciede2000,N as convertCSSRGBtoHex,d as convertCSSRGBtoRGB,Me as convertHextoCSSRGB,re as convertHextoNamedCSSColour,g as convertHextoRGB,h as convertNamedCSSColourtoHex,v as convertNamedCSSColourtoRGB,_ as convertRGBtoCSSRGB,R as convertRGBtoHex,q as convertRGBtoLab,E as convertRGBtoNamedCSSColour,oe as convertRGBtoXYZ,ae as convertXYZtoLab,xe as findNearestCSSRGBColour,$e as findNearestColour,Le as findNearestHexColour,Ae as findNearestNamedCSSColour,B as findNearestRGBColour,He as getContrastRatio,Ie as getContrastRatioFromCSSRGB,P as getContrastRatioFromHex,Ne as getContrastRatioFromNamedCSSColour,b as getSRGBLuminanceFromHex,G as getSRGBLuminanceFromRGB,fe as isCSSNamedDarkColour,x as isCSSRGBColour,ie as isCSSRGBDarkColour,_e as isDarkColour,L as isHexColour,W as isHexDarkColour,A as isNamedCSSColour,qe as pickHexColourContrast,We as sortHexColours};
|