@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/dist/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- export { RGBdistance } from "./RGBdistance";
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};