@colordx/core 0.1.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.cjs ADDED
@@ -0,0 +1,2 @@
1
+ 'use strict';var b=(o,r,t)=>Math.min(Math.max(o,r),t),l=(o,r=0)=>Math.round(o*10**r)/10**r;var m=o=>typeof o=="number"&&!Number.isNaN(o)&&Number.isFinite(o),C=o=>typeof o=="object"&&o!==null&&!Array.isArray(o),f=(o,r)=>r.every(t=>t in o);var H=o=>parseInt(o.padEnd(2,o),16),v=o=>{if(typeof o!="string")return null;let r=o.trim().replace(/^#/,"");if(!/^[0-9a-f]{3,8}$/i.test(r))return null;if(r.length===3||r.length===4){let[t,e,n,s="f"]=r.split("");return {r:H(t),g:H(e),b:H(n),a:l(H(s)/255,2)}}return r.length===6||r.length===8?{r:parseInt(r.slice(0,2),16),g:parseInt(r.slice(2,4),16),b:parseInt(r.slice(4,6),16),a:r.length===8?l(parseInt(r.slice(6,8),16)/255,2):1}:null},k=({r:o,g:r,b:t,a:e})=>{let n=a=>b(Math.round(a),0,255).toString(16).padStart(2,"0"),s=`#${n(o)}${n(r)}${n(t)}`;return e<1?s+n(e*255):s};var y=o=>({h:(o.h%360+360)%360,s:b(o.s,0,100),l:b(o.l,0,100),a:b(l(o.a,2),0,1)}),j=({r:o,g:r,b:t,a:e})=>{let n=o/255,s=r/255,a=t/255,u=Math.max(n,s,a),c=Math.min(n,s,a),g=(u+c)/2,i=0,h=0;if(u!==c){let p=u-c;switch(h=g>.5?p/(2-u-c):p/(u+c),u){case n:i=((s-a)/p+(s<a?6:0))/6;break;case s:i=((a-n)/p+2)/6;break;case a:i=((n-s)/p+4)/6;break}}return y({h:l(i*360,2),s:l(h*100,2),l:l(g*100,2),a:e})},d=({h:o,s:r,l:t,a:e})=>{let n=r/100,s=t/100,a=s<.5?s*(1+n):s+n-s*n,u=2*s-a,c=o/360,g=i=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?u+(a-u)*6*i:i<1/2?a:i<2/3?u+(a-u)*(2/3-i)*6:u);return {r:l(g(c+1/3)*255),g:l(g(c)*255),b:l(g(c-1/3)*255),a:e}},$=o=>{if(!C(o)||!f(o,["h","s","l"]))return null;let{h:r,s:t,l:e,a:n=1}=o;return !m(r)||!m(t)||!m(e)||!m(n)?null:d(y({h:r,s:t,l:e,a:n}))},M=o=>{if(typeof o!="string")return null;let r=o.match(/^hsla?\(\s*([\d.]+)\s*,\s*([\d.]+)%\s*,\s*([\d.]+)%(?:\s*,\s*([\d.]+))?\s*\)$/i);return r?d(y({h:parseFloat(r[1]),s:parseFloat(r[2]),l:parseFloat(r[3]),a:r[4]!==void 0?parseFloat(r[4]):1})):null};var T=o=>({h:(o.h%360+360)%360,s:b(o.s,0,100),v:b(o.v,0,100),a:b(l(o.a,2),0,1)}),O=({r:o,g:r,b:t,a:e})=>{let n=o/255,s=r/255,a=t/255,u=Math.max(n,s,a),c=Math.min(n,s,a),g=u-c,i=u,h=u===0?0:g/u,p=0;if(u!==c)switch(u){case n:p=((s-a)/g+(s<a?6:0))/6;break;case s:p=((a-n)/g+2)/6;break;case a:p=((n-s)/g+4)/6;break}return T({h:l(p*360,2),s:l(h*100,2),v:l(i*100,2),a:e})},I=({h:o,s:r,v:t,a:e})=>{let n=r/100,s=t/100,a=Math.floor(o/60%6),u=o/60-Math.floor(o/60),c=s*(1-n),g=s*(1-u*n),i=s*(1-(1-u)*n),[h,p,N]=[[s,i,c,c,g,s],[g,s,s,i,c,c],[c,c,g,s,s,i]].map(_=>l(_[a]*255));return {r:h,g:p,b:N,a:e}},A=o=>{if(!C(o)||!f(o,["h","s","v"]))return null;let{h:r,s:t,v:e,a:n=1}=o;return !m(r)||!m(t)||!m(e)||!m(n)?null:I(T({h:r,s:t,v:e,a:n}))};var P=o=>({r:b(l(o.r),0,255),g:b(l(o.g),0,255),b:b(l(o.b),0,255),a:b(l(o.a,2),0,1)}),F=o=>{if(!C(o)||!f(o,["r","g","b"]))return null;let{r,g:t,b:e,a:n=1}=o;return !m(r)||!m(t)||!m(e)||!m(n)?null:P({r,g:t,b:e,a:n})},S=o=>{if(typeof o!="string")return null;let r=o.match(/^rgba?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)(?:\s*,\s*([\d.]+))?\s*\)$/i);return r?P({r:parseFloat(r[1]),g:parseFloat(r[2]),b:parseFloat(r[3]),a:r[4]!==void 0?parseFloat(r[4]):1}):null};var K=[v,S,M,F,$,A],R=[...K],w=o=>{for(let r of R){let t=r(o);if(t)return t}return null};var x=class o{_rgb;constructor(r){this._rgb=w(r)??{r:0,g:0,b:0,a:1};}isValid(){return w(this._rgb)!==null}toRgb(){return {...this._rgb}}toRgbString(){let{r,g:t,b:e,a:n}=this._rgb;return n<1?`rgba(${r}, ${t}, ${e}, ${n})`:`rgb(${r}, ${t}, ${e})`}toHex(){return k(this._rgb)}toHsl(){return j(this._rgb)}toHslString(){let{h:r,s:t,l:e,a:n}=this.toHsl();return n<1?`hsla(${r}, ${t}%, ${e}%, ${n})`:`hsl(${r}, ${t}%, ${e}%)`}toHsv(){return O(this._rgb)}brightness(){let{r,g:t,b:e}=this._rgb;return l((r*299+t*587+e*114)/255e3,2)}luminance(){let r=s=>{let a=s/255;return a<=.03928?a/12.92:((a+.055)/1.055)**2.4},{r:t,g:e,b:n}=this._rgb;return l(.2126*r(t)+.7152*r(e)+.0722*r(n),4)}isDark(){return this.brightness()<.5}isLight(){return this.brightness()>=.5}alpha(r){return r===void 0?this._rgb.a:new o({...this._rgb,a:b(r,0,1)})}hue(r){let t=this.toHsl();return r===void 0?t.h:new o(d({...t,h:r}))}lighten(r=.1){let t=this.toHsl();return new o(d({...t,l:b(t.l+r*100,0,100)}))}darken(r=.1){return this.lighten(-r)}saturate(r=.1){let t=this.toHsl();return new o(d({...t,s:b(t.s+r*100,0,100)}))}desaturate(r=.1){return this.saturate(-r)}grayscale(){return this.desaturate(1)}invert(){let{r,g:t,b:e,a:n}=this._rgb;return new o({r:255-r,g:255-t,b:255-e,a:n})}rotate(r=15){return this.hue(this.hue()+r)}mix(r,t=.5){let e=new o(r).toRgb(),n=this._rgb,s=b(t,0,1);return new o({r:l(n.r*(1-s)+e.r*s),g:l(n.g*(1-s)+e.g*s),b:l(n.b*(1-s)+e.b*s),a:l(n.a*(1-s)+e.a*s,2)})}contrast(r="#fff"){let t=this.luminance(),e=new o(r).luminance(),n=Math.max(t,e),s=Math.min(t,e);return l((n+.05)/(s+.05),2)}isEqual(r){let t=new o(r).toRgb(),e=this._rgb;return e.r===t.r&&e.g===t.g&&e.b===t.b&&e.a===t.a}toString(){return this.toHex()}},L=o=>new x(o),q=o=>{o.forEach(r=>r(x,R));},E=()=>new x({r:Math.round(Math.random()*255),g:Math.round(Math.random()*255),b:Math.round(Math.random()*255),a:1});exports.Colordx=x;exports.colordx=L;exports.extend=q;exports.random=E;//# sourceMappingURL=index.cjs.map
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/helpers.ts","../src/colorModels/hex.ts","../src/colorModels/hsl.ts","../src/colorModels/hsv.ts","../src/colorModels/rgb.ts","../src/parse.ts","../src/colordx.ts"],"names":["clamp","n","min","max","round","d","isNumeric","isObject","v","hasKeys","obj","keys","k","parseHexChannel","hex","parseHex","input","clean","r","g","b","a","rgbToHex","toHex","clampHsl","hsl","rgbToHsl","rn","gn","bn","l","h","s","hslToRgb","sn","ln","q","p","hue","hueToRgb","t","parseHslObject","parseHslString","match","clampHsv","hsv","rgbToHsv","hsvToRgb","vn","i","f","channel","parseHsvObject","clampRgb","rgb","parseRgbObject","parseRgbString","defaultParsers","parsers","parse","parser","result","Colordx","_Colordx","toLinear","c","value","amount","color","ratio","other","self","w","l1","l2","lighter","darker","colordx","extend","plugins","plugin","random"],"mappings":"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","file":"index.cjs","sourcesContent":["export const clamp = (n: number, min: number, max: number): number => Math.min(Math.max(n, min), max);\n\nexport const round = (n: number, d = 0): number => Math.round(n * 10 ** d) / 10 ** d;\n\nexport const floor = (n: number, d = 0): number => Math.floor(n * 10 ** d) / 10 ** d;\n\nexport const isNumeric = (n: unknown): n is number => typeof n === 'number' && !Number.isNaN(n) && Number.isFinite(n);\n\nexport const isObject = (v: unknown): v is Record<string, unknown> =>\n typeof v === 'object' && v !== null && !Array.isArray(v);\n\nexport const hasKeys = <T extends string>(obj: Record<string, unknown>, keys: T[]): obj is Record<T, unknown> =>\n keys.every((k) => k in obj);\n","import { clamp, round } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nconst parseHexChannel = (hex: string): number => parseInt(hex.padEnd(2, hex), 16);\n\nexport const parseHex = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const clean = input.trim().replace(/^#/, '');\n if (!/^[0-9a-f]{3,8}$/i.test(clean)) return null;\n\n if (clean.length === 3 || clean.length === 4) {\n const [r, g, b, a = 'f'] = clean.split('');\n return {\n r: parseHexChannel(r!),\n g: parseHexChannel(g!),\n b: parseHexChannel(b!),\n a: round(parseHexChannel(a) / 255, 2),\n };\n }\n\n if (clean.length === 6 || clean.length === 8) {\n return {\n r: parseInt(clean.slice(0, 2), 16),\n g: parseInt(clean.slice(2, 4), 16),\n b: parseInt(clean.slice(4, 6), 16),\n a: clean.length === 8 ? round(parseInt(clean.slice(6, 8), 16) / 255, 2) : 1,\n };\n }\n\n return null;\n};\n\nexport const rgbToHex = ({ r, g, b, a }: RgbColor): string => {\n const toHex = (n: number) => clamp(Math.round(n), 0, 255).toString(16).padStart(2, '0');\n const hex = `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n return a < 1 ? hex + toHex(a * 255) : hex;\n};\n","import { clamp, hasKeys, isNumeric, isObject, round } from '../helpers.js';\nimport type { HslColor, RgbColor } from '../types.js';\n\nexport const clampHsl = (hsl: HslColor): HslColor => ({\n h: ((hsl.h % 360) + 360) % 360,\n s: clamp(hsl.s, 0, 100),\n l: clamp(hsl.l, 0, 100),\n a: clamp(round(hsl.a, 2), 0, 1),\n});\n\nexport const rgbToHsl = ({ r, g, b, a }: RgbColor): HslColor => {\n const rn = r / 255,\n gn = g / 255,\n bn = b / 255;\n const max = Math.max(rn, gn, bn),\n min = Math.min(rn, gn, bn);\n const l = (max + min) / 2;\n let h = 0,\n s = 0;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case rn:\n h = ((gn - bn) / d + (gn < bn ? 6 : 0)) / 6;\n break;\n case gn:\n h = ((bn - rn) / d + 2) / 6;\n break;\n case bn:\n h = ((rn - gn) / d + 4) / 6;\n break;\n }\n }\n\n return clampHsl({ h: round(h * 360, 2), s: round(s * 100, 2), l: round(l * 100, 2), a });\n};\n\nexport const hslToRgb = ({ h, s, l, a }: HslColor): RgbColor => {\n const sn = s / 100,\n ln = l / 100;\n const q = ln < 0.5 ? ln * (1 + sn) : ln + sn - ln * sn;\n const p = 2 * ln - q;\n const hue = h / 360;\n\n const hueToRgb = (t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n return {\n r: round(hueToRgb(hue + 1 / 3) * 255),\n g: round(hueToRgb(hue) * 255),\n b: round(hueToRgb(hue - 1 / 3) * 255),\n a,\n };\n};\n\nexport const parseHslObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['h', 's', 'l'])) return null;\n const { h, s, l, a = 1 } = input;\n if (!isNumeric(h) || !isNumeric(s) || !isNumeric(l) || !isNumeric(a as number)) return null;\n return hslToRgb(clampHsl({ h: h, s: s, l: l, a: a as number }));\n};\n\nexport const parseHslString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const match = input.match(/^hsla?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)%\\s*,\\s*([\\d.]+)%(?:\\s*,\\s*([\\d.]+))?\\s*\\)$/i);\n if (!match) return null;\n return hslToRgb(\n clampHsl({\n h: parseFloat(match[1]!),\n s: parseFloat(match[2]!),\n l: parseFloat(match[3]!),\n a: match[4] !== undefined ? parseFloat(match[4]) : 1,\n })\n );\n};\n","import { clamp, hasKeys, isNumeric, isObject, round } from '../helpers.js';\nimport type { HsvColor, RgbColor } from '../types.js';\n\nexport const clampHsv = (hsv: HsvColor): HsvColor => ({\n h: ((hsv.h % 360) + 360) % 360,\n s: clamp(hsv.s, 0, 100),\n v: clamp(hsv.v, 0, 100),\n a: clamp(round(hsv.a, 2), 0, 1),\n});\n\nexport const rgbToHsv = ({ r, g, b, a }: RgbColor): HsvColor => {\n const rn = r / 255,\n gn = g / 255,\n bn = b / 255;\n const max = Math.max(rn, gn, bn),\n min = Math.min(rn, gn, bn);\n const d = max - min;\n const v = max;\n const s = max === 0 ? 0 : d / max;\n let h = 0;\n\n if (max !== min) {\n switch (max) {\n case rn:\n h = ((gn - bn) / d + (gn < bn ? 6 : 0)) / 6;\n break;\n case gn:\n h = ((bn - rn) / d + 2) / 6;\n break;\n case bn:\n h = ((rn - gn) / d + 4) / 6;\n break;\n }\n }\n\n return clampHsv({ h: round(h * 360, 2), s: round(s * 100, 2), v: round(v * 100, 2), a });\n};\n\nexport const hsvToRgb = ({ h, s, v, a }: HsvColor): RgbColor => {\n const sn = s / 100,\n vn = v / 100;\n const i = Math.floor((h / 60) % 6);\n const f = h / 60 - Math.floor(h / 60);\n const p = vn * (1 - sn);\n const q = vn * (1 - f * sn);\n const t = vn * (1 - (1 - f) * sn);\n\n const [r, g, b] = [\n [vn, t, p, p, q, vn],\n [q, vn, vn, t, p, p],\n [p, p, q, vn, vn, t],\n ].map((channel) => round(channel[i]! * 255));\n\n return { r: r!, g: g!, b: b!, a };\n};\n\nexport const parseHsvObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['h', 's', 'v'])) return null;\n const { h, s, v, a = 1 } = input;\n if (!isNumeric(h) || !isNumeric(s) || !isNumeric(v) || !isNumeric(a as number)) return null;\n return hsvToRgb(clampHsv({ h: h, s: s, v: v, a: a as number }));\n};\n","import { clamp, hasKeys, isNumeric, isObject, round } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nexport const clampRgb = (rgb: RgbColor): RgbColor => ({\n r: clamp(round(rgb.r), 0, 255),\n g: clamp(round(rgb.g), 0, 255),\n b: clamp(round(rgb.b), 0, 255),\n a: clamp(round(rgb.a, 2), 0, 1),\n});\n\nexport const parseRgbObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['r', 'g', 'b'])) return null;\n const { r, g, b, a = 1 } = input;\n if (!isNumeric(r) || !isNumeric(g) || !isNumeric(b) || !isNumeric(a as number)) return null;\n return clampRgb({ r: r, g: g, b: b, a: a as number });\n};\n\nexport const parseRgbString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const match = input.match(\n /^rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)(?:\\s*,\\s*([\\d.]+))?\\s*\\)$/i\n );\n if (!match) return null;\n return clampRgb({\n r: parseFloat(match[1]!),\n g: parseFloat(match[2]!),\n b: parseFloat(match[3]!),\n a: match[4] !== undefined ? parseFloat(match[4]) : 1,\n });\n};\n","import { parseHex } from './colorModels/hex.js';\nimport { parseHslObject, parseHslString } from './colorModels/hsl.js';\nimport { parseHsvObject } from './colorModels/hsv.js';\nimport { parseRgbObject, parseRgbString } from './colorModels/rgb.js';\nimport type { AnyColor, ColorParser, RgbColor } from './types.js';\n\nexport const defaultParsers: ColorParser[] = [\n parseHex,\n parseRgbString,\n parseHslString,\n parseRgbObject,\n parseHslObject,\n parseHsvObject,\n];\n\nexport const parsers: ColorParser[] = [...defaultParsers];\n\nexport const parse = (input: AnyColor): RgbColor | null => {\n for (const parser of parsers) {\n const result = parser(input);\n if (result) return result;\n }\n return null;\n};\n","import { rgbToHex } from './colorModels/hex.js';\nimport { hslToRgb, rgbToHsl } from './colorModels/hsl.js';\nimport { rgbToHsv } from './colorModels/hsv.js';\nimport { clamp, round } from './helpers.js';\nimport { parse, parsers } from './parse.js';\nimport type { AnyColor, ColorParser, HslColor, HsvColor, RgbColor } from './types.js';\n\nexport class Colordx {\n private readonly _rgb: RgbColor;\n\n constructor(input: AnyColor) {\n this._rgb = parse(input) ?? { r: 0, g: 0, b: 0, a: 1 };\n }\n\n isValid(): boolean {\n return parse(this._rgb) !== null;\n }\n\n // Converters\n toRgb(): RgbColor {\n return { ...this._rgb };\n }\n\n toRgbString(): string {\n const { r, g, b, a } = this._rgb;\n return a < 1 ? `rgba(${r}, ${g}, ${b}, ${a})` : `rgb(${r}, ${g}, ${b})`;\n }\n\n toHex(): string {\n return rgbToHex(this._rgb);\n }\n\n toHsl(): HslColor {\n return rgbToHsl(this._rgb);\n }\n\n toHslString(): string {\n const { h, s, l, a } = this.toHsl();\n return a < 1 ? `hsla(${h}, ${s}%, ${l}%, ${a})` : `hsl(${h}, ${s}%, ${l}%)`;\n }\n\n toHsv(): HsvColor {\n return rgbToHsv(this._rgb);\n }\n\n // Getters\n brightness(): number {\n const { r, g, b } = this._rgb;\n return round((r * 299 + g * 587 + b * 114) / 255000, 2);\n }\n\n luminance(): number {\n const toLinear = (c: number) => {\n const n = c / 255;\n return n <= 0.03928 ? n / 12.92 : ((n + 0.055) / 1.055) ** 2.4;\n };\n const { r, g, b } = this._rgb;\n return round(0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b), 4);\n }\n\n isDark(): boolean {\n return this.brightness() < 0.5;\n }\n\n isLight(): boolean {\n return this.brightness() >= 0.5;\n }\n\n alpha(): number;\n alpha(value: number): Colordx;\n alpha(value?: number): number | Colordx {\n if (value === undefined) return this._rgb.a;\n return new Colordx({ ...this._rgb, a: clamp(value, 0, 1) });\n }\n\n hue(): number;\n hue(value: number): Colordx;\n hue(value?: number): number | Colordx {\n const hsl = this.toHsl();\n if (value === undefined) return hsl.h;\n return new Colordx(hslToRgb({ ...hsl, h: value }));\n }\n\n // Manipulators\n lighten(amount = 0.1): Colordx {\n const hsl = this.toHsl();\n return new Colordx(hslToRgb({ ...hsl, l: clamp(hsl.l + amount * 100, 0, 100) }));\n }\n\n darken(amount = 0.1): Colordx {\n return this.lighten(-amount);\n }\n\n saturate(amount = 0.1): Colordx {\n const hsl = this.toHsl();\n return new Colordx(hslToRgb({ ...hsl, s: clamp(hsl.s + amount * 100, 0, 100) }));\n }\n\n desaturate(amount = 0.1): Colordx {\n return this.saturate(-amount);\n }\n\n grayscale(): Colordx {\n return this.desaturate(1);\n }\n\n invert(): Colordx {\n const { r, g, b, a } = this._rgb;\n return new Colordx({ r: 255 - r, g: 255 - g, b: 255 - b, a });\n }\n\n rotate(amount = 15): Colordx {\n return this.hue(this.hue() + amount);\n }\n\n mix(color: AnyColor, ratio = 0.5): Colordx {\n const other = new Colordx(color).toRgb();\n const self = this._rgb;\n const w = clamp(ratio, 0, 1);\n return new Colordx({\n r: round(self.r * (1 - w) + other.r * w),\n g: round(self.g * (1 - w) + other.g * w),\n b: round(self.b * (1 - w) + other.b * w),\n a: round(self.a * (1 - w) + other.a * w, 2),\n });\n }\n\n contrast(color: AnyColor = '#fff'): number {\n const l1 = this.luminance();\n const l2 = new Colordx(color).luminance();\n const lighter = Math.max(l1, l2);\n const darker = Math.min(l1, l2);\n return round((lighter + 0.05) / (darker + 0.05), 2);\n }\n\n isEqual(color: AnyColor): boolean {\n const other = new Colordx(color).toRgb();\n const self = this._rgb;\n return self.r === other.r && self.g === other.g && self.b === other.b && self.a === other.a;\n }\n\n toString(): string {\n return this.toHex();\n }\n}\n\nexport type Plugin = (ColordxClass: typeof Colordx, parsers: ColorParser[]) => void;\n\nexport const colordx = (input: AnyColor): Colordx => new Colordx(input);\n\nexport const extend = (plugins: Plugin[]): void => {\n plugins.forEach((plugin) => plugin(Colordx, parsers));\n};\n\nexport const random = (): Colordx =>\n new Colordx({\n r: Math.round(Math.random() * 255),\n g: Math.round(Math.random() * 255),\n b: Math.round(Math.random() * 255),\n a: 1,\n });\n"]}
@@ -0,0 +1,112 @@
1
+ interface RgbColor {
2
+ r: number;
3
+ g: number;
4
+ b: number;
5
+ a: number;
6
+ }
7
+ interface HslColor {
8
+ h: number;
9
+ s: number;
10
+ l: number;
11
+ a: number;
12
+ }
13
+ interface HsvColor {
14
+ h: number;
15
+ s: number;
16
+ v: number;
17
+ a: number;
18
+ }
19
+ interface HwbColor {
20
+ h: number;
21
+ w: number;
22
+ b: number;
23
+ a: number;
24
+ }
25
+ /** CIE LAB (D50) */
26
+ interface LabColor {
27
+ l: number;
28
+ a: number;
29
+ b: number;
30
+ alpha: number;
31
+ }
32
+ /** CIE LCH (D50) */
33
+ interface LchColor {
34
+ l: number;
35
+ c: number;
36
+ h: number;
37
+ a: number;
38
+ }
39
+ /** CIE XYZ (D65) */
40
+ interface XyzColor {
41
+ x: number;
42
+ y: number;
43
+ z: number;
44
+ a: number;
45
+ }
46
+ interface CmykColor {
47
+ c: number;
48
+ m: number;
49
+ y: number;
50
+ k: number;
51
+ a: number;
52
+ }
53
+ /** Oklab — perceptually uniform, D65 */
54
+ interface OklabColor {
55
+ l: number;
56
+ a: number;
57
+ b: number;
58
+ alpha: number;
59
+ }
60
+ /** Oklch — perceptually uniform, polar form of Oklab */
61
+ interface OklchColor {
62
+ l: number;
63
+ c: number;
64
+ h: number;
65
+ a: number;
66
+ }
67
+ /** CSS Color 4 Display-P3 */
68
+ interface P3Color {
69
+ r: number;
70
+ g: number;
71
+ b: number;
72
+ a: number;
73
+ }
74
+ type AnyColor = string | RgbColor | HslColor | HsvColor | HwbColor | LabColor | LchColor | XyzColor | CmykColor | OklabColor | OklchColor | P3Color;
75
+ type ColorParser<T = AnyColor> = (input: T) => RgbColor | null;
76
+
77
+ declare class Colordx {
78
+ private readonly _rgb;
79
+ constructor(input: AnyColor);
80
+ isValid(): boolean;
81
+ toRgb(): RgbColor;
82
+ toRgbString(): string;
83
+ toHex(): string;
84
+ toHsl(): HslColor;
85
+ toHslString(): string;
86
+ toHsv(): HsvColor;
87
+ brightness(): number;
88
+ luminance(): number;
89
+ isDark(): boolean;
90
+ isLight(): boolean;
91
+ alpha(): number;
92
+ alpha(value: number): Colordx;
93
+ hue(): number;
94
+ hue(value: number): Colordx;
95
+ lighten(amount?: number): Colordx;
96
+ darken(amount?: number): Colordx;
97
+ saturate(amount?: number): Colordx;
98
+ desaturate(amount?: number): Colordx;
99
+ grayscale(): Colordx;
100
+ invert(): Colordx;
101
+ rotate(amount?: number): Colordx;
102
+ mix(color: AnyColor, ratio?: number): Colordx;
103
+ contrast(color?: AnyColor): number;
104
+ isEqual(color: AnyColor): boolean;
105
+ toString(): string;
106
+ }
107
+ type Plugin = (ColordxClass: typeof Colordx, parsers: ColorParser[]) => void;
108
+ declare const colordx: (input: AnyColor) => Colordx;
109
+ declare const extend: (plugins: Plugin[]) => void;
110
+ declare const random: () => Colordx;
111
+
112
+ export { type AnyColor, type CmykColor, type ColorParser, Colordx, type HslColor, type HsvColor, type HwbColor, type LabColor, type LchColor, type OklabColor, type OklchColor, type P3Color, type Plugin, type RgbColor, type XyzColor, colordx, extend, random };
@@ -0,0 +1,112 @@
1
+ interface RgbColor {
2
+ r: number;
3
+ g: number;
4
+ b: number;
5
+ a: number;
6
+ }
7
+ interface HslColor {
8
+ h: number;
9
+ s: number;
10
+ l: number;
11
+ a: number;
12
+ }
13
+ interface HsvColor {
14
+ h: number;
15
+ s: number;
16
+ v: number;
17
+ a: number;
18
+ }
19
+ interface HwbColor {
20
+ h: number;
21
+ w: number;
22
+ b: number;
23
+ a: number;
24
+ }
25
+ /** CIE LAB (D50) */
26
+ interface LabColor {
27
+ l: number;
28
+ a: number;
29
+ b: number;
30
+ alpha: number;
31
+ }
32
+ /** CIE LCH (D50) */
33
+ interface LchColor {
34
+ l: number;
35
+ c: number;
36
+ h: number;
37
+ a: number;
38
+ }
39
+ /** CIE XYZ (D65) */
40
+ interface XyzColor {
41
+ x: number;
42
+ y: number;
43
+ z: number;
44
+ a: number;
45
+ }
46
+ interface CmykColor {
47
+ c: number;
48
+ m: number;
49
+ y: number;
50
+ k: number;
51
+ a: number;
52
+ }
53
+ /** Oklab — perceptually uniform, D65 */
54
+ interface OklabColor {
55
+ l: number;
56
+ a: number;
57
+ b: number;
58
+ alpha: number;
59
+ }
60
+ /** Oklch — perceptually uniform, polar form of Oklab */
61
+ interface OklchColor {
62
+ l: number;
63
+ c: number;
64
+ h: number;
65
+ a: number;
66
+ }
67
+ /** CSS Color 4 Display-P3 */
68
+ interface P3Color {
69
+ r: number;
70
+ g: number;
71
+ b: number;
72
+ a: number;
73
+ }
74
+ type AnyColor = string | RgbColor | HslColor | HsvColor | HwbColor | LabColor | LchColor | XyzColor | CmykColor | OklabColor | OklchColor | P3Color;
75
+ type ColorParser<T = AnyColor> = (input: T) => RgbColor | null;
76
+
77
+ declare class Colordx {
78
+ private readonly _rgb;
79
+ constructor(input: AnyColor);
80
+ isValid(): boolean;
81
+ toRgb(): RgbColor;
82
+ toRgbString(): string;
83
+ toHex(): string;
84
+ toHsl(): HslColor;
85
+ toHslString(): string;
86
+ toHsv(): HsvColor;
87
+ brightness(): number;
88
+ luminance(): number;
89
+ isDark(): boolean;
90
+ isLight(): boolean;
91
+ alpha(): number;
92
+ alpha(value: number): Colordx;
93
+ hue(): number;
94
+ hue(value: number): Colordx;
95
+ lighten(amount?: number): Colordx;
96
+ darken(amount?: number): Colordx;
97
+ saturate(amount?: number): Colordx;
98
+ desaturate(amount?: number): Colordx;
99
+ grayscale(): Colordx;
100
+ invert(): Colordx;
101
+ rotate(amount?: number): Colordx;
102
+ mix(color: AnyColor, ratio?: number): Colordx;
103
+ contrast(color?: AnyColor): number;
104
+ isEqual(color: AnyColor): boolean;
105
+ toString(): string;
106
+ }
107
+ type Plugin = (ColordxClass: typeof Colordx, parsers: ColorParser[]) => void;
108
+ declare const colordx: (input: AnyColor) => Colordx;
109
+ declare const extend: (plugins: Plugin[]) => void;
110
+ declare const random: () => Colordx;
111
+
112
+ export { type AnyColor, type CmykColor, type ColorParser, Colordx, type HslColor, type HsvColor, type HwbColor, type LabColor, type LchColor, type OklabColor, type OklchColor, type P3Color, type Plugin, type RgbColor, type XyzColor, colordx, extend, random };
package/dist/index.mjs ADDED
@@ -0,0 +1,2 @@
1
+ var b=(o,r,t)=>Math.min(Math.max(o,r),t),l=(o,r=0)=>Math.round(o*10**r)/10**r;var m=o=>typeof o=="number"&&!Number.isNaN(o)&&Number.isFinite(o),C=o=>typeof o=="object"&&o!==null&&!Array.isArray(o),f=(o,r)=>r.every(t=>t in o);var H=o=>parseInt(o.padEnd(2,o),16),v=o=>{if(typeof o!="string")return null;let r=o.trim().replace(/^#/,"");if(!/^[0-9a-f]{3,8}$/i.test(r))return null;if(r.length===3||r.length===4){let[t,e,n,s="f"]=r.split("");return {r:H(t),g:H(e),b:H(n),a:l(H(s)/255,2)}}return r.length===6||r.length===8?{r:parseInt(r.slice(0,2),16),g:parseInt(r.slice(2,4),16),b:parseInt(r.slice(4,6),16),a:r.length===8?l(parseInt(r.slice(6,8),16)/255,2):1}:null},k=({r:o,g:r,b:t,a:e})=>{let n=a=>b(Math.round(a),0,255).toString(16).padStart(2,"0"),s=`#${n(o)}${n(r)}${n(t)}`;return e<1?s+n(e*255):s};var y=o=>({h:(o.h%360+360)%360,s:b(o.s,0,100),l:b(o.l,0,100),a:b(l(o.a,2),0,1)}),j=({r:o,g:r,b:t,a:e})=>{let n=o/255,s=r/255,a=t/255,u=Math.max(n,s,a),c=Math.min(n,s,a),g=(u+c)/2,i=0,h=0;if(u!==c){let p=u-c;switch(h=g>.5?p/(2-u-c):p/(u+c),u){case n:i=((s-a)/p+(s<a?6:0))/6;break;case s:i=((a-n)/p+2)/6;break;case a:i=((n-s)/p+4)/6;break}}return y({h:l(i*360,2),s:l(h*100,2),l:l(g*100,2),a:e})},d=({h:o,s:r,l:t,a:e})=>{let n=r/100,s=t/100,a=s<.5?s*(1+n):s+n-s*n,u=2*s-a,c=o/360,g=i=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?u+(a-u)*6*i:i<1/2?a:i<2/3?u+(a-u)*(2/3-i)*6:u);return {r:l(g(c+1/3)*255),g:l(g(c)*255),b:l(g(c-1/3)*255),a:e}},$=o=>{if(!C(o)||!f(o,["h","s","l"]))return null;let{h:r,s:t,l:e,a:n=1}=o;return !m(r)||!m(t)||!m(e)||!m(n)?null:d(y({h:r,s:t,l:e,a:n}))},M=o=>{if(typeof o!="string")return null;let r=o.match(/^hsla?\(\s*([\d.]+)\s*,\s*([\d.]+)%\s*,\s*([\d.]+)%(?:\s*,\s*([\d.]+))?\s*\)$/i);return r?d(y({h:parseFloat(r[1]),s:parseFloat(r[2]),l:parseFloat(r[3]),a:r[4]!==void 0?parseFloat(r[4]):1})):null};var T=o=>({h:(o.h%360+360)%360,s:b(o.s,0,100),v:b(o.v,0,100),a:b(l(o.a,2),0,1)}),O=({r:o,g:r,b:t,a:e})=>{let n=o/255,s=r/255,a=t/255,u=Math.max(n,s,a),c=Math.min(n,s,a),g=u-c,i=u,h=u===0?0:g/u,p=0;if(u!==c)switch(u){case n:p=((s-a)/g+(s<a?6:0))/6;break;case s:p=((a-n)/g+2)/6;break;case a:p=((n-s)/g+4)/6;break}return T({h:l(p*360,2),s:l(h*100,2),v:l(i*100,2),a:e})},I=({h:o,s:r,v:t,a:e})=>{let n=r/100,s=t/100,a=Math.floor(o/60%6),u=o/60-Math.floor(o/60),c=s*(1-n),g=s*(1-u*n),i=s*(1-(1-u)*n),[h,p,N]=[[s,i,c,c,g,s],[g,s,s,i,c,c],[c,c,g,s,s,i]].map(_=>l(_[a]*255));return {r:h,g:p,b:N,a:e}},A=o=>{if(!C(o)||!f(o,["h","s","v"]))return null;let{h:r,s:t,v:e,a:n=1}=o;return !m(r)||!m(t)||!m(e)||!m(n)?null:I(T({h:r,s:t,v:e,a:n}))};var P=o=>({r:b(l(o.r),0,255),g:b(l(o.g),0,255),b:b(l(o.b),0,255),a:b(l(o.a,2),0,1)}),F=o=>{if(!C(o)||!f(o,["r","g","b"]))return null;let{r,g:t,b:e,a:n=1}=o;return !m(r)||!m(t)||!m(e)||!m(n)?null:P({r,g:t,b:e,a:n})},S=o=>{if(typeof o!="string")return null;let r=o.match(/^rgba?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)(?:\s*,\s*([\d.]+))?\s*\)$/i);return r?P({r:parseFloat(r[1]),g:parseFloat(r[2]),b:parseFloat(r[3]),a:r[4]!==void 0?parseFloat(r[4]):1}):null};var K=[v,S,M,F,$,A],R=[...K],w=o=>{for(let r of R){let t=r(o);if(t)return t}return null};var x=class o{_rgb;constructor(r){this._rgb=w(r)??{r:0,g:0,b:0,a:1};}isValid(){return w(this._rgb)!==null}toRgb(){return {...this._rgb}}toRgbString(){let{r,g:t,b:e,a:n}=this._rgb;return n<1?`rgba(${r}, ${t}, ${e}, ${n})`:`rgb(${r}, ${t}, ${e})`}toHex(){return k(this._rgb)}toHsl(){return j(this._rgb)}toHslString(){let{h:r,s:t,l:e,a:n}=this.toHsl();return n<1?`hsla(${r}, ${t}%, ${e}%, ${n})`:`hsl(${r}, ${t}%, ${e}%)`}toHsv(){return O(this._rgb)}brightness(){let{r,g:t,b:e}=this._rgb;return l((r*299+t*587+e*114)/255e3,2)}luminance(){let r=s=>{let a=s/255;return a<=.03928?a/12.92:((a+.055)/1.055)**2.4},{r:t,g:e,b:n}=this._rgb;return l(.2126*r(t)+.7152*r(e)+.0722*r(n),4)}isDark(){return this.brightness()<.5}isLight(){return this.brightness()>=.5}alpha(r){return r===void 0?this._rgb.a:new o({...this._rgb,a:b(r,0,1)})}hue(r){let t=this.toHsl();return r===void 0?t.h:new o(d({...t,h:r}))}lighten(r=.1){let t=this.toHsl();return new o(d({...t,l:b(t.l+r*100,0,100)}))}darken(r=.1){return this.lighten(-r)}saturate(r=.1){let t=this.toHsl();return new o(d({...t,s:b(t.s+r*100,0,100)}))}desaturate(r=.1){return this.saturate(-r)}grayscale(){return this.desaturate(1)}invert(){let{r,g:t,b:e,a:n}=this._rgb;return new o({r:255-r,g:255-t,b:255-e,a:n})}rotate(r=15){return this.hue(this.hue()+r)}mix(r,t=.5){let e=new o(r).toRgb(),n=this._rgb,s=b(t,0,1);return new o({r:l(n.r*(1-s)+e.r*s),g:l(n.g*(1-s)+e.g*s),b:l(n.b*(1-s)+e.b*s),a:l(n.a*(1-s)+e.a*s,2)})}contrast(r="#fff"){let t=this.luminance(),e=new o(r).luminance(),n=Math.max(t,e),s=Math.min(t,e);return l((n+.05)/(s+.05),2)}isEqual(r){let t=new o(r).toRgb(),e=this._rgb;return e.r===t.r&&e.g===t.g&&e.b===t.b&&e.a===t.a}toString(){return this.toHex()}},L=o=>new x(o),q=o=>{o.forEach(r=>r(x,R));},E=()=>new x({r:Math.round(Math.random()*255),g:Math.round(Math.random()*255),b:Math.round(Math.random()*255),a:1});export{x as Colordx,L as colordx,q as extend,E as random};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/helpers.ts","../src/colorModels/hex.ts","../src/colorModels/hsl.ts","../src/colorModels/hsv.ts","../src/colorModels/rgb.ts","../src/parse.ts","../src/colordx.ts"],"names":["clamp","n","min","max","round","d","isNumeric","isObject","v","hasKeys","obj","keys","k","parseHexChannel","hex","parseHex","input","clean","r","g","b","a","rgbToHex","toHex","clampHsl","hsl","rgbToHsl","rn","gn","bn","l","h","s","hslToRgb","sn","ln","q","p","hue","hueToRgb","t","parseHslObject","parseHslString","match","clampHsv","hsv","rgbToHsv","hsvToRgb","vn","i","f","channel","parseHsvObject","clampRgb","rgb","parseRgbObject","parseRgbString","defaultParsers","parsers","parse","parser","result","Colordx","_Colordx","toLinear","c","value","amount","color","ratio","other","self","w","l1","l2","lighter","darker","colordx","extend","plugins","plugin","random"],"mappings":"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","file":"index.mjs","sourcesContent":["export const clamp = (n: number, min: number, max: number): number => Math.min(Math.max(n, min), max);\n\nexport const round = (n: number, d = 0): number => Math.round(n * 10 ** d) / 10 ** d;\n\nexport const floor = (n: number, d = 0): number => Math.floor(n * 10 ** d) / 10 ** d;\n\nexport const isNumeric = (n: unknown): n is number => typeof n === 'number' && !Number.isNaN(n) && Number.isFinite(n);\n\nexport const isObject = (v: unknown): v is Record<string, unknown> =>\n typeof v === 'object' && v !== null && !Array.isArray(v);\n\nexport const hasKeys = <T extends string>(obj: Record<string, unknown>, keys: T[]): obj is Record<T, unknown> =>\n keys.every((k) => k in obj);\n","import { clamp, round } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nconst parseHexChannel = (hex: string): number => parseInt(hex.padEnd(2, hex), 16);\n\nexport const parseHex = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const clean = input.trim().replace(/^#/, '');\n if (!/^[0-9a-f]{3,8}$/i.test(clean)) return null;\n\n if (clean.length === 3 || clean.length === 4) {\n const [r, g, b, a = 'f'] = clean.split('');\n return {\n r: parseHexChannel(r!),\n g: parseHexChannel(g!),\n b: parseHexChannel(b!),\n a: round(parseHexChannel(a) / 255, 2),\n };\n }\n\n if (clean.length === 6 || clean.length === 8) {\n return {\n r: parseInt(clean.slice(0, 2), 16),\n g: parseInt(clean.slice(2, 4), 16),\n b: parseInt(clean.slice(4, 6), 16),\n a: clean.length === 8 ? round(parseInt(clean.slice(6, 8), 16) / 255, 2) : 1,\n };\n }\n\n return null;\n};\n\nexport const rgbToHex = ({ r, g, b, a }: RgbColor): string => {\n const toHex = (n: number) => clamp(Math.round(n), 0, 255).toString(16).padStart(2, '0');\n const hex = `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n return a < 1 ? hex + toHex(a * 255) : hex;\n};\n","import { clamp, hasKeys, isNumeric, isObject, round } from '../helpers.js';\nimport type { HslColor, RgbColor } from '../types.js';\n\nexport const clampHsl = (hsl: HslColor): HslColor => ({\n h: ((hsl.h % 360) + 360) % 360,\n s: clamp(hsl.s, 0, 100),\n l: clamp(hsl.l, 0, 100),\n a: clamp(round(hsl.a, 2), 0, 1),\n});\n\nexport const rgbToHsl = ({ r, g, b, a }: RgbColor): HslColor => {\n const rn = r / 255,\n gn = g / 255,\n bn = b / 255;\n const max = Math.max(rn, gn, bn),\n min = Math.min(rn, gn, bn);\n const l = (max + min) / 2;\n let h = 0,\n s = 0;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case rn:\n h = ((gn - bn) / d + (gn < bn ? 6 : 0)) / 6;\n break;\n case gn:\n h = ((bn - rn) / d + 2) / 6;\n break;\n case bn:\n h = ((rn - gn) / d + 4) / 6;\n break;\n }\n }\n\n return clampHsl({ h: round(h * 360, 2), s: round(s * 100, 2), l: round(l * 100, 2), a });\n};\n\nexport const hslToRgb = ({ h, s, l, a }: HslColor): RgbColor => {\n const sn = s / 100,\n ln = l / 100;\n const q = ln < 0.5 ? ln * (1 + sn) : ln + sn - ln * sn;\n const p = 2 * ln - q;\n const hue = h / 360;\n\n const hueToRgb = (t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n return {\n r: round(hueToRgb(hue + 1 / 3) * 255),\n g: round(hueToRgb(hue) * 255),\n b: round(hueToRgb(hue - 1 / 3) * 255),\n a,\n };\n};\n\nexport const parseHslObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['h', 's', 'l'])) return null;\n const { h, s, l, a = 1 } = input;\n if (!isNumeric(h) || !isNumeric(s) || !isNumeric(l) || !isNumeric(a as number)) return null;\n return hslToRgb(clampHsl({ h: h, s: s, l: l, a: a as number }));\n};\n\nexport const parseHslString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const match = input.match(/^hsla?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)%\\s*,\\s*([\\d.]+)%(?:\\s*,\\s*([\\d.]+))?\\s*\\)$/i);\n if (!match) return null;\n return hslToRgb(\n clampHsl({\n h: parseFloat(match[1]!),\n s: parseFloat(match[2]!),\n l: parseFloat(match[3]!),\n a: match[4] !== undefined ? parseFloat(match[4]) : 1,\n })\n );\n};\n","import { clamp, hasKeys, isNumeric, isObject, round } from '../helpers.js';\nimport type { HsvColor, RgbColor } from '../types.js';\n\nexport const clampHsv = (hsv: HsvColor): HsvColor => ({\n h: ((hsv.h % 360) + 360) % 360,\n s: clamp(hsv.s, 0, 100),\n v: clamp(hsv.v, 0, 100),\n a: clamp(round(hsv.a, 2), 0, 1),\n});\n\nexport const rgbToHsv = ({ r, g, b, a }: RgbColor): HsvColor => {\n const rn = r / 255,\n gn = g / 255,\n bn = b / 255;\n const max = Math.max(rn, gn, bn),\n min = Math.min(rn, gn, bn);\n const d = max - min;\n const v = max;\n const s = max === 0 ? 0 : d / max;\n let h = 0;\n\n if (max !== min) {\n switch (max) {\n case rn:\n h = ((gn - bn) / d + (gn < bn ? 6 : 0)) / 6;\n break;\n case gn:\n h = ((bn - rn) / d + 2) / 6;\n break;\n case bn:\n h = ((rn - gn) / d + 4) / 6;\n break;\n }\n }\n\n return clampHsv({ h: round(h * 360, 2), s: round(s * 100, 2), v: round(v * 100, 2), a });\n};\n\nexport const hsvToRgb = ({ h, s, v, a }: HsvColor): RgbColor => {\n const sn = s / 100,\n vn = v / 100;\n const i = Math.floor((h / 60) % 6);\n const f = h / 60 - Math.floor(h / 60);\n const p = vn * (1 - sn);\n const q = vn * (1 - f * sn);\n const t = vn * (1 - (1 - f) * sn);\n\n const [r, g, b] = [\n [vn, t, p, p, q, vn],\n [q, vn, vn, t, p, p],\n [p, p, q, vn, vn, t],\n ].map((channel) => round(channel[i]! * 255));\n\n return { r: r!, g: g!, b: b!, a };\n};\n\nexport const parseHsvObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['h', 's', 'v'])) return null;\n const { h, s, v, a = 1 } = input;\n if (!isNumeric(h) || !isNumeric(s) || !isNumeric(v) || !isNumeric(a as number)) return null;\n return hsvToRgb(clampHsv({ h: h, s: s, v: v, a: a as number }));\n};\n","import { clamp, hasKeys, isNumeric, isObject, round } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nexport const clampRgb = (rgb: RgbColor): RgbColor => ({\n r: clamp(round(rgb.r), 0, 255),\n g: clamp(round(rgb.g), 0, 255),\n b: clamp(round(rgb.b), 0, 255),\n a: clamp(round(rgb.a, 2), 0, 1),\n});\n\nexport const parseRgbObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['r', 'g', 'b'])) return null;\n const { r, g, b, a = 1 } = input;\n if (!isNumeric(r) || !isNumeric(g) || !isNumeric(b) || !isNumeric(a as number)) return null;\n return clampRgb({ r: r, g: g, b: b, a: a as number });\n};\n\nexport const parseRgbString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const match = input.match(\n /^rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)(?:\\s*,\\s*([\\d.]+))?\\s*\\)$/i\n );\n if (!match) return null;\n return clampRgb({\n r: parseFloat(match[1]!),\n g: parseFloat(match[2]!),\n b: parseFloat(match[3]!),\n a: match[4] !== undefined ? parseFloat(match[4]) : 1,\n });\n};\n","import { parseHex } from './colorModels/hex.js';\nimport { parseHslObject, parseHslString } from './colorModels/hsl.js';\nimport { parseHsvObject } from './colorModels/hsv.js';\nimport { parseRgbObject, parseRgbString } from './colorModels/rgb.js';\nimport type { AnyColor, ColorParser, RgbColor } from './types.js';\n\nexport const defaultParsers: ColorParser[] = [\n parseHex,\n parseRgbString,\n parseHslString,\n parseRgbObject,\n parseHslObject,\n parseHsvObject,\n];\n\nexport const parsers: ColorParser[] = [...defaultParsers];\n\nexport const parse = (input: AnyColor): RgbColor | null => {\n for (const parser of parsers) {\n const result = parser(input);\n if (result) return result;\n }\n return null;\n};\n","import { rgbToHex } from './colorModels/hex.js';\nimport { hslToRgb, rgbToHsl } from './colorModels/hsl.js';\nimport { rgbToHsv } from './colorModels/hsv.js';\nimport { clamp, round } from './helpers.js';\nimport { parse, parsers } from './parse.js';\nimport type { AnyColor, ColorParser, HslColor, HsvColor, RgbColor } from './types.js';\n\nexport class Colordx {\n private readonly _rgb: RgbColor;\n\n constructor(input: AnyColor) {\n this._rgb = parse(input) ?? { r: 0, g: 0, b: 0, a: 1 };\n }\n\n isValid(): boolean {\n return parse(this._rgb) !== null;\n }\n\n // Converters\n toRgb(): RgbColor {\n return { ...this._rgb };\n }\n\n toRgbString(): string {\n const { r, g, b, a } = this._rgb;\n return a < 1 ? `rgba(${r}, ${g}, ${b}, ${a})` : `rgb(${r}, ${g}, ${b})`;\n }\n\n toHex(): string {\n return rgbToHex(this._rgb);\n }\n\n toHsl(): HslColor {\n return rgbToHsl(this._rgb);\n }\n\n toHslString(): string {\n const { h, s, l, a } = this.toHsl();\n return a < 1 ? `hsla(${h}, ${s}%, ${l}%, ${a})` : `hsl(${h}, ${s}%, ${l}%)`;\n }\n\n toHsv(): HsvColor {\n return rgbToHsv(this._rgb);\n }\n\n // Getters\n brightness(): number {\n const { r, g, b } = this._rgb;\n return round((r * 299 + g * 587 + b * 114) / 255000, 2);\n }\n\n luminance(): number {\n const toLinear = (c: number) => {\n const n = c / 255;\n return n <= 0.03928 ? n / 12.92 : ((n + 0.055) / 1.055) ** 2.4;\n };\n const { r, g, b } = this._rgb;\n return round(0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b), 4);\n }\n\n isDark(): boolean {\n return this.brightness() < 0.5;\n }\n\n isLight(): boolean {\n return this.brightness() >= 0.5;\n }\n\n alpha(): number;\n alpha(value: number): Colordx;\n alpha(value?: number): number | Colordx {\n if (value === undefined) return this._rgb.a;\n return new Colordx({ ...this._rgb, a: clamp(value, 0, 1) });\n }\n\n hue(): number;\n hue(value: number): Colordx;\n hue(value?: number): number | Colordx {\n const hsl = this.toHsl();\n if (value === undefined) return hsl.h;\n return new Colordx(hslToRgb({ ...hsl, h: value }));\n }\n\n // Manipulators\n lighten(amount = 0.1): Colordx {\n const hsl = this.toHsl();\n return new Colordx(hslToRgb({ ...hsl, l: clamp(hsl.l + amount * 100, 0, 100) }));\n }\n\n darken(amount = 0.1): Colordx {\n return this.lighten(-amount);\n }\n\n saturate(amount = 0.1): Colordx {\n const hsl = this.toHsl();\n return new Colordx(hslToRgb({ ...hsl, s: clamp(hsl.s + amount * 100, 0, 100) }));\n }\n\n desaturate(amount = 0.1): Colordx {\n return this.saturate(-amount);\n }\n\n grayscale(): Colordx {\n return this.desaturate(1);\n }\n\n invert(): Colordx {\n const { r, g, b, a } = this._rgb;\n return new Colordx({ r: 255 - r, g: 255 - g, b: 255 - b, a });\n }\n\n rotate(amount = 15): Colordx {\n return this.hue(this.hue() + amount);\n }\n\n mix(color: AnyColor, ratio = 0.5): Colordx {\n const other = new Colordx(color).toRgb();\n const self = this._rgb;\n const w = clamp(ratio, 0, 1);\n return new Colordx({\n r: round(self.r * (1 - w) + other.r * w),\n g: round(self.g * (1 - w) + other.g * w),\n b: round(self.b * (1 - w) + other.b * w),\n a: round(self.a * (1 - w) + other.a * w, 2),\n });\n }\n\n contrast(color: AnyColor = '#fff'): number {\n const l1 = this.luminance();\n const l2 = new Colordx(color).luminance();\n const lighter = Math.max(l1, l2);\n const darker = Math.min(l1, l2);\n return round((lighter + 0.05) / (darker + 0.05), 2);\n }\n\n isEqual(color: AnyColor): boolean {\n const other = new Colordx(color).toRgb();\n const self = this._rgb;\n return self.r === other.r && self.g === other.g && self.b === other.b && self.a === other.a;\n }\n\n toString(): string {\n return this.toHex();\n }\n}\n\nexport type Plugin = (ColordxClass: typeof Colordx, parsers: ColorParser[]) => void;\n\nexport const colordx = (input: AnyColor): Colordx => new Colordx(input);\n\nexport const extend = (plugins: Plugin[]): void => {\n plugins.forEach((plugin) => plugin(Colordx, parsers));\n};\n\nexport const random = (): Colordx =>\n new Colordx({\n r: Math.round(Math.random() * 255),\n g: Math.round(Math.random() * 255),\n b: Math.round(Math.random() * 255),\n a: 1,\n });\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var c=(o,r,t)=>Math.min(Math.max(o,r),t),l=(o,r=0)=>Math.round(o*10**r)/10**r;var m=o=>typeof o=="number"&&!Number.isNaN(o)&&Number.isFinite(o),f=o=>typeof o=="object"&&o!==null&&!Array.isArray(o),d=(o,r)=>r.every(t=>t in o);var y=o=>parseInt(o.padEnd(2,o),16),A=o=>{if(typeof o!="string")return null;let r=o.trim().replace(/^#/,"");if(!/^[0-9a-f]{3,8}$/i.test(r))return null;if(r.length===3||r.length===4){let[t,s,n,e="f"]=r.split("");return {r:y(t),g:y(s),b:y(n),a:l(y(e)/255,2)}}return r.length===6||r.length===8?{r:parseInt(r.slice(0,2),16),g:parseInt(r.slice(2,4),16),b:parseInt(r.slice(4,6),16),a:r.length===8?l(parseInt(r.slice(6,8),16)/255,2):1}:null},w=({r:o,g:r,b:t,a:s})=>{let n=a=>c(Math.round(a),0,255).toString(16).padStart(2,"0"),e=`#${n(o)}${n(r)}${n(t)}`;return s<1?e+n(s*255):e};var R=o=>({h:(o.h%360+360)%360,s:c(o.s,0,100),l:c(o.l,0,100),a:c(l(o.a,2),0,1)}),v=({r:o,g:r,b:t,a:s})=>{let n=o/255,e=r/255,a=t/255,i=Math.max(n,e,a),b=Math.min(n,e,a),g=(i+b)/2,u=0,h=0;if(i!==b){let p=i-b;switch(h=g>.5?p/(2-i-b):p/(i+b),i){case n:u=((e-a)/p+(e<a?6:0))/6;break;case e:u=((a-n)/p+2)/6;break;case a:u=((n-e)/p+4)/6;break}}return R({h:l(u*360,2),s:l(h*100,2),l:l(g*100,2),a:s})},C=({h:o,s:r,l:t,a:s})=>{let n=r/100,e=t/100,a=e<.5?e*(1+n):e+n-e*n,i=2*e-a,b=o/360,g=u=>(u<0&&(u+=1),u>1&&(u-=1),u<1/6?i+(a-i)*6*u:u<1/2?a:u<2/3?i+(a-i)*(2/3-u)*6:i);return {r:l(g(b+1/3)*255),g:l(g(b)*255),b:l(g(b-1/3)*255),a:s}},k=o=>{if(!f(o)||!d(o,["h","s","l"]))return null;let{h:r,s:t,l:s,a:n=1}=o;return !m(r)||!m(t)||!m(s)||!m(n)?null:C(R({h:r,s:t,l:s,a:n}))},j=o=>{if(typeof o!="string")return null;let r=o.match(/^hsla?\(\s*([\d.]+)\s*,\s*([\d.]+)%\s*,\s*([\d.]+)%(?:\s*,\s*([\d.]+))?\s*\)$/i);return r?C(R({h:parseFloat(r[1]),s:parseFloat(r[2]),l:parseFloat(r[3]),a:r[4]!==void 0?parseFloat(r[4]):1})):null};var $=o=>({h:(o.h%360+360)%360,s:c(o.s,0,100),v:c(o.v,0,100),a:c(l(o.a,2),0,1)}),M=({r:o,g:r,b:t,a:s})=>{let n=o/255,e=r/255,a=t/255,i=Math.max(n,e,a),b=Math.min(n,e,a),g=i-b,u=i,h=i===0?0:g/i,p=0;if(i!==b)switch(i){case n:p=((e-a)/g+(e<a?6:0))/6;break;case e:p=((a-n)/g+2)/6;break;case a:p=((n-e)/g+4)/6;break}return $({h:l(p*360,2),s:l(h*100,2),v:l(u*100,2),a:s})},I=({h:o,s:r,v:t,a:s})=>{let n=r/100,e=t/100,a=Math.floor(o/60%6),i=o/60-Math.floor(o/60),b=e*(1-n),g=e*(1-i*n),u=e*(1-(1-i)*n),[h,p,N]=[[e,u,b,b,g,e],[g,e,e,u,b,b],[b,b,g,e,e,u]].map(_=>l(_[a]*255));return {r:h,g:p,b:N,a:s}},T=o=>{if(!f(o)||!d(o,["h","s","v"]))return null;let{h:r,s:t,v:s,a:n=1}=o;return !m(r)||!m(t)||!m(s)||!m(n)?null:I($({h:r,s:t,v:s,a:n}))};var O=o=>({r:c(l(o.r),0,255),g:c(l(o.g),0,255),b:c(l(o.b),0,255),a:c(l(o.a,2),0,1)}),P=o=>{if(!f(o)||!d(o,["r","g","b"]))return null;let{r,g:t,b:s,a:n=1}=o;return !m(r)||!m(t)||!m(s)||!m(n)?null:O({r,g:t,b:s,a:n})},F=o=>{if(typeof o!="string")return null;let r=o.match(/^rgba?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)(?:\s*,\s*([\d.]+))?\s*\)$/i);return r?O({r:parseFloat(r[1]),g:parseFloat(r[2]),b:parseFloat(r[3]),a:r[4]!==void 0?parseFloat(r[4]):1}):null};var K=[A,F,j,P,k,T],S=[...K],H=o=>{for(let r of S){let t=r(o);if(t)return t}return null};var x=class o{_rgb;constructor(r){this._rgb=H(r)??{r:0,g:0,b:0,a:1};}isValid(){return H(this._rgb)!==null}toRgb(){return {...this._rgb}}toRgbString(){let{r,g:t,b:s,a:n}=this._rgb;return n<1?`rgba(${r}, ${t}, ${s}, ${n})`:`rgb(${r}, ${t}, ${s})`}toHex(){return w(this._rgb)}toHsl(){return v(this._rgb)}toHslString(){let{h:r,s:t,l:s,a:n}=this.toHsl();return n<1?`hsla(${r}, ${t}%, ${s}%, ${n})`:`hsl(${r}, ${t}%, ${s}%)`}toHsv(){return M(this._rgb)}brightness(){let{r,g:t,b:s}=this._rgb;return l((r*299+t*587+s*114)/255e3,2)}luminance(){let r=e=>{let a=e/255;return a<=.03928?a/12.92:((a+.055)/1.055)**2.4},{r:t,g:s,b:n}=this._rgb;return l(.2126*r(t)+.7152*r(s)+.0722*r(n),4)}isDark(){return this.brightness()<.5}isLight(){return this.brightness()>=.5}alpha(r){return r===void 0?this._rgb.a:new o({...this._rgb,a:c(r,0,1)})}hue(r){let t=this.toHsl();return r===void 0?t.h:new o(C({...t,h:r}))}lighten(r=.1){let t=this.toHsl();return new o(C({...t,l:c(t.l+r*100,0,100)}))}darken(r=.1){return this.lighten(-r)}saturate(r=.1){let t=this.toHsl();return new o(C({...t,s:c(t.s+r*100,0,100)}))}desaturate(r=.1){return this.saturate(-r)}grayscale(){return this.desaturate(1)}invert(){let{r,g:t,b:s,a:n}=this._rgb;return new o({r:255-r,g:255-t,b:255-s,a:n})}rotate(r=15){return this.hue(this.hue()+r)}mix(r,t=.5){let s=new o(r).toRgb(),n=this._rgb,e=c(t,0,1);return new o({r:l(n.r*(1-e)+s.r*e),g:l(n.g*(1-e)+s.g*e),b:l(n.b*(1-e)+s.b*e),a:l(n.a*(1-e)+s.a*e,2)})}contrast(r="#fff"){let t=this.luminance(),s=new o(r).luminance(),n=Math.max(t,s),e=Math.min(t,s);return l((n+.05)/(e+.05),2)}isEqual(r){let t=new o(r).toRgb(),s=this._rgb;return s.r===t.r&&s.g===t.g&&s.b===t.b&&s.a===t.a}toString(){return this.toHex()}};var q=o=>{o.prototype.isReadable=function(r="#fff",t={}){let{level:s="AA",size:n="normal"}=t,e=this.contrast(r);return s==="AAA"?n==="large"?e>=4.5:e>=7:n==="large"?e>=3:e>=4.5},o.prototype.minReadable=function(r="#fff"){let t=new x(this.toRgb()),s=new x(r).luminance(),n=this.luminance()>s;for(let e=0;e<100&&!(t.contrast(r)>=4.5);e++)t=n?t.darken(.01):t.lighten(.01);return t};},ar=q;module.exports=ar;//# sourceMappingURL=a11y.cjs.map
2
+ //# sourceMappingURL=a11y.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/helpers.ts","../../src/colorModels/hex.ts","../../src/colorModels/hsl.ts","../../src/colorModels/hsv.ts","../../src/colorModels/rgb.ts","../../src/parse.ts","../../src/colordx.ts","../../src/plugins/a11y.ts"],"names":["clamp","n","min","max","round","d","isNumeric","isObject","v","hasKeys","obj","keys","k","parseHexChannel","hex","parseHex","input","clean","r","g","b","a","rgbToHex","toHex","clampHsl","hsl","rgbToHsl","rn","gn","bn","l","h","s","hslToRgb","sn","ln","q","p","hue","hueToRgb","t","parseHslObject","parseHslString","match","clampHsv","hsv","rgbToHsv","hsvToRgb","vn","i","f","channel","parseHsvObject","clampRgb","rgb","parseRgbObject","parseRgbString","defaultParsers","parsers","parse","parser","result","Colordx","_Colordx","toLinear","c","value","amount","color","ratio","other","self","w","l1","l2","lighter","darker","a11y","ColordClass","background","options","level","size","bgLuminance","darken","a11y_default"],"mappings":"aAAO,IAAMA,CAAAA,CAAQ,CAACC,CAAAA,CAAWC,CAAAA,CAAaC,CAAAA,GAAwB,KAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAIF,CAAAA,CAAGC,CAAG,CAAA,CAAGC,CAAG,CAAA,CAEvFC,CAAAA,CAAQ,CAACH,CAAAA,CAAWI,CAAAA,CAAI,CAAA,GAAc,KAAK,KAAA,CAAMJ,CAAAA,CAAI,EAAA,EAAMI,CAAC,CAAA,CAAI,EAAA,EAAMA,EAI5E,IAAMC,CAAAA,CAAaL,CAAAA,EAA4B,OAAOA,CAAAA,EAAM,QAAA,EAAY,CAAC,MAAA,CAAO,KAAA,CAAMA,CAAC,CAAA,EAAK,MAAA,CAAO,QAAA,CAASA,CAAC,CAAA,CAEvGM,CAAAA,CAAYC,CAAAA,EACvB,OAAOA,CAAAA,EAAM,QAAA,EAAYA,IAAM,IAAA,EAAQ,CAAC,KAAA,CAAM,OAAA,CAAQA,CAAC,CAAA,CAE5CC,EAAU,CAAmBC,CAAAA,CAA8BC,CAAAA,GACtEA,CAAAA,CAAK,KAAA,CAAOC,CAAAA,EAAMA,KAAKF,CAAG,CAAA,CCT5B,IAAMG,CAAAA,CAAmBC,CAAAA,EAAwB,QAAA,CAASA,EAAI,MAAA,CAAO,CAAA,CAAGA,CAAG,CAAA,CAAG,EAAE,CAAA,CAEnEC,EAAYC,CAAAA,EAAoC,CAC3D,GAAI,OAAOA,CAAAA,EAAU,QAAA,CAAU,OAAO,IAAA,CACtC,IAAMC,CAAAA,CAAQD,CAAAA,CAAM,IAAA,EAAK,CAAE,QAAQ,IAAA,CAAM,EAAE,CAAA,CAC3C,GAAI,CAAC,kBAAA,CAAmB,KAAKC,CAAK,CAAA,CAAG,OAAO,IAAA,CAE5C,GAAIA,CAAAA,CAAM,SAAW,CAAA,EAAKA,CAAAA,CAAM,MAAA,GAAW,CAAA,CAAG,CAC5C,GAAM,CAACC,CAAAA,CAAGC,CAAAA,CAAGC,CAAAA,CAAGC,CAAAA,CAAI,GAAG,CAAA,CAAIJ,EAAM,KAAA,CAAM,EAAE,CAAA,CACzC,OAAO,CACL,CAAA,CAAGJ,EAAgBK,CAAE,CAAA,CACrB,CAAA,CAAGL,CAAAA,CAAgBM,CAAE,CAAA,CACrB,EAAGN,CAAAA,CAAgBO,CAAE,CAAA,CACrB,CAAA,CAAGhB,CAAAA,CAAMS,CAAAA,CAAgBQ,CAAC,CAAA,CAAI,GAAA,CAAK,CAAC,CACtC,CACF,CAEA,OAAIJ,CAAAA,CAAM,MAAA,GAAW,CAAA,EAAKA,CAAAA,CAAM,MAAA,GAAW,CAAA,CAClC,CACL,CAAA,CAAG,QAAA,CAASA,CAAAA,CAAM,KAAA,CAAM,CAAA,CAAG,CAAC,EAAG,EAAE,CAAA,CACjC,CAAA,CAAG,QAAA,CAASA,CAAAA,CAAM,KAAA,CAAM,EAAG,CAAC,CAAA,CAAG,EAAE,CAAA,CACjC,CAAA,CAAG,QAAA,CAASA,EAAM,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAAG,EAAE,CAAA,CACjC,EAAGA,CAAAA,CAAM,MAAA,GAAW,CAAA,CAAIb,CAAAA,CAAM,QAAA,CAASa,CAAAA,CAAM,MAAM,CAAA,CAAG,CAAC,CAAA,CAAG,EAAE,CAAA,CAAI,GAAA,CAAK,CAAC,CAAA,CAAI,CAC5E,CAAA,CAGK,IACT,CAAA,CAEaK,CAAAA,CAAW,CAAC,CAAE,CAAA,CAAAJ,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAAC,EAAG,CAAA,CAAAC,CAAE,CAAA,GAAwB,CAC5D,IAAME,CAAAA,CAAStB,GAAcD,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAMC,CAAC,CAAA,CAAG,CAAA,CAAG,GAAG,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAA,CAChFa,CAAAA,CAAM,CAAA,CAAA,EAAIS,CAAAA,CAAML,CAAC,CAAC,GAAGK,CAAAA,CAAMJ,CAAC,CAAC,CAAA,EAAGI,CAAAA,CAAMH,CAAC,CAAC,CAAA,CAAA,CAC9C,OAAOC,CAAAA,CAAI,CAAA,CAAIP,CAAAA,CAAMS,CAAAA,CAAMF,EAAI,GAAG,CAAA,CAAIP,CACxC,CAAA,CCjCO,IAAMU,CAAAA,CAAYC,IAA6B,CACpD,CAAA,CAAA,CAAKA,CAAAA,CAAI,CAAA,CAAI,GAAA,CAAO,GAAA,EAAO,IAC3B,CAAA,CAAGzB,CAAAA,CAAMyB,CAAAA,CAAI,CAAA,CAAG,CAAA,CAAG,GAAG,EACtB,CAAA,CAAGzB,CAAAA,CAAMyB,CAAAA,CAAI,CAAA,CAAG,CAAA,CAAG,GAAG,EACtB,CAAA,CAAGzB,CAAAA,CAAMI,CAAAA,CAAMqB,CAAAA,CAAI,CAAA,CAAG,CAAC,EAAG,CAAA,CAAG,CAAC,CAChC,CAAA,CAAA,CAEaC,CAAAA,CAAW,CAAC,CAAE,CAAA,CAAAR,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,EAAAC,CAAE,CAAA,GAA0B,CAC9D,IAAMM,CAAAA,CAAKT,CAAAA,CAAI,IACbU,CAAAA,CAAKT,CAAAA,CAAI,GAAA,CACTU,CAAAA,CAAKT,CAAAA,CAAI,GAAA,CACLjB,EAAM,IAAA,CAAK,GAAA,CAAIwB,CAAAA,CAAIC,CAAAA,CAAIC,CAAE,CAAA,CAC7B3B,EAAM,IAAA,CAAK,GAAA,CAAIyB,CAAAA,CAAIC,CAAAA,CAAIC,CAAE,CAAA,CACrBC,GAAK3B,CAAAA,CAAMD,CAAAA,EAAO,CAAA,CACpB6B,CAAAA,CAAI,CAAA,CACNC,CAAAA,CAAI,EAEN,GAAI7B,CAAAA,GAAQD,CAAAA,CAAK,CACf,IAAMG,CAAAA,CAAIF,EAAMD,CAAAA,CAEhB,OADA8B,CAAAA,CAAIF,CAAAA,CAAI,EAAA,CAAMzB,CAAAA,EAAK,EAAIF,CAAAA,CAAMD,CAAAA,CAAAA,CAAOG,CAAAA,EAAKF,CAAAA,CAAMD,CAAAA,CAAAA,CACvCC,CAAAA,EACN,KAAKwB,CAAAA,CACHI,CAAAA,CAAAA,CAAAA,CAAMH,CAAAA,CAAKC,CAAAA,EAAMxB,CAAAA,EAAKuB,EAAKC,CAAAA,CAAK,CAAA,CAAI,CAAA,CAAA,EAAM,CAAA,CAC1C,MACF,KAAKD,EACHG,CAAAA,CAAAA,CAAAA,CAAMF,CAAAA,CAAKF,CAAAA,EAAMtB,CAAAA,CAAI,CAAA,EAAK,CAAA,CAC1B,MACF,KAAKwB,CAAAA,CACHE,CAAAA,CAAAA,CAAAA,CAAMJ,CAAAA,CAAKC,CAAAA,EAAMvB,CAAAA,CAAI,GAAK,CAAA,CAC1B,KACJ,CACF,CAEA,OAAOmB,CAAAA,CAAS,CAAE,CAAA,CAAGpB,CAAAA,CAAM2B,CAAAA,CAAI,GAAA,CAAK,CAAC,CAAA,CAAG,EAAG3B,CAAAA,CAAM4B,CAAAA,CAAI,GAAA,CAAK,CAAC,CAAA,CAAG,CAAA,CAAG5B,EAAM0B,CAAAA,CAAI,GAAA,CAAK,CAAC,CAAA,CAAG,CAAA,CAAAT,CAAE,CAAC,CACzF,CAAA,CAEaY,CAAAA,CAAW,CAAC,CAAE,CAAA,CAAAF,EAAG,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAAF,CAAAA,CAAG,CAAA,CAAAT,CAAE,IAA0B,CAC9D,IAAMa,CAAAA,CAAKF,CAAAA,CAAI,GAAA,CACbG,CAAAA,CAAKL,EAAI,GAAA,CACLM,CAAAA,CAAID,CAAAA,CAAK,EAAA,CAAMA,CAAAA,EAAM,CAAA,CAAID,GAAMC,CAAAA,CAAKD,CAAAA,CAAKC,CAAAA,CAAKD,CAAAA,CAC9CG,CAAAA,CAAI,CAAA,CAAIF,EAAKC,CAAAA,CACbE,CAAAA,CAAMP,CAAAA,CAAI,GAAA,CAEVQ,CAAAA,CAAYC,CAAAA,GACZA,EAAI,CAAA,GAAGA,CAAAA,EAAK,CAAA,CAAA,CACZA,CAAAA,CAAI,CAAA,GAAGA,CAAAA,EAAK,GACZA,CAAAA,CAAI,CAAA,CAAI,CAAA,CAAUH,CAAAA,CAAAA,CAAKD,CAAAA,CAAIC,CAAAA,EAAK,EAAIG,CAAAA,CACpCA,CAAAA,CAAI,CAAA,CAAI,CAAA,CAAUJ,CAAAA,CAClBI,CAAAA,CAAI,EAAI,CAAA,CAAUH,CAAAA,CAAAA,CAAKD,CAAAA,CAAIC,CAAAA,GAAM,CAAA,CAAI,CAAA,CAAIG,GAAK,CAAA,CAC3CH,CAAAA,CAAAA,CAGT,OAAO,CACL,CAAA,CAAGjC,CAAAA,CAAMmC,EAASD,CAAAA,CAAM,CAAA,CAAI,CAAC,CAAA,CAAI,GAAG,CAAA,CACpC,EAAGlC,CAAAA,CAAMmC,CAAAA,CAASD,CAAG,CAAA,CAAI,GAAG,CAAA,CAC5B,EAAGlC,CAAAA,CAAMmC,CAAAA,CAASD,CAAAA,CAAM,CAAA,CAAI,CAAC,CAAA,CAAI,GAAG,CAAA,CACpC,CAAA,CAAAjB,CACF,CACF,CAAA,CAEaoB,CAAAA,CAAkBzB,GAAoC,CAEjE,GADI,CAACT,CAAAA,CAASS,CAAK,CAAA,EACf,CAACP,CAAAA,CAAQO,CAAAA,CAAO,CAAC,GAAA,CAAK,GAAA,CAAK,GAAG,CAAC,CAAA,CAAG,OAAO,IAAA,CAC7C,GAAM,CAAE,CAAA,CAAAe,EAAG,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAAF,CAAAA,CAAG,CAAA,CAAAT,CAAAA,CAAI,CAAE,CAAA,CAAIL,CAAAA,CAC3B,OAAI,CAACV,CAAAA,CAAUyB,CAAC,GAAK,CAACzB,CAAAA,CAAU0B,CAAC,CAAA,EAAK,CAAC1B,CAAAA,CAAUwB,CAAC,CAAA,EAAK,CAACxB,CAAAA,CAAUe,CAAW,CAAA,CAAU,IAAA,CAChFY,EAAST,CAAAA,CAAS,CAAE,CAAA,CAAGO,CAAAA,CAAG,CAAA,CAAGC,CAAAA,CAAG,EAAGF,CAAAA,CAAG,CAAA,CAAGT,CAAY,CAAC,CAAC,CAChE,EAEaqB,CAAAA,CAAkB1B,CAAAA,EAAoC,CACjE,GAAI,OAAOA,CAAAA,EAAU,SAAU,OAAO,IAAA,CACtC,IAAM2B,CAAAA,CAAQ3B,CAAAA,CAAM,KAAA,CAAM,gFAAgF,CAAA,CAC1G,OAAK2B,CAAAA,CACEV,CAAAA,CACLT,CAAAA,CAAS,CACP,EAAG,UAAA,CAAWmB,CAAAA,CAAM,CAAC,CAAE,CAAA,CACvB,CAAA,CAAG,WAAWA,CAAAA,CAAM,CAAC,CAAE,CAAA,CACvB,CAAA,CAAG,UAAA,CAAWA,EAAM,CAAC,CAAE,CAAA,CACvB,CAAA,CAAGA,CAAAA,CAAM,CAAC,IAAM,MAAA,CAAY,UAAA,CAAWA,CAAAA,CAAM,CAAC,CAAC,CAAA,CAAI,CACrD,CAAC,CACH,CAAA,CARmB,IASrB,CAAA,CChFO,IAAMC,EAAYC,CAAAA,GAA6B,CACpD,CAAA,CAAA,CAAKA,CAAAA,CAAI,CAAA,CAAI,GAAA,CAAO,KAAO,GAAA,CAC3B,CAAA,CAAG7C,CAAAA,CAAM6C,CAAAA,CAAI,CAAA,CAAG,CAAA,CAAG,GAAG,CAAA,CACtB,CAAA,CAAG7C,CAAAA,CAAM6C,CAAAA,CAAI,CAAA,CAAG,CAAA,CAAG,GAAG,CAAA,CACtB,CAAA,CAAG7C,CAAAA,CAAMI,CAAAA,CAAMyC,CAAAA,CAAI,CAAA,CAAG,CAAC,CAAA,CAAG,CAAA,CAAG,CAAC,CAChC,CAAA,CAAA,CAEaC,CAAAA,CAAW,CAAC,CAAE,CAAA,CAAA5B,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAAC,EAAG,CAAA,CAAAC,CAAE,CAAA,GAA0B,CAC9D,IAAMM,CAAAA,CAAKT,EAAI,GAAA,CACbU,CAAAA,CAAKT,CAAAA,CAAI,GAAA,CACTU,CAAAA,CAAKT,CAAAA,CAAI,IACLjB,CAAAA,CAAM,IAAA,CAAK,GAAA,CAAIwB,CAAAA,CAAIC,CAAAA,CAAIC,CAAE,EAC7B3B,CAAAA,CAAM,IAAA,CAAK,GAAA,CAAIyB,CAAAA,CAAIC,CAAAA,CAAIC,CAAE,EACrBxB,CAAAA,CAAIF,CAAAA,CAAMD,CAAAA,CACVM,CAAAA,CAAIL,CAAAA,CACJ6B,CAAAA,CAAI7B,IAAQ,CAAA,CAAI,CAAA,CAAIE,CAAAA,CAAIF,CAAAA,CAC1B4B,CAAAA,CAAI,CAAA,CAER,GAAI5B,CAAAA,GAAQD,CAAAA,CACV,OAAQC,CAAAA,EACN,KAAKwB,EACHI,CAAAA,CAAAA,CAAAA,CAAMH,CAAAA,CAAKC,CAAAA,EAAMxB,CAAAA,EAAKuB,CAAAA,CAAKC,CAAAA,CAAK,EAAI,CAAA,CAAA,EAAM,CAAA,CAC1C,MACF,KAAKD,CAAAA,CACHG,CAAAA,CAAAA,CAAAA,CAAMF,EAAKF,CAAAA,EAAMtB,CAAAA,CAAI,CAAA,EAAK,CAAA,CAC1B,MACF,KAAKwB,EACHE,CAAAA,CAAAA,CAAAA,CAAMJ,CAAAA,CAAKC,CAAAA,EAAMvB,CAAAA,CAAI,CAAA,EAAK,CAAA,CAC1B,KACJ,CAGF,OAAOuC,CAAAA,CAAS,CAAE,CAAA,CAAGxC,CAAAA,CAAM2B,EAAI,GAAA,CAAK,CAAC,CAAA,CAAG,CAAA,CAAG3B,CAAAA,CAAM4B,CAAAA,CAAI,IAAK,CAAC,CAAA,CAAG,CAAA,CAAG5B,CAAAA,CAAMI,CAAAA,CAAI,GAAA,CAAK,CAAC,CAAA,CAAG,CAAA,CAAAa,CAAE,CAAC,CACzF,CAAA,CAEa0B,EAAW,CAAC,CAAE,CAAA,CAAAhB,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,EAAAxB,CAAAA,CAAG,CAAA,CAAAa,CAAE,CAAA,GAA0B,CAC9D,IAAMa,EAAKF,CAAAA,CAAI,GAAA,CACbgB,CAAAA,CAAKxC,CAAAA,CAAI,GAAA,CACLyC,CAAAA,CAAI,KAAK,KAAA,CAAOlB,CAAAA,CAAI,EAAA,CAAM,CAAC,CAAA,CAC3BmB,CAAAA,CAAInB,EAAI,EAAA,CAAK,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,EAAE,CAAA,CAC9BM,EAAIW,CAAAA,EAAM,CAAA,CAAId,CAAAA,CAAAA,CACdE,CAAAA,CAAIY,CAAAA,EAAM,CAAA,CAAIE,EAAIhB,CAAAA,CAAAA,CAClBM,CAAAA,CAAIQ,CAAAA,EAAM,CAAA,CAAA,CAAK,CAAA,CAAIE,CAAAA,EAAKhB,GAExB,CAAChB,CAAAA,CAAGC,CAAAA,CAAGC,CAAC,CAAA,CAAI,CAChB,CAAC4B,CAAAA,CAAIR,CAAAA,CAAGH,CAAAA,CAAGA,CAAAA,CAAGD,CAAAA,CAAGY,CAAE,EACnB,CAACZ,CAAAA,CAAGY,CAAAA,CAAIA,CAAAA,CAAIR,CAAAA,CAAGH,CAAAA,CAAGA,CAAC,CAAA,CACnB,CAACA,CAAAA,CAAGA,CAAAA,CAAGD,CAAAA,CAAGY,CAAAA,CAAIA,EAAIR,CAAC,CACrB,CAAA,CAAE,GAAA,CAAKW,CAAAA,EAAY/C,CAAAA,CAAM+C,EAAQF,CAAC,CAAA,CAAK,GAAG,CAAC,CAAA,CAE3C,OAAO,CAAE,CAAA,CAAG/B,CAAAA,CAAI,CAAA,CAAGC,CAAAA,CAAI,CAAA,CAAGC,CAAAA,CAAI,EAAAC,CAAE,CAClC,CAAA,CAEa+B,CAAAA,CAAkBpC,CAAAA,EAAoC,CAEjE,GADI,CAACT,CAAAA,CAASS,CAAK,CAAA,EACf,CAACP,CAAAA,CAAQO,CAAAA,CAAO,CAAC,GAAA,CAAK,GAAA,CAAK,GAAG,CAAC,CAAA,CAAG,OAAO,KAC7C,GAAM,CAAE,CAAA,CAAAe,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,EAAAxB,CAAAA,CAAG,CAAA,CAAAa,CAAAA,CAAI,CAAE,CAAA,CAAIL,CAAAA,CAC3B,OAAI,CAACV,CAAAA,CAAUyB,CAAC,CAAA,EAAK,CAACzB,CAAAA,CAAU0B,CAAC,CAAA,EAAK,CAAC1B,CAAAA,CAAUE,CAAC,CAAA,EAAK,CAACF,EAAUe,CAAW,CAAA,CAAU,IAAA,CAChF0B,CAAAA,CAASH,CAAAA,CAAS,CAAE,EAAGb,CAAAA,CAAG,CAAA,CAAGC,CAAAA,CAAG,CAAA,CAAGxB,CAAAA,CAAG,CAAA,CAAGa,CAAY,CAAC,CAAC,CAChE,CAAA,CC3DO,IAAMgC,CAAAA,CAAYC,IAA6B,CACpD,CAAA,CAAGtD,CAAAA,CAAMI,CAAAA,CAAMkD,CAAAA,CAAI,CAAC,EAAG,CAAA,CAAG,GAAG,CAAA,CAC7B,CAAA,CAAGtD,CAAAA,CAAMI,CAAAA,CAAMkD,EAAI,CAAC,CAAA,CAAG,CAAA,CAAG,GAAG,CAAA,CAC7B,CAAA,CAAGtD,EAAMI,CAAAA,CAAMkD,CAAAA,CAAI,CAAC,CAAA,CAAG,CAAA,CAAG,GAAG,EAC7B,CAAA,CAAGtD,CAAAA,CAAMI,CAAAA,CAAMkD,CAAAA,CAAI,CAAA,CAAG,CAAC,EAAG,CAAA,CAAG,CAAC,CAChC,CAAA,CAAA,CAEaC,CAAAA,CAAkBvC,CAAAA,EAAoC,CAEjE,GADI,CAACT,CAAAA,CAASS,CAAK,CAAA,EACf,CAACP,EAAQO,CAAAA,CAAO,CAAC,GAAA,CAAK,GAAA,CAAK,GAAG,CAAC,EAAG,OAAO,IAAA,CAC7C,GAAM,CAAE,CAAA,CAAG,CAAA,CAAAG,EAAG,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAI,CAAE,CAAA,CAAIL,EAC3B,OAAI,CAACV,CAAAA,CAAU,CAAC,CAAA,EAAK,CAACA,EAAUa,CAAC,CAAA,EAAK,CAACb,CAAAA,CAAUc,CAAC,CAAA,EAAK,CAACd,CAAAA,CAAUe,CAAW,CAAA,CAAU,IAAA,CAChFgC,CAAAA,CAAS,CAAE,EAAM,CAAA,CAAGlC,CAAAA,CAAG,CAAA,CAAGC,CAAAA,CAAG,CAAA,CAAGC,CAAY,CAAC,CACtD,CAAA,CAEamC,CAAAA,CAAkBxC,CAAAA,EAAoC,CACjE,GAAI,OAAOA,CAAAA,EAAU,QAAA,CAAU,OAAO,IAAA,CACtC,IAAM2B,CAAAA,CAAQ3B,EAAM,KAAA,CAClB,mGACF,CAAA,CACA,OAAK2B,CAAAA,CACEU,CAAAA,CAAS,CACd,CAAA,CAAG,UAAA,CAAWV,CAAAA,CAAM,CAAC,CAAE,CAAA,CACvB,EAAG,UAAA,CAAWA,CAAAA,CAAM,CAAC,CAAE,CAAA,CACvB,CAAA,CAAG,WAAWA,CAAAA,CAAM,CAAC,CAAE,CAAA,CACvB,CAAA,CAAGA,CAAAA,CAAM,CAAC,CAAA,GAAM,MAAA,CAAY,UAAA,CAAWA,CAAAA,CAAM,CAAC,CAAC,EAAI,CACrD,CAAC,CAAA,CANkB,IAOrB,CAAA,CCxBO,IAAMc,EAAgC,CAC3C1C,CAAAA,CACAyC,CAAAA,CACAd,CAAAA,CACAa,CAAAA,CACAd,CAAAA,CACAW,CACF,CAAA,CAEaM,CAAAA,CAAyB,CAAC,GAAGD,CAAc,CAAA,CAE3CE,EAAS3C,CAAAA,EAAqC,CACzD,IAAA,IAAW4C,CAAAA,IAAUF,CAAAA,CAAS,CAC5B,IAAMG,CAAAA,CAASD,CAAAA,CAAO5C,CAAK,CAAA,CAC3B,GAAI6C,CAAAA,CAAQ,OAAOA,CACrB,CACA,OAAO,IACT,CAAA,CChBO,IAAMC,EAAN,MAAMC,CAAQ,CACF,IAAA,CAEjB,WAAA,CAAY/C,CAAAA,CAAiB,CAC3B,IAAA,CAAK,IAAA,CAAO2C,CAAAA,CAAM3C,CAAK,CAAA,EAAK,CAAE,EAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAE,EACvD,CAEA,OAAA,EAAmB,CACjB,OAAO2C,CAAAA,CAAM,KAAK,IAAI,CAAA,GAAM,IAC9B,CAGA,KAAA,EAAkB,CAChB,OAAO,CAAE,GAAG,IAAA,CAAK,IAAK,CACxB,CAEA,aAAsB,CACpB,GAAM,CAAE,CAAA,CAAG,CAAA,CAAAxC,CAAAA,CAAG,EAAAC,CAAAA,CAAG,CAAA,CAAAC,CAAE,CAAA,CAAI,IAAA,CAAK,IAAA,CAC5B,OAAOA,CAAAA,CAAI,CAAA,CAAI,CAAA,KAAA,EAAQ,CAAC,CAAA,EAAA,EAAKF,CAAC,KAAKC,CAAC,CAAA,EAAA,EAAKC,CAAC,CAAA,CAAA,CAAA,CAAM,CAAA,IAAA,EAAO,CAAC,KAAKF,CAAC,CAAA,EAAA,EAAKC,CAAC,CAAA,CAAA,CACtE,CAEA,KAAA,EAAgB,CACd,OAAOE,CAAAA,CAAS,IAAA,CAAK,IAAI,CAC3B,CAEA,OAAkB,CAChB,OAAOI,CAAAA,CAAS,IAAA,CAAK,IAAI,CAC3B,CAEA,WAAA,EAAsB,CACpB,GAAM,CAAE,CAAA,CAAAK,CAAAA,CAAG,EAAAC,CAAAA,CAAG,CAAA,CAAAF,CAAAA,CAAG,CAAA,CAAAT,CAAE,CAAA,CAAI,KAAK,KAAA,EAAM,CAClC,OAAOA,CAAAA,CAAI,CAAA,CAAI,CAAA,KAAA,EAAQU,CAAC,CAAA,EAAA,EAAKC,CAAC,CAAA,GAAA,EAAMF,CAAC,CAAA,GAAA,EAAMT,CAAC,IAAM,CAAA,IAAA,EAAOU,CAAC,CAAA,EAAA,EAAKC,CAAC,CAAA,GAAA,EAAMF,CAAC,IACzE,CAEA,KAAA,EAAkB,CAChB,OAAOgB,CAAAA,CAAS,IAAA,CAAK,IAAI,CAC3B,CAGA,UAAA,EAAqB,CACnB,GAAM,CAAE,EAAG,CAAA,CAAA3B,CAAAA,CAAG,CAAA,CAAAC,CAAE,CAAA,CAAI,IAAA,CAAK,KACzB,OAAOhB,CAAAA,CAAAA,CAAO,CAAA,CAAI,GAAA,CAAMe,CAAAA,CAAI,GAAA,CAAMC,EAAI,GAAA,EAAO,KAAA,CAAQ,CAAC,CACxD,CAEA,SAAA,EAAoB,CAClB,IAAM4C,CAAAA,CAAYC,CAAAA,EAAc,CAC9B,IAAMhE,CAAAA,CAAIgE,EAAI,GAAA,CACd,OAAOhE,CAAAA,EAAK,MAAA,CAAUA,CAAAA,CAAI,KAAA,CAAA,CAAA,CAAUA,EAAI,IAAA,EAAS,KAAA,GAAU,GAC7D,CAAA,CACM,CAAE,CAAA,CAAAiB,EAAG,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAAC,CAAE,CAAA,CAAI,IAAA,CAAK,KACzB,OAAOhB,CAAAA,CAAM,KAAA,CAAS4D,CAAAA,CAAS9C,CAAC,CAAA,CAAI,MAAS8C,CAAAA,CAAS7C,CAAC,CAAA,CAAI,KAAA,CAAS6C,CAAAA,CAAS5C,CAAC,EAAG,CAAC,CACpF,CAEA,MAAA,EAAkB,CAChB,OAAO,KAAK,UAAA,EAAW,CAAI,EAC7B,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,UAAA,EAAW,EAAK,EAC9B,CAIA,KAAA,CAAM8C,EAAkC,CACtC,OAAIA,CAAAA,GAAU,MAAA,CAAkB,IAAA,CAAK,IAAA,CAAK,EACnC,IAAIH,CAAAA,CAAQ,CAAE,GAAG,IAAA,CAAK,IAAA,CAAM,EAAG/D,CAAAA,CAAMkE,CAAAA,CAAO,CAAA,CAAG,CAAC,CAAE,CAAC,CAC5D,CAIA,GAAA,CAAIA,CAAAA,CAAkC,CACpC,IAAMzC,CAAAA,CAAM,KAAK,KAAA,EAAM,CACvB,OAAIyC,CAAAA,GAAU,MAAA,CAAkBzC,CAAAA,CAAI,EAC7B,IAAIsC,CAAAA,CAAQ9B,CAAAA,CAAS,CAAE,GAAGR,CAAAA,CAAK,EAAGyC,CAAM,CAAC,CAAC,CACnD,CAGA,OAAA,CAAQC,EAAS,EAAA,CAAc,CAC7B,IAAM1C,CAAAA,CAAM,IAAA,CAAK,KAAA,GACjB,OAAO,IAAIsC,CAAAA,CAAQ9B,CAAAA,CAAS,CAAE,GAAGR,EAAK,CAAA,CAAGzB,CAAAA,CAAMyB,CAAAA,CAAI,CAAA,CAAI0C,CAAAA,CAAS,GAAA,CAAK,EAAG,GAAG,CAAE,CAAC,CAAC,CACjF,CAEA,OAAOA,CAAAA,CAAS,EAAA,CAAc,CAC5B,OAAO,IAAA,CAAK,OAAA,CAAQ,CAACA,CAAM,CAC7B,CAEA,QAAA,CAASA,CAAAA,CAAS,EAAA,CAAc,CAC9B,IAAM1C,CAAAA,CAAM,IAAA,CAAK,KAAA,EAAM,CACvB,OAAO,IAAIsC,CAAAA,CAAQ9B,CAAAA,CAAS,CAAE,GAAGR,CAAAA,CAAK,CAAA,CAAGzB,EAAMyB,CAAAA,CAAI,CAAA,CAAI0C,CAAAA,CAAS,GAAA,CAAK,CAAA,CAAG,GAAG,CAAE,CAAC,CAAC,CACjF,CAEA,UAAA,CAAWA,CAAAA,CAAS,GAAc,CAChC,OAAO,IAAA,CAAK,QAAA,CAAS,CAACA,CAAM,CAC9B,CAEA,SAAA,EAAqB,CACnB,OAAO,IAAA,CAAK,UAAA,CAAW,CAAC,CAC1B,CAEA,MAAA,EAAkB,CAChB,GAAM,CAAE,EAAG,CAAA,CAAAhD,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAAC,CAAE,EAAI,IAAA,CAAK,IAAA,CAC5B,OAAO,IAAI0C,CAAAA,CAAQ,CAAE,EAAG,GAAA,CAAM,CAAA,CAAG,CAAA,CAAG,GAAA,CAAM5C,CAAAA,CAAG,CAAA,CAAG,IAAMC,CAAAA,CAAG,CAAA,CAAAC,CAAE,CAAC,CAC9D,CAEA,OAAO8C,CAAAA,CAAS,EAAA,CAAa,CAC3B,OAAO,IAAA,CAAK,GAAA,CAAI,KAAK,GAAA,EAAI,CAAIA,CAAM,CACrC,CAEA,GAAA,CAAIC,EAAiBC,CAAAA,CAAQ,EAAA,CAAc,CACzC,IAAMC,CAAAA,CAAQ,IAAIP,EAAQK,CAAK,CAAA,CAAE,KAAA,EAAM,CACjCG,CAAAA,CAAO,IAAA,CAAK,KACZC,CAAAA,CAAIxE,CAAAA,CAAMqE,CAAAA,CAAO,CAAA,CAAG,CAAC,CAAA,CAC3B,OAAO,IAAIN,CAAAA,CAAQ,CACjB,CAAA,CAAG3D,CAAAA,CAAMmE,CAAAA,CAAK,GAAK,CAAA,CAAIC,CAAAA,CAAAA,CAAKF,CAAAA,CAAM,CAAA,CAAIE,CAAC,CAAA,CACvC,EAAGpE,CAAAA,CAAMmE,CAAAA,CAAK,CAAA,EAAK,CAAA,CAAIC,CAAAA,CAAAA,CAAKF,CAAAA,CAAM,EAAIE,CAAC,CAAA,CACvC,CAAA,CAAGpE,CAAAA,CAAMmE,CAAAA,CAAK,CAAA,EAAK,EAAIC,CAAAA,CAAAA,CAAKF,CAAAA,CAAM,CAAA,CAAIE,CAAC,CAAA,CACvC,CAAA,CAAGpE,EAAMmE,CAAAA,CAAK,CAAA,EAAK,CAAA,CAAIC,CAAAA,CAAAA,CAAKF,CAAAA,CAAM,CAAA,CAAIE,EAAG,CAAC,CAC5C,CAAC,CACH,CAEA,QAAA,CAASJ,EAAkB,MAAA,CAAgB,CACzC,IAAMK,CAAAA,CAAK,IAAA,CAAK,SAAA,GACVC,CAAAA,CAAK,IAAIX,CAAAA,CAAQK,CAAK,CAAA,CAAE,SAAA,GACxBO,CAAAA,CAAU,IAAA,CAAK,GAAA,CAAIF,CAAAA,CAAIC,CAAE,CAAA,CACzBE,EAAS,IAAA,CAAK,GAAA,CAAIH,CAAAA,CAAIC,CAAE,CAAA,CAC9B,OAAOtE,GAAOuE,CAAAA,CAAU,GAAA,GAASC,CAAAA,CAAS,GAAA,CAAA,CAAO,CAAC,CACpD,CAEA,OAAA,CAAQR,CAAAA,CAA0B,CAChC,IAAME,CAAAA,CAAQ,IAAIP,EAAQK,CAAK,CAAA,CAAE,KAAA,EAAM,CACjCG,CAAAA,CAAO,IAAA,CAAK,KAClB,OAAOA,CAAAA,CAAK,CAAA,GAAMD,CAAAA,CAAM,CAAA,EAAKC,CAAAA,CAAK,IAAMD,CAAAA,CAAM,CAAA,EAAKC,CAAAA,CAAK,CAAA,GAAMD,CAAAA,CAAM,CAAA,EAAKC,EAAK,CAAA,GAAMD,CAAAA,CAAM,CAC5F,CAEA,QAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,KAAA,EACd,CACF,CAAA,CCrIA,IAAMO,EAAgBC,CAAAA,EAAgB,CACpCA,CAAAA,CAAY,SAAA,CAAU,UAAA,CAAa,SAEjCC,EAAuB,MAAA,CACvBC,CAAAA,CAA+D,EAAC,CACvD,CACT,GAAM,CAAE,KAAA,CAAAC,CAAAA,CAAQ,IAAA,CAAM,IAAA,CAAAC,CAAAA,CAAO,QAAS,EAAIF,CAAAA,CACpCX,CAAAA,CAAQ,IAAA,CAAK,QAAA,CAASU,CAAU,CAAA,CACtC,OAAIE,CAAAA,GAAU,KAAA,CAAcC,CAAAA,GAAS,OAAA,CAAUb,CAAAA,EAAS,GAAA,CAAMA,GAAS,CAAA,CAChEa,CAAAA,GAAS,OAAA,CAAUb,CAAAA,EAAS,CAAA,CAAIA,CAAAA,EAAS,GAClD,CAAA,CAEAS,CAAAA,CAAY,SAAA,CAAU,WAAA,CAAc,SAAyBC,CAAAA,CAAuB,OAAiB,CACnG,IAAIX,CAAAA,CAAiB,IAAIN,CAAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,CACvCqB,CAAAA,CAAc,IAAIrB,CAAAA,CAAQiB,CAAU,EAAE,SAAA,EAAU,CAChDK,CAAAA,CAAS,IAAA,CAAK,SAAA,EAAU,CAAID,EAElC,IAAA,IAASlC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,GAAA,EACd,EAAAmB,EAAM,QAAA,CAASW,CAAU,CAAA,EAAK,GAAA,CAAA,CADX9B,CAAAA,EAAAA,CAEvBmB,CAAAA,CAAQgB,EAAShB,CAAAA,CAAM,MAAA,CAAO,GAAI,CAAA,CAAIA,CAAAA,CAAM,OAAA,CAAQ,GAAI,CAAA,CAE1D,OAAOA,CACT,EACF,CAAA,CAEOiB,EAAAA,CAAQR","file":"a11y.cjs","sourcesContent":["export const clamp = (n: number, min: number, max: number): number => Math.min(Math.max(n, min), max);\n\nexport const round = (n: number, d = 0): number => Math.round(n * 10 ** d) / 10 ** d;\n\nexport const floor = (n: number, d = 0): number => Math.floor(n * 10 ** d) / 10 ** d;\n\nexport const isNumeric = (n: unknown): n is number => typeof n === 'number' && !Number.isNaN(n) && Number.isFinite(n);\n\nexport const isObject = (v: unknown): v is Record<string, unknown> =>\n typeof v === 'object' && v !== null && !Array.isArray(v);\n\nexport const hasKeys = <T extends string>(obj: Record<string, unknown>, keys: T[]): obj is Record<T, unknown> =>\n keys.every((k) => k in obj);\n","import { clamp, round } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nconst parseHexChannel = (hex: string): number => parseInt(hex.padEnd(2, hex), 16);\n\nexport const parseHex = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const clean = input.trim().replace(/^#/, '');\n if (!/^[0-9a-f]{3,8}$/i.test(clean)) return null;\n\n if (clean.length === 3 || clean.length === 4) {\n const [r, g, b, a = 'f'] = clean.split('');\n return {\n r: parseHexChannel(r!),\n g: parseHexChannel(g!),\n b: parseHexChannel(b!),\n a: round(parseHexChannel(a) / 255, 2),\n };\n }\n\n if (clean.length === 6 || clean.length === 8) {\n return {\n r: parseInt(clean.slice(0, 2), 16),\n g: parseInt(clean.slice(2, 4), 16),\n b: parseInt(clean.slice(4, 6), 16),\n a: clean.length === 8 ? round(parseInt(clean.slice(6, 8), 16) / 255, 2) : 1,\n };\n }\n\n return null;\n};\n\nexport const rgbToHex = ({ r, g, b, a }: RgbColor): string => {\n const toHex = (n: number) => clamp(Math.round(n), 0, 255).toString(16).padStart(2, '0');\n const hex = `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n return a < 1 ? hex + toHex(a * 255) : hex;\n};\n","import { clamp, hasKeys, isNumeric, isObject, round } from '../helpers.js';\nimport type { HslColor, RgbColor } from '../types.js';\n\nexport const clampHsl = (hsl: HslColor): HslColor => ({\n h: ((hsl.h % 360) + 360) % 360,\n s: clamp(hsl.s, 0, 100),\n l: clamp(hsl.l, 0, 100),\n a: clamp(round(hsl.a, 2), 0, 1),\n});\n\nexport const rgbToHsl = ({ r, g, b, a }: RgbColor): HslColor => {\n const rn = r / 255,\n gn = g / 255,\n bn = b / 255;\n const max = Math.max(rn, gn, bn),\n min = Math.min(rn, gn, bn);\n const l = (max + min) / 2;\n let h = 0,\n s = 0;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case rn:\n h = ((gn - bn) / d + (gn < bn ? 6 : 0)) / 6;\n break;\n case gn:\n h = ((bn - rn) / d + 2) / 6;\n break;\n case bn:\n h = ((rn - gn) / d + 4) / 6;\n break;\n }\n }\n\n return clampHsl({ h: round(h * 360, 2), s: round(s * 100, 2), l: round(l * 100, 2), a });\n};\n\nexport const hslToRgb = ({ h, s, l, a }: HslColor): RgbColor => {\n const sn = s / 100,\n ln = l / 100;\n const q = ln < 0.5 ? ln * (1 + sn) : ln + sn - ln * sn;\n const p = 2 * ln - q;\n const hue = h / 360;\n\n const hueToRgb = (t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n return {\n r: round(hueToRgb(hue + 1 / 3) * 255),\n g: round(hueToRgb(hue) * 255),\n b: round(hueToRgb(hue - 1 / 3) * 255),\n a,\n };\n};\n\nexport const parseHslObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['h', 's', 'l'])) return null;\n const { h, s, l, a = 1 } = input;\n if (!isNumeric(h) || !isNumeric(s) || !isNumeric(l) || !isNumeric(a as number)) return null;\n return hslToRgb(clampHsl({ h: h, s: s, l: l, a: a as number }));\n};\n\nexport const parseHslString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const match = input.match(/^hsla?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)%\\s*,\\s*([\\d.]+)%(?:\\s*,\\s*([\\d.]+))?\\s*\\)$/i);\n if (!match) return null;\n return hslToRgb(\n clampHsl({\n h: parseFloat(match[1]!),\n s: parseFloat(match[2]!),\n l: parseFloat(match[3]!),\n a: match[4] !== undefined ? parseFloat(match[4]) : 1,\n })\n );\n};\n","import { clamp, hasKeys, isNumeric, isObject, round } from '../helpers.js';\nimport type { HsvColor, RgbColor } from '../types.js';\n\nexport const clampHsv = (hsv: HsvColor): HsvColor => ({\n h: ((hsv.h % 360) + 360) % 360,\n s: clamp(hsv.s, 0, 100),\n v: clamp(hsv.v, 0, 100),\n a: clamp(round(hsv.a, 2), 0, 1),\n});\n\nexport const rgbToHsv = ({ r, g, b, a }: RgbColor): HsvColor => {\n const rn = r / 255,\n gn = g / 255,\n bn = b / 255;\n const max = Math.max(rn, gn, bn),\n min = Math.min(rn, gn, bn);\n const d = max - min;\n const v = max;\n const s = max === 0 ? 0 : d / max;\n let h = 0;\n\n if (max !== min) {\n switch (max) {\n case rn:\n h = ((gn - bn) / d + (gn < bn ? 6 : 0)) / 6;\n break;\n case gn:\n h = ((bn - rn) / d + 2) / 6;\n break;\n case bn:\n h = ((rn - gn) / d + 4) / 6;\n break;\n }\n }\n\n return clampHsv({ h: round(h * 360, 2), s: round(s * 100, 2), v: round(v * 100, 2), a });\n};\n\nexport const hsvToRgb = ({ h, s, v, a }: HsvColor): RgbColor => {\n const sn = s / 100,\n vn = v / 100;\n const i = Math.floor((h / 60) % 6);\n const f = h / 60 - Math.floor(h / 60);\n const p = vn * (1 - sn);\n const q = vn * (1 - f * sn);\n const t = vn * (1 - (1 - f) * sn);\n\n const [r, g, b] = [\n [vn, t, p, p, q, vn],\n [q, vn, vn, t, p, p],\n [p, p, q, vn, vn, t],\n ].map((channel) => round(channel[i]! * 255));\n\n return { r: r!, g: g!, b: b!, a };\n};\n\nexport const parseHsvObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['h', 's', 'v'])) return null;\n const { h, s, v, a = 1 } = input;\n if (!isNumeric(h) || !isNumeric(s) || !isNumeric(v) || !isNumeric(a as number)) return null;\n return hsvToRgb(clampHsv({ h: h, s: s, v: v, a: a as number }));\n};\n","import { clamp, hasKeys, isNumeric, isObject, round } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nexport const clampRgb = (rgb: RgbColor): RgbColor => ({\n r: clamp(round(rgb.r), 0, 255),\n g: clamp(round(rgb.g), 0, 255),\n b: clamp(round(rgb.b), 0, 255),\n a: clamp(round(rgb.a, 2), 0, 1),\n});\n\nexport const parseRgbObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['r', 'g', 'b'])) return null;\n const { r, g, b, a = 1 } = input;\n if (!isNumeric(r) || !isNumeric(g) || !isNumeric(b) || !isNumeric(a as number)) return null;\n return clampRgb({ r: r, g: g, b: b, a: a as number });\n};\n\nexport const parseRgbString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const match = input.match(\n /^rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)(?:\\s*,\\s*([\\d.]+))?\\s*\\)$/i\n );\n if (!match) return null;\n return clampRgb({\n r: parseFloat(match[1]!),\n g: parseFloat(match[2]!),\n b: parseFloat(match[3]!),\n a: match[4] !== undefined ? parseFloat(match[4]) : 1,\n });\n};\n","import { parseHex } from './colorModels/hex.js';\nimport { parseHslObject, parseHslString } from './colorModels/hsl.js';\nimport { parseHsvObject } from './colorModels/hsv.js';\nimport { parseRgbObject, parseRgbString } from './colorModels/rgb.js';\nimport type { AnyColor, ColorParser, RgbColor } from './types.js';\n\nexport const defaultParsers: ColorParser[] = [\n parseHex,\n parseRgbString,\n parseHslString,\n parseRgbObject,\n parseHslObject,\n parseHsvObject,\n];\n\nexport const parsers: ColorParser[] = [...defaultParsers];\n\nexport const parse = (input: AnyColor): RgbColor | null => {\n for (const parser of parsers) {\n const result = parser(input);\n if (result) return result;\n }\n return null;\n};\n","import { rgbToHex } from './colorModels/hex.js';\nimport { hslToRgb, rgbToHsl } from './colorModels/hsl.js';\nimport { rgbToHsv } from './colorModels/hsv.js';\nimport { clamp, round } from './helpers.js';\nimport { parse, parsers } from './parse.js';\nimport type { AnyColor, ColorParser, HslColor, HsvColor, RgbColor } from './types.js';\n\nexport class Colordx {\n private readonly _rgb: RgbColor;\n\n constructor(input: AnyColor) {\n this._rgb = parse(input) ?? { r: 0, g: 0, b: 0, a: 1 };\n }\n\n isValid(): boolean {\n return parse(this._rgb) !== null;\n }\n\n // Converters\n toRgb(): RgbColor {\n return { ...this._rgb };\n }\n\n toRgbString(): string {\n const { r, g, b, a } = this._rgb;\n return a < 1 ? `rgba(${r}, ${g}, ${b}, ${a})` : `rgb(${r}, ${g}, ${b})`;\n }\n\n toHex(): string {\n return rgbToHex(this._rgb);\n }\n\n toHsl(): HslColor {\n return rgbToHsl(this._rgb);\n }\n\n toHslString(): string {\n const { h, s, l, a } = this.toHsl();\n return a < 1 ? `hsla(${h}, ${s}%, ${l}%, ${a})` : `hsl(${h}, ${s}%, ${l}%)`;\n }\n\n toHsv(): HsvColor {\n return rgbToHsv(this._rgb);\n }\n\n // Getters\n brightness(): number {\n const { r, g, b } = this._rgb;\n return round((r * 299 + g * 587 + b * 114) / 255000, 2);\n }\n\n luminance(): number {\n const toLinear = (c: number) => {\n const n = c / 255;\n return n <= 0.03928 ? n / 12.92 : ((n + 0.055) / 1.055) ** 2.4;\n };\n const { r, g, b } = this._rgb;\n return round(0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b), 4);\n }\n\n isDark(): boolean {\n return this.brightness() < 0.5;\n }\n\n isLight(): boolean {\n return this.brightness() >= 0.5;\n }\n\n alpha(): number;\n alpha(value: number): Colordx;\n alpha(value?: number): number | Colordx {\n if (value === undefined) return this._rgb.a;\n return new Colordx({ ...this._rgb, a: clamp(value, 0, 1) });\n }\n\n hue(): number;\n hue(value: number): Colordx;\n hue(value?: number): number | Colordx {\n const hsl = this.toHsl();\n if (value === undefined) return hsl.h;\n return new Colordx(hslToRgb({ ...hsl, h: value }));\n }\n\n // Manipulators\n lighten(amount = 0.1): Colordx {\n const hsl = this.toHsl();\n return new Colordx(hslToRgb({ ...hsl, l: clamp(hsl.l + amount * 100, 0, 100) }));\n }\n\n darken(amount = 0.1): Colordx {\n return this.lighten(-amount);\n }\n\n saturate(amount = 0.1): Colordx {\n const hsl = this.toHsl();\n return new Colordx(hslToRgb({ ...hsl, s: clamp(hsl.s + amount * 100, 0, 100) }));\n }\n\n desaturate(amount = 0.1): Colordx {\n return this.saturate(-amount);\n }\n\n grayscale(): Colordx {\n return this.desaturate(1);\n }\n\n invert(): Colordx {\n const { r, g, b, a } = this._rgb;\n return new Colordx({ r: 255 - r, g: 255 - g, b: 255 - b, a });\n }\n\n rotate(amount = 15): Colordx {\n return this.hue(this.hue() + amount);\n }\n\n mix(color: AnyColor, ratio = 0.5): Colordx {\n const other = new Colordx(color).toRgb();\n const self = this._rgb;\n const w = clamp(ratio, 0, 1);\n return new Colordx({\n r: round(self.r * (1 - w) + other.r * w),\n g: round(self.g * (1 - w) + other.g * w),\n b: round(self.b * (1 - w) + other.b * w),\n a: round(self.a * (1 - w) + other.a * w, 2),\n });\n }\n\n contrast(color: AnyColor = '#fff'): number {\n const l1 = this.luminance();\n const l2 = new Colordx(color).luminance();\n const lighter = Math.max(l1, l2);\n const darker = Math.min(l1, l2);\n return round((lighter + 0.05) / (darker + 0.05), 2);\n }\n\n isEqual(color: AnyColor): boolean {\n const other = new Colordx(color).toRgb();\n const self = this._rgb;\n return self.r === other.r && self.g === other.g && self.b === other.b && self.a === other.a;\n }\n\n toString(): string {\n return this.toHex();\n }\n}\n\nexport type Plugin = (ColordxClass: typeof Colordx, parsers: ColorParser[]) => void;\n\nexport const colordx = (input: AnyColor): Colordx => new Colordx(input);\n\nexport const extend = (plugins: Plugin[]): void => {\n plugins.forEach((plugin) => plugin(Colordx, parsers));\n};\n\nexport const random = (): Colordx =>\n new Colordx({\n r: Math.round(Math.random() * 255),\n g: Math.round(Math.random() * 255),\n b: Math.round(Math.random() * 255),\n a: 1,\n });\n","import type { Plugin } from '../colordx.js';\nimport { Colordx } from '../colordx.js';\nimport type { AnyColor } from '../types.js';\n\ndeclare module '../colordx.js' {\n interface Colordx {\n isReadable(background?: AnyColor, options?: { level?: 'AA' | 'AAA'; size?: 'normal' | 'large' }): boolean;\n minReadable(background?: AnyColor): Colordx;\n }\n}\n\nconst a11y: Plugin = (ColordClass) => {\n ColordClass.prototype.isReadable = function (\n this: Colordx,\n background: AnyColor = '#fff',\n options: { level?: 'AA' | 'AAA'; size?: 'normal' | 'large' } = {}\n ): boolean {\n const { level = 'AA', size = 'normal' } = options;\n const ratio = this.contrast(background);\n if (level === 'AAA') return size === 'large' ? ratio >= 4.5 : ratio >= 7;\n return size === 'large' ? ratio >= 3 : ratio >= 4.5;\n };\n\n ColordClass.prototype.minReadable = function (this: Colordx, background: AnyColor = '#fff'): Colordx {\n let color: Colordx = new Colordx(this.toRgb());\n const bgLuminance = new Colordx(background).luminance();\n const darken = this.luminance() > bgLuminance;\n\n for (let i = 0; i < 100; i++) {\n if (color.contrast(background) >= 4.5) break;\n color = darken ? color.darken(0.01) : color.lighten(0.01);\n }\n return color;\n };\n};\n\nexport default a11y;\n"]}
@@ -0,0 +1,14 @@
1
+ import { AnyColor, Plugin } from '../index.cjs';
2
+
3
+ declare module '../colordx.js' {
4
+ interface Colordx {
5
+ isReadable(background?: AnyColor, options?: {
6
+ level?: 'AA' | 'AAA';
7
+ size?: 'normal' | 'large';
8
+ }): boolean;
9
+ minReadable(background?: AnyColor): Colordx;
10
+ }
11
+ }
12
+ declare const a11y: Plugin;
13
+
14
+ export { a11y as default };
@@ -0,0 +1,14 @@
1
+ import { AnyColor, Plugin } from '../index.js';
2
+
3
+ declare module '../colordx.js' {
4
+ interface Colordx {
5
+ isReadable(background?: AnyColor, options?: {
6
+ level?: 'AA' | 'AAA';
7
+ size?: 'normal' | 'large';
8
+ }): boolean;
9
+ minReadable(background?: AnyColor): Colordx;
10
+ }
11
+ }
12
+ declare const a11y: Plugin;
13
+
14
+ export { a11y as default };
@@ -0,0 +1,2 @@
1
+ var c=(o,r,t)=>Math.min(Math.max(o,r),t),l=(o,r=0)=>Math.round(o*10**r)/10**r;var m=o=>typeof o=="number"&&!Number.isNaN(o)&&Number.isFinite(o),f=o=>typeof o=="object"&&o!==null&&!Array.isArray(o),d=(o,r)=>r.every(t=>t in o);var y=o=>parseInt(o.padEnd(2,o),16),A=o=>{if(typeof o!="string")return null;let r=o.trim().replace(/^#/,"");if(!/^[0-9a-f]{3,8}$/i.test(r))return null;if(r.length===3||r.length===4){let[t,s,n,e="f"]=r.split("");return {r:y(t),g:y(s),b:y(n),a:l(y(e)/255,2)}}return r.length===6||r.length===8?{r:parseInt(r.slice(0,2),16),g:parseInt(r.slice(2,4),16),b:parseInt(r.slice(4,6),16),a:r.length===8?l(parseInt(r.slice(6,8),16)/255,2):1}:null},w=({r:o,g:r,b:t,a:s})=>{let n=a=>c(Math.round(a),0,255).toString(16).padStart(2,"0"),e=`#${n(o)}${n(r)}${n(t)}`;return s<1?e+n(s*255):e};var R=o=>({h:(o.h%360+360)%360,s:c(o.s,0,100),l:c(o.l,0,100),a:c(l(o.a,2),0,1)}),v=({r:o,g:r,b:t,a:s})=>{let n=o/255,e=r/255,a=t/255,i=Math.max(n,e,a),b=Math.min(n,e,a),g=(i+b)/2,u=0,h=0;if(i!==b){let p=i-b;switch(h=g>.5?p/(2-i-b):p/(i+b),i){case n:u=((e-a)/p+(e<a?6:0))/6;break;case e:u=((a-n)/p+2)/6;break;case a:u=((n-e)/p+4)/6;break}}return R({h:l(u*360,2),s:l(h*100,2),l:l(g*100,2),a:s})},C=({h:o,s:r,l:t,a:s})=>{let n=r/100,e=t/100,a=e<.5?e*(1+n):e+n-e*n,i=2*e-a,b=o/360,g=u=>(u<0&&(u+=1),u>1&&(u-=1),u<1/6?i+(a-i)*6*u:u<1/2?a:u<2/3?i+(a-i)*(2/3-u)*6:i);return {r:l(g(b+1/3)*255),g:l(g(b)*255),b:l(g(b-1/3)*255),a:s}},k=o=>{if(!f(o)||!d(o,["h","s","l"]))return null;let{h:r,s:t,l:s,a:n=1}=o;return !m(r)||!m(t)||!m(s)||!m(n)?null:C(R({h:r,s:t,l:s,a:n}))},j=o=>{if(typeof o!="string")return null;let r=o.match(/^hsla?\(\s*([\d.]+)\s*,\s*([\d.]+)%\s*,\s*([\d.]+)%(?:\s*,\s*([\d.]+))?\s*\)$/i);return r?C(R({h:parseFloat(r[1]),s:parseFloat(r[2]),l:parseFloat(r[3]),a:r[4]!==void 0?parseFloat(r[4]):1})):null};var $=o=>({h:(o.h%360+360)%360,s:c(o.s,0,100),v:c(o.v,0,100),a:c(l(o.a,2),0,1)}),M=({r:o,g:r,b:t,a:s})=>{let n=o/255,e=r/255,a=t/255,i=Math.max(n,e,a),b=Math.min(n,e,a),g=i-b,u=i,h=i===0?0:g/i,p=0;if(i!==b)switch(i){case n:p=((e-a)/g+(e<a?6:0))/6;break;case e:p=((a-n)/g+2)/6;break;case a:p=((n-e)/g+4)/6;break}return $({h:l(p*360,2),s:l(h*100,2),v:l(u*100,2),a:s})},I=({h:o,s:r,v:t,a:s})=>{let n=r/100,e=t/100,a=Math.floor(o/60%6),i=o/60-Math.floor(o/60),b=e*(1-n),g=e*(1-i*n),u=e*(1-(1-i)*n),[h,p,N]=[[e,u,b,b,g,e],[g,e,e,u,b,b],[b,b,g,e,e,u]].map(_=>l(_[a]*255));return {r:h,g:p,b:N,a:s}},T=o=>{if(!f(o)||!d(o,["h","s","v"]))return null;let{h:r,s:t,v:s,a:n=1}=o;return !m(r)||!m(t)||!m(s)||!m(n)?null:I($({h:r,s:t,v:s,a:n}))};var O=o=>({r:c(l(o.r),0,255),g:c(l(o.g),0,255),b:c(l(o.b),0,255),a:c(l(o.a,2),0,1)}),P=o=>{if(!f(o)||!d(o,["r","g","b"]))return null;let{r,g:t,b:s,a:n=1}=o;return !m(r)||!m(t)||!m(s)||!m(n)?null:O({r,g:t,b:s,a:n})},F=o=>{if(typeof o!="string")return null;let r=o.match(/^rgba?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)(?:\s*,\s*([\d.]+))?\s*\)$/i);return r?O({r:parseFloat(r[1]),g:parseFloat(r[2]),b:parseFloat(r[3]),a:r[4]!==void 0?parseFloat(r[4]):1}):null};var K=[A,F,j,P,k,T],S=[...K],H=o=>{for(let r of S){let t=r(o);if(t)return t}return null};var x=class o{_rgb;constructor(r){this._rgb=H(r)??{r:0,g:0,b:0,a:1};}isValid(){return H(this._rgb)!==null}toRgb(){return {...this._rgb}}toRgbString(){let{r,g:t,b:s,a:n}=this._rgb;return n<1?`rgba(${r}, ${t}, ${s}, ${n})`:`rgb(${r}, ${t}, ${s})`}toHex(){return w(this._rgb)}toHsl(){return v(this._rgb)}toHslString(){let{h:r,s:t,l:s,a:n}=this.toHsl();return n<1?`hsla(${r}, ${t}%, ${s}%, ${n})`:`hsl(${r}, ${t}%, ${s}%)`}toHsv(){return M(this._rgb)}brightness(){let{r,g:t,b:s}=this._rgb;return l((r*299+t*587+s*114)/255e3,2)}luminance(){let r=e=>{let a=e/255;return a<=.03928?a/12.92:((a+.055)/1.055)**2.4},{r:t,g:s,b:n}=this._rgb;return l(.2126*r(t)+.7152*r(s)+.0722*r(n),4)}isDark(){return this.brightness()<.5}isLight(){return this.brightness()>=.5}alpha(r){return r===void 0?this._rgb.a:new o({...this._rgb,a:c(r,0,1)})}hue(r){let t=this.toHsl();return r===void 0?t.h:new o(C({...t,h:r}))}lighten(r=.1){let t=this.toHsl();return new o(C({...t,l:c(t.l+r*100,0,100)}))}darken(r=.1){return this.lighten(-r)}saturate(r=.1){let t=this.toHsl();return new o(C({...t,s:c(t.s+r*100,0,100)}))}desaturate(r=.1){return this.saturate(-r)}grayscale(){return this.desaturate(1)}invert(){let{r,g:t,b:s,a:n}=this._rgb;return new o({r:255-r,g:255-t,b:255-s,a:n})}rotate(r=15){return this.hue(this.hue()+r)}mix(r,t=.5){let s=new o(r).toRgb(),n=this._rgb,e=c(t,0,1);return new o({r:l(n.r*(1-e)+s.r*e),g:l(n.g*(1-e)+s.g*e),b:l(n.b*(1-e)+s.b*e),a:l(n.a*(1-e)+s.a*e,2)})}contrast(r="#fff"){let t=this.luminance(),s=new o(r).luminance(),n=Math.max(t,s),e=Math.min(t,s);return l((n+.05)/(e+.05),2)}isEqual(r){let t=new o(r).toRgb(),s=this._rgb;return s.r===t.r&&s.g===t.g&&s.b===t.b&&s.a===t.a}toString(){return this.toHex()}};var q=o=>{o.prototype.isReadable=function(r="#fff",t={}){let{level:s="AA",size:n="normal"}=t,e=this.contrast(r);return s==="AAA"?n==="large"?e>=4.5:e>=7:n==="large"?e>=3:e>=4.5},o.prototype.minReadable=function(r="#fff"){let t=new x(this.toRgb()),s=new x(r).luminance(),n=this.luminance()>s;for(let e=0;e<100&&!(t.contrast(r)>=4.5);e++)t=n?t.darken(.01):t.lighten(.01);return t};},ar=q;export{ar as default};//# sourceMappingURL=a11y.mjs.map
2
+ //# sourceMappingURL=a11y.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/helpers.ts","../../src/colorModels/hex.ts","../../src/colorModels/hsl.ts","../../src/colorModels/hsv.ts","../../src/colorModels/rgb.ts","../../src/parse.ts","../../src/colordx.ts","../../src/plugins/a11y.ts"],"names":["clamp","n","min","max","round","d","isNumeric","isObject","v","hasKeys","obj","keys","k","parseHexChannel","hex","parseHex","input","clean","r","g","b","a","rgbToHex","toHex","clampHsl","hsl","rgbToHsl","rn","gn","bn","l","h","s","hslToRgb","sn","ln","q","p","hue","hueToRgb","t","parseHslObject","parseHslString","match","clampHsv","hsv","rgbToHsv","hsvToRgb","vn","i","f","channel","parseHsvObject","clampRgb","rgb","parseRgbObject","parseRgbString","defaultParsers","parsers","parse","parser","result","Colordx","_Colordx","toLinear","c","value","amount","color","ratio","other","self","w","l1","l2","lighter","darker","a11y","ColordClass","background","options","level","size","bgLuminance","darken","a11y_default"],"mappings":"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","file":"a11y.mjs","sourcesContent":["export const clamp = (n: number, min: number, max: number): number => Math.min(Math.max(n, min), max);\n\nexport const round = (n: number, d = 0): number => Math.round(n * 10 ** d) / 10 ** d;\n\nexport const floor = (n: number, d = 0): number => Math.floor(n * 10 ** d) / 10 ** d;\n\nexport const isNumeric = (n: unknown): n is number => typeof n === 'number' && !Number.isNaN(n) && Number.isFinite(n);\n\nexport const isObject = (v: unknown): v is Record<string, unknown> =>\n typeof v === 'object' && v !== null && !Array.isArray(v);\n\nexport const hasKeys = <T extends string>(obj: Record<string, unknown>, keys: T[]): obj is Record<T, unknown> =>\n keys.every((k) => k in obj);\n","import { clamp, round } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nconst parseHexChannel = (hex: string): number => parseInt(hex.padEnd(2, hex), 16);\n\nexport const parseHex = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const clean = input.trim().replace(/^#/, '');\n if (!/^[0-9a-f]{3,8}$/i.test(clean)) return null;\n\n if (clean.length === 3 || clean.length === 4) {\n const [r, g, b, a = 'f'] = clean.split('');\n return {\n r: parseHexChannel(r!),\n g: parseHexChannel(g!),\n b: parseHexChannel(b!),\n a: round(parseHexChannel(a) / 255, 2),\n };\n }\n\n if (clean.length === 6 || clean.length === 8) {\n return {\n r: parseInt(clean.slice(0, 2), 16),\n g: parseInt(clean.slice(2, 4), 16),\n b: parseInt(clean.slice(4, 6), 16),\n a: clean.length === 8 ? round(parseInt(clean.slice(6, 8), 16) / 255, 2) : 1,\n };\n }\n\n return null;\n};\n\nexport const rgbToHex = ({ r, g, b, a }: RgbColor): string => {\n const toHex = (n: number) => clamp(Math.round(n), 0, 255).toString(16).padStart(2, '0');\n const hex = `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n return a < 1 ? hex + toHex(a * 255) : hex;\n};\n","import { clamp, hasKeys, isNumeric, isObject, round } from '../helpers.js';\nimport type { HslColor, RgbColor } from '../types.js';\n\nexport const clampHsl = (hsl: HslColor): HslColor => ({\n h: ((hsl.h % 360) + 360) % 360,\n s: clamp(hsl.s, 0, 100),\n l: clamp(hsl.l, 0, 100),\n a: clamp(round(hsl.a, 2), 0, 1),\n});\n\nexport const rgbToHsl = ({ r, g, b, a }: RgbColor): HslColor => {\n const rn = r / 255,\n gn = g / 255,\n bn = b / 255;\n const max = Math.max(rn, gn, bn),\n min = Math.min(rn, gn, bn);\n const l = (max + min) / 2;\n let h = 0,\n s = 0;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case rn:\n h = ((gn - bn) / d + (gn < bn ? 6 : 0)) / 6;\n break;\n case gn:\n h = ((bn - rn) / d + 2) / 6;\n break;\n case bn:\n h = ((rn - gn) / d + 4) / 6;\n break;\n }\n }\n\n return clampHsl({ h: round(h * 360, 2), s: round(s * 100, 2), l: round(l * 100, 2), a });\n};\n\nexport const hslToRgb = ({ h, s, l, a }: HslColor): RgbColor => {\n const sn = s / 100,\n ln = l / 100;\n const q = ln < 0.5 ? ln * (1 + sn) : ln + sn - ln * sn;\n const p = 2 * ln - q;\n const hue = h / 360;\n\n const hueToRgb = (t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n return {\n r: round(hueToRgb(hue + 1 / 3) * 255),\n g: round(hueToRgb(hue) * 255),\n b: round(hueToRgb(hue - 1 / 3) * 255),\n a,\n };\n};\n\nexport const parseHslObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['h', 's', 'l'])) return null;\n const { h, s, l, a = 1 } = input;\n if (!isNumeric(h) || !isNumeric(s) || !isNumeric(l) || !isNumeric(a as number)) return null;\n return hslToRgb(clampHsl({ h: h, s: s, l: l, a: a as number }));\n};\n\nexport const parseHslString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const match = input.match(/^hsla?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)%\\s*,\\s*([\\d.]+)%(?:\\s*,\\s*([\\d.]+))?\\s*\\)$/i);\n if (!match) return null;\n return hslToRgb(\n clampHsl({\n h: parseFloat(match[1]!),\n s: parseFloat(match[2]!),\n l: parseFloat(match[3]!),\n a: match[4] !== undefined ? parseFloat(match[4]) : 1,\n })\n );\n};\n","import { clamp, hasKeys, isNumeric, isObject, round } from '../helpers.js';\nimport type { HsvColor, RgbColor } from '../types.js';\n\nexport const clampHsv = (hsv: HsvColor): HsvColor => ({\n h: ((hsv.h % 360) + 360) % 360,\n s: clamp(hsv.s, 0, 100),\n v: clamp(hsv.v, 0, 100),\n a: clamp(round(hsv.a, 2), 0, 1),\n});\n\nexport const rgbToHsv = ({ r, g, b, a }: RgbColor): HsvColor => {\n const rn = r / 255,\n gn = g / 255,\n bn = b / 255;\n const max = Math.max(rn, gn, bn),\n min = Math.min(rn, gn, bn);\n const d = max - min;\n const v = max;\n const s = max === 0 ? 0 : d / max;\n let h = 0;\n\n if (max !== min) {\n switch (max) {\n case rn:\n h = ((gn - bn) / d + (gn < bn ? 6 : 0)) / 6;\n break;\n case gn:\n h = ((bn - rn) / d + 2) / 6;\n break;\n case bn:\n h = ((rn - gn) / d + 4) / 6;\n break;\n }\n }\n\n return clampHsv({ h: round(h * 360, 2), s: round(s * 100, 2), v: round(v * 100, 2), a });\n};\n\nexport const hsvToRgb = ({ h, s, v, a }: HsvColor): RgbColor => {\n const sn = s / 100,\n vn = v / 100;\n const i = Math.floor((h / 60) % 6);\n const f = h / 60 - Math.floor(h / 60);\n const p = vn * (1 - sn);\n const q = vn * (1 - f * sn);\n const t = vn * (1 - (1 - f) * sn);\n\n const [r, g, b] = [\n [vn, t, p, p, q, vn],\n [q, vn, vn, t, p, p],\n [p, p, q, vn, vn, t],\n ].map((channel) => round(channel[i]! * 255));\n\n return { r: r!, g: g!, b: b!, a };\n};\n\nexport const parseHsvObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['h', 's', 'v'])) return null;\n const { h, s, v, a = 1 } = input;\n if (!isNumeric(h) || !isNumeric(s) || !isNumeric(v) || !isNumeric(a as number)) return null;\n return hsvToRgb(clampHsv({ h: h, s: s, v: v, a: a as number }));\n};\n","import { clamp, hasKeys, isNumeric, isObject, round } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nexport const clampRgb = (rgb: RgbColor): RgbColor => ({\n r: clamp(round(rgb.r), 0, 255),\n g: clamp(round(rgb.g), 0, 255),\n b: clamp(round(rgb.b), 0, 255),\n a: clamp(round(rgb.a, 2), 0, 1),\n});\n\nexport const parseRgbObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['r', 'g', 'b'])) return null;\n const { r, g, b, a = 1 } = input;\n if (!isNumeric(r) || !isNumeric(g) || !isNumeric(b) || !isNumeric(a as number)) return null;\n return clampRgb({ r: r, g: g, b: b, a: a as number });\n};\n\nexport const parseRgbString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const match = input.match(\n /^rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)(?:\\s*,\\s*([\\d.]+))?\\s*\\)$/i\n );\n if (!match) return null;\n return clampRgb({\n r: parseFloat(match[1]!),\n g: parseFloat(match[2]!),\n b: parseFloat(match[3]!),\n a: match[4] !== undefined ? parseFloat(match[4]) : 1,\n });\n};\n","import { parseHex } from './colorModels/hex.js';\nimport { parseHslObject, parseHslString } from './colorModels/hsl.js';\nimport { parseHsvObject } from './colorModels/hsv.js';\nimport { parseRgbObject, parseRgbString } from './colorModels/rgb.js';\nimport type { AnyColor, ColorParser, RgbColor } from './types.js';\n\nexport const defaultParsers: ColorParser[] = [\n parseHex,\n parseRgbString,\n parseHslString,\n parseRgbObject,\n parseHslObject,\n parseHsvObject,\n];\n\nexport const parsers: ColorParser[] = [...defaultParsers];\n\nexport const parse = (input: AnyColor): RgbColor | null => {\n for (const parser of parsers) {\n const result = parser(input);\n if (result) return result;\n }\n return null;\n};\n","import { rgbToHex } from './colorModels/hex.js';\nimport { hslToRgb, rgbToHsl } from './colorModels/hsl.js';\nimport { rgbToHsv } from './colorModels/hsv.js';\nimport { clamp, round } from './helpers.js';\nimport { parse, parsers } from './parse.js';\nimport type { AnyColor, ColorParser, HslColor, HsvColor, RgbColor } from './types.js';\n\nexport class Colordx {\n private readonly _rgb: RgbColor;\n\n constructor(input: AnyColor) {\n this._rgb = parse(input) ?? { r: 0, g: 0, b: 0, a: 1 };\n }\n\n isValid(): boolean {\n return parse(this._rgb) !== null;\n }\n\n // Converters\n toRgb(): RgbColor {\n return { ...this._rgb };\n }\n\n toRgbString(): string {\n const { r, g, b, a } = this._rgb;\n return a < 1 ? `rgba(${r}, ${g}, ${b}, ${a})` : `rgb(${r}, ${g}, ${b})`;\n }\n\n toHex(): string {\n return rgbToHex(this._rgb);\n }\n\n toHsl(): HslColor {\n return rgbToHsl(this._rgb);\n }\n\n toHslString(): string {\n const { h, s, l, a } = this.toHsl();\n return a < 1 ? `hsla(${h}, ${s}%, ${l}%, ${a})` : `hsl(${h}, ${s}%, ${l}%)`;\n }\n\n toHsv(): HsvColor {\n return rgbToHsv(this._rgb);\n }\n\n // Getters\n brightness(): number {\n const { r, g, b } = this._rgb;\n return round((r * 299 + g * 587 + b * 114) / 255000, 2);\n }\n\n luminance(): number {\n const toLinear = (c: number) => {\n const n = c / 255;\n return n <= 0.03928 ? n / 12.92 : ((n + 0.055) / 1.055) ** 2.4;\n };\n const { r, g, b } = this._rgb;\n return round(0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b), 4);\n }\n\n isDark(): boolean {\n return this.brightness() < 0.5;\n }\n\n isLight(): boolean {\n return this.brightness() >= 0.5;\n }\n\n alpha(): number;\n alpha(value: number): Colordx;\n alpha(value?: number): number | Colordx {\n if (value === undefined) return this._rgb.a;\n return new Colordx({ ...this._rgb, a: clamp(value, 0, 1) });\n }\n\n hue(): number;\n hue(value: number): Colordx;\n hue(value?: number): number | Colordx {\n const hsl = this.toHsl();\n if (value === undefined) return hsl.h;\n return new Colordx(hslToRgb({ ...hsl, h: value }));\n }\n\n // Manipulators\n lighten(amount = 0.1): Colordx {\n const hsl = this.toHsl();\n return new Colordx(hslToRgb({ ...hsl, l: clamp(hsl.l + amount * 100, 0, 100) }));\n }\n\n darken(amount = 0.1): Colordx {\n return this.lighten(-amount);\n }\n\n saturate(amount = 0.1): Colordx {\n const hsl = this.toHsl();\n return new Colordx(hslToRgb({ ...hsl, s: clamp(hsl.s + amount * 100, 0, 100) }));\n }\n\n desaturate(amount = 0.1): Colordx {\n return this.saturate(-amount);\n }\n\n grayscale(): Colordx {\n return this.desaturate(1);\n }\n\n invert(): Colordx {\n const { r, g, b, a } = this._rgb;\n return new Colordx({ r: 255 - r, g: 255 - g, b: 255 - b, a });\n }\n\n rotate(amount = 15): Colordx {\n return this.hue(this.hue() + amount);\n }\n\n mix(color: AnyColor, ratio = 0.5): Colordx {\n const other = new Colordx(color).toRgb();\n const self = this._rgb;\n const w = clamp(ratio, 0, 1);\n return new Colordx({\n r: round(self.r * (1 - w) + other.r * w),\n g: round(self.g * (1 - w) + other.g * w),\n b: round(self.b * (1 - w) + other.b * w),\n a: round(self.a * (1 - w) + other.a * w, 2),\n });\n }\n\n contrast(color: AnyColor = '#fff'): number {\n const l1 = this.luminance();\n const l2 = new Colordx(color).luminance();\n const lighter = Math.max(l1, l2);\n const darker = Math.min(l1, l2);\n return round((lighter + 0.05) / (darker + 0.05), 2);\n }\n\n isEqual(color: AnyColor): boolean {\n const other = new Colordx(color).toRgb();\n const self = this._rgb;\n return self.r === other.r && self.g === other.g && self.b === other.b && self.a === other.a;\n }\n\n toString(): string {\n return this.toHex();\n }\n}\n\nexport type Plugin = (ColordxClass: typeof Colordx, parsers: ColorParser[]) => void;\n\nexport const colordx = (input: AnyColor): Colordx => new Colordx(input);\n\nexport const extend = (plugins: Plugin[]): void => {\n plugins.forEach((plugin) => plugin(Colordx, parsers));\n};\n\nexport const random = (): Colordx =>\n new Colordx({\n r: Math.round(Math.random() * 255),\n g: Math.round(Math.random() * 255),\n b: Math.round(Math.random() * 255),\n a: 1,\n });\n","import type { Plugin } from '../colordx.js';\nimport { Colordx } from '../colordx.js';\nimport type { AnyColor } from '../types.js';\n\ndeclare module '../colordx.js' {\n interface Colordx {\n isReadable(background?: AnyColor, options?: { level?: 'AA' | 'AAA'; size?: 'normal' | 'large' }): boolean;\n minReadable(background?: AnyColor): Colordx;\n }\n}\n\nconst a11y: Plugin = (ColordClass) => {\n ColordClass.prototype.isReadable = function (\n this: Colordx,\n background: AnyColor = '#fff',\n options: { level?: 'AA' | 'AAA'; size?: 'normal' | 'large' } = {}\n ): boolean {\n const { level = 'AA', size = 'normal' } = options;\n const ratio = this.contrast(background);\n if (level === 'AAA') return size === 'large' ? ratio >= 4.5 : ratio >= 7;\n return size === 'large' ? ratio >= 3 : ratio >= 4.5;\n };\n\n ColordClass.prototype.minReadable = function (this: Colordx, background: AnyColor = '#fff'): Colordx {\n let color: Colordx = new Colordx(this.toRgb());\n const bgLuminance = new Colordx(background).luminance();\n const darken = this.luminance() > bgLuminance;\n\n for (let i = 0; i < 100; i++) {\n if (color.contrast(background) >= 4.5) break;\n color = darken ? color.darken(0.01) : color.lighten(0.01);\n }\n return color;\n };\n};\n\nexport default a11y;\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var e=t=>{t.prototype.harmonies=function(r="complementary"){switch(r){case "complementary":return [this,this.rotate(180)];case "analogous":return [this.rotate(-30),this,this.rotate(30)];case "triadic":return [this,this.rotate(120),this.rotate(240)];case "tetradic":return [this,this.rotate(90),this.rotate(180),this.rotate(270)];case "split-complementary":return [this,this.rotate(150),this.rotate(210)];default:return [this]}};},o=e;module.exports=o;//# sourceMappingURL=harmonies.cjs.map
2
+ //# sourceMappingURL=harmonies.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/plugins/harmonies.ts"],"names":["harmonies","ColordClass","type","harmonies_default"],"mappings":"aASA,IAAMA,EAAqBC,CAAAA,EAAgB,CACzCA,EAAY,SAAA,CAAU,SAAA,CAAY,SAEhCC,CAAAA,CAAuF,eAAA,CAC5E,CACX,OAAQA,CAAAA,EACN,KAAK,eAAA,CACH,OAAO,CAAC,IAAA,CAAM,KAAK,MAAA,CAAO,GAAG,CAAC,CAAA,CAChC,KAAK,YACH,OAAO,CAAC,KAAK,MAAA,CAAO,GAAG,EAAG,IAAA,CAAM,IAAA,CAAK,OAAO,EAAE,CAAC,EACjD,KAAK,SAAA,CACH,OAAO,CAAC,IAAA,CAAM,KAAK,MAAA,CAAO,GAAG,EAAG,IAAA,CAAK,MAAA,CAAO,GAAG,CAAC,CAAA,CAClD,KAAK,UAAA,CACH,OAAO,CAAC,IAAA,CAAM,IAAA,CAAK,OAAO,EAAE,CAAA,CAAG,KAAK,MAAA,CAAO,GAAG,EAAG,IAAA,CAAK,MAAA,CAAO,GAAG,CAAC,CAAA,CACnE,KAAK,qBAAA,CACH,OAAO,CAAC,IAAA,CAAM,IAAA,CAAK,OAAO,GAAG,CAAA,CAAG,KAAK,MAAA,CAAO,GAAG,CAAC,CAAA,CAClD,QACE,OAAO,CAAC,IAAI,CAChB,CACF,EACF,EAEOC,CAAAA,CAAQH","file":"harmonies.cjs","sourcesContent":["import type { Plugin } from '../colordx.js';\nimport { Colordx } from '../colordx.js';\n\ndeclare module '../colordx.js' {\n interface Colordx {\n harmonies(type?: 'complementary' | 'analogous' | 'triadic' | 'tetradic' | 'split-complementary'): Colordx[];\n }\n}\n\nconst harmonies: Plugin = (ColordClass) => {\n ColordClass.prototype.harmonies = function (\n this: Colordx,\n type: 'complementary' | 'analogous' | 'triadic' | 'tetradic' | 'split-complementary' = 'complementary'\n ): Colordx[] {\n switch (type) {\n case 'complementary':\n return [this, this.rotate(180)];\n case 'analogous':\n return [this.rotate(-30), this, this.rotate(30)];\n case 'triadic':\n return [this, this.rotate(120), this.rotate(240)];\n case 'tetradic':\n return [this, this.rotate(90), this.rotate(180), this.rotate(270)];\n case 'split-complementary':\n return [this, this.rotate(150), this.rotate(210)];\n default:\n return [this];\n }\n };\n};\n\nexport default harmonies;\n"]}
@@ -0,0 +1,10 @@
1
+ import { Plugin } from '../index.cjs';
2
+
3
+ declare module '../colordx.js' {
4
+ interface Colordx {
5
+ harmonies(type?: 'complementary' | 'analogous' | 'triadic' | 'tetradic' | 'split-complementary'): Colordx[];
6
+ }
7
+ }
8
+ declare const harmonies: Plugin;
9
+
10
+ export { harmonies as default };
@@ -0,0 +1,10 @@
1
+ import { Plugin } from '../index.js';
2
+
3
+ declare module '../colordx.js' {
4
+ interface Colordx {
5
+ harmonies(type?: 'complementary' | 'analogous' | 'triadic' | 'tetradic' | 'split-complementary'): Colordx[];
6
+ }
7
+ }
8
+ declare const harmonies: Plugin;
9
+
10
+ export { harmonies as default };
@@ -0,0 +1,2 @@
1
+ var e=t=>{t.prototype.harmonies=function(r="complementary"){switch(r){case "complementary":return [this,this.rotate(180)];case "analogous":return [this.rotate(-30),this,this.rotate(30)];case "triadic":return [this,this.rotate(120),this.rotate(240)];case "tetradic":return [this,this.rotate(90),this.rotate(180),this.rotate(270)];case "split-complementary":return [this,this.rotate(150),this.rotate(210)];default:return [this]}};},o=e;export{o as default};//# sourceMappingURL=harmonies.mjs.map
2
+ //# sourceMappingURL=harmonies.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/plugins/harmonies.ts"],"names":["harmonies","ColordClass","type","harmonies_default"],"mappings":"AASA,IAAMA,EAAqBC,CAAAA,EAAgB,CACzCA,EAAY,SAAA,CAAU,SAAA,CAAY,SAEhCC,CAAAA,CAAuF,eAAA,CAC5E,CACX,OAAQA,CAAAA,EACN,KAAK,eAAA,CACH,OAAO,CAAC,IAAA,CAAM,KAAK,MAAA,CAAO,GAAG,CAAC,CAAA,CAChC,KAAK,YACH,OAAO,CAAC,KAAK,MAAA,CAAO,GAAG,EAAG,IAAA,CAAM,IAAA,CAAK,OAAO,EAAE,CAAC,EACjD,KAAK,SAAA,CACH,OAAO,CAAC,IAAA,CAAM,KAAK,MAAA,CAAO,GAAG,EAAG,IAAA,CAAK,MAAA,CAAO,GAAG,CAAC,CAAA,CAClD,KAAK,UAAA,CACH,OAAO,CAAC,IAAA,CAAM,IAAA,CAAK,OAAO,EAAE,CAAA,CAAG,KAAK,MAAA,CAAO,GAAG,EAAG,IAAA,CAAK,MAAA,CAAO,GAAG,CAAC,CAAA,CACnE,KAAK,qBAAA,CACH,OAAO,CAAC,IAAA,CAAM,IAAA,CAAK,OAAO,GAAG,CAAA,CAAG,KAAK,MAAA,CAAO,GAAG,CAAC,CAAA,CAClD,QACE,OAAO,CAAC,IAAI,CAChB,CACF,EACF,EAEOC,CAAAA,CAAQH","file":"harmonies.mjs","sourcesContent":["import type { Plugin } from '../colordx.js';\nimport { Colordx } from '../colordx.js';\n\ndeclare module '../colordx.js' {\n interface Colordx {\n harmonies(type?: 'complementary' | 'analogous' | 'triadic' | 'tetradic' | 'split-complementary'): Colordx[];\n }\n}\n\nconst harmonies: Plugin = (ColordClass) => {\n ColordClass.prototype.harmonies = function (\n this: Colordx,\n type: 'complementary' | 'analogous' | 'triadic' | 'tetradic' | 'split-complementary' = 'complementary'\n ): Colordx[] {\n switch (type) {\n case 'complementary':\n return [this, this.rotate(180)];\n case 'analogous':\n return [this.rotate(-30), this, this.rotate(30)];\n case 'triadic':\n return [this, this.rotate(120), this.rotate(240)];\n case 'tetradic':\n return [this, this.rotate(90), this.rotate(180), this.rotate(270)];\n case 'split-complementary':\n return [this, this.rotate(150), this.rotate(210)];\n default:\n return [this];\n }\n };\n};\n\nexport default harmonies;\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var n=t=>{t.prototype.tint=function(o=.1){return this.mix("#ffffff",o)},t.prototype.shade=function(o=.1){return this.mix("#000000",o)},t.prototype.tone=function(o=.1){return this.mix("#808080",o)},t.prototype.palette=function(o,r="#ffffff"){return Array.from({length:o},(i,e)=>this.mix(r,e/(o-1)))};},f=n;module.exports=f;//# sourceMappingURL=mix.cjs.map
2
+ //# sourceMappingURL=mix.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/plugins/mix.ts"],"names":["mix","ColordClass","amount","count","target","_","i","mix_default"],"mappings":"aAgBA,IAAMA,CAAAA,CAAeC,CAAAA,EAAgB,CACnCA,CAAAA,CAAY,UAAU,IAAA,CAAO,SAAyBC,CAAAA,CAAS,EAAA,CAAc,CAC3E,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAWA,CAAM,CACnC,CAAA,CAEAD,CAAAA,CAAY,SAAA,CAAU,KAAA,CAAQ,SAAyBC,CAAAA,CAAS,EAAA,CAAc,CAC5E,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAWA,CAAM,CACnC,CAAA,CAEAD,CAAAA,CAAY,SAAA,CAAU,KAAO,SAAyBC,CAAAA,CAAS,EAAA,CAAc,CAC3E,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAWA,CAAM,CACnC,CAAA,CAEAD,CAAAA,CAAY,SAAA,CAAU,QAAU,SAAyBE,CAAAA,CAAeC,CAAAA,CAAmB,SAAA,CAAsB,CAC/G,OAAO,KAAA,CAAM,IAAA,CAAK,CAAE,OAAQD,CAAM,CAAA,CAAG,CAACE,CAAAA,CAAGC,IAAM,IAAA,CAAK,GAAA,CAAIF,CAAAA,CAAQE,CAAAA,EAAKH,EAAQ,CAAA,CAAE,CAAC,CAClF,EACF,EAEOI,CAAAA,CAAQP","file":"mix.cjs","sourcesContent":["import type { Plugin } from '../colordx.js';\nimport { Colordx } from '../colordx.js';\nimport type { AnyColor } from '../types.js';\n\ndeclare module '../colordx.js' {\n interface Colordx {\n tint(amount?: number): Colordx;\n shade(amount?: number): Colordx;\n tone(amount?: number): Colordx;\n palette(count: number, target?: AnyColor): Colordx[];\n }\n}\n\n/**\n * Extends Colordx with tint/shade/tone helpers and multi-stop mixing.\n */\nconst mix: Plugin = (ColordClass) => {\n ColordClass.prototype.tint = function (this: Colordx, amount = 0.1): Colordx {\n return this.mix('#ffffff', amount);\n };\n\n ColordClass.prototype.shade = function (this: Colordx, amount = 0.1): Colordx {\n return this.mix('#000000', amount);\n };\n\n ColordClass.prototype.tone = function (this: Colordx, amount = 0.1): Colordx {\n return this.mix('#808080', amount);\n };\n\n ColordClass.prototype.palette = function (this: Colordx, count: number, target: AnyColor = '#ffffff'): Colordx[] {\n return Array.from({ length: count }, (_, i) => this.mix(target, i / (count - 1)));\n };\n};\n\nexport default mix;\n"]}
@@ -0,0 +1,16 @@
1
+ import { AnyColor, Plugin } from '../index.cjs';
2
+
3
+ declare module '../colordx.js' {
4
+ interface Colordx {
5
+ tint(amount?: number): Colordx;
6
+ shade(amount?: number): Colordx;
7
+ tone(amount?: number): Colordx;
8
+ palette(count: number, target?: AnyColor): Colordx[];
9
+ }
10
+ }
11
+ /**
12
+ * Extends Colordx with tint/shade/tone helpers and multi-stop mixing.
13
+ */
14
+ declare const mix: Plugin;
15
+
16
+ export { mix as default };
@@ -0,0 +1,16 @@
1
+ import { AnyColor, Plugin } from '../index.js';
2
+
3
+ declare module '../colordx.js' {
4
+ interface Colordx {
5
+ tint(amount?: number): Colordx;
6
+ shade(amount?: number): Colordx;
7
+ tone(amount?: number): Colordx;
8
+ palette(count: number, target?: AnyColor): Colordx[];
9
+ }
10
+ }
11
+ /**
12
+ * Extends Colordx with tint/shade/tone helpers and multi-stop mixing.
13
+ */
14
+ declare const mix: Plugin;
15
+
16
+ export { mix as default };
@@ -0,0 +1,2 @@
1
+ var n=t=>{t.prototype.tint=function(o=.1){return this.mix("#ffffff",o)},t.prototype.shade=function(o=.1){return this.mix("#000000",o)},t.prototype.tone=function(o=.1){return this.mix("#808080",o)},t.prototype.palette=function(o,r="#ffffff"){return Array.from({length:o},(i,e)=>this.mix(r,e/(o-1)))};},f=n;export{f as default};//# sourceMappingURL=mix.mjs.map
2
+ //# sourceMappingURL=mix.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/plugins/mix.ts"],"names":["mix","ColordClass","amount","count","target","_","i","mix_default"],"mappings":"AAgBA,IAAMA,CAAAA,CAAeC,CAAAA,EAAgB,CACnCA,CAAAA,CAAY,UAAU,IAAA,CAAO,SAAyBC,CAAAA,CAAS,EAAA,CAAc,CAC3E,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAWA,CAAM,CACnC,CAAA,CAEAD,CAAAA,CAAY,SAAA,CAAU,KAAA,CAAQ,SAAyBC,CAAAA,CAAS,EAAA,CAAc,CAC5E,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAWA,CAAM,CACnC,CAAA,CAEAD,CAAAA,CAAY,SAAA,CAAU,KAAO,SAAyBC,CAAAA,CAAS,EAAA,CAAc,CAC3E,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAWA,CAAM,CACnC,CAAA,CAEAD,CAAAA,CAAY,SAAA,CAAU,QAAU,SAAyBE,CAAAA,CAAeC,CAAAA,CAAmB,SAAA,CAAsB,CAC/G,OAAO,KAAA,CAAM,IAAA,CAAK,CAAE,OAAQD,CAAM,CAAA,CAAG,CAACE,CAAAA,CAAGC,IAAM,IAAA,CAAK,GAAA,CAAIF,CAAAA,CAAQE,CAAAA,EAAKH,EAAQ,CAAA,CAAE,CAAC,CAClF,EACF,EAEOI,CAAAA,CAAQP","file":"mix.mjs","sourcesContent":["import type { Plugin } from '../colordx.js';\nimport { Colordx } from '../colordx.js';\nimport type { AnyColor } from '../types.js';\n\ndeclare module '../colordx.js' {\n interface Colordx {\n tint(amount?: number): Colordx;\n shade(amount?: number): Colordx;\n tone(amount?: number): Colordx;\n palette(count: number, target?: AnyColor): Colordx[];\n }\n}\n\n/**\n * Extends Colordx with tint/shade/tone helpers and multi-stop mixing.\n */\nconst mix: Plugin = (ColordClass) => {\n ColordClass.prototype.tint = function (this: Colordx, amount = 0.1): Colordx {\n return this.mix('#ffffff', amount);\n };\n\n ColordClass.prototype.shade = function (this: Colordx, amount = 0.1): Colordx {\n return this.mix('#000000', amount);\n };\n\n ColordClass.prototype.tone = function (this: Colordx, amount = 0.1): Colordx {\n return this.mix('#808080', amount);\n };\n\n ColordClass.prototype.palette = function (this: Colordx, count: number, target: AnyColor = '#ffffff'): Colordx[] {\n return Array.from({ length: count }, (_, i) => this.mix(target, i / (count - 1)));\n };\n};\n\nexport default mix;\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var o=(r,e=0)=>Math.round(r*10**e)/10**e;var n=r=>parseInt(r.padEnd(2,r),16),l=r=>{if(typeof r!="string")return null;let e=r.trim().replace(/^#/,"");if(!/^[0-9a-f]{3,8}$/i.test(e))return null;if(e.length===3||e.length===4){let[f,a,d,i="f"]=e.split("");return {r:n(f),g:n(a),b:n(d),a:o(n(i)/255,2)}}return e.length===6||e.length===8?{r:parseInt(e.slice(0,2),16),g:parseInt(e.slice(2,4),16),b:parseInt(e.slice(4,6),16),a:e.length===8?o(parseInt(e.slice(6,8),16)/255,2):1}:null};var t={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"},s=(r,e)=>{e.push(f=>{if(typeof f!="string")return null;let a=t[f.toLowerCase().trim()];return a?l(a):null}),r.prototype.toName=function(){let f=this.toHex().toLowerCase();return Object.keys(t).find(a=>t[a]===f)};},p=s;module.exports=p;//# sourceMappingURL=names.cjs.map
2
+ //# sourceMappingURL=names.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/helpers.ts","../../src/colorModels/hex.ts","../../src/plugins/names.ts"],"names":["round","n","d","parseHexChannel","hex","parseHex","input","clean","r","g","b","a","NAMES","names","ColordClass","parsers","name","names_default"],"mappings":"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","file":"names.cjs","sourcesContent":["export const clamp = (n: number, min: number, max: number): number => Math.min(Math.max(n, min), max);\n\nexport const round = (n: number, d = 0): number => Math.round(n * 10 ** d) / 10 ** d;\n\nexport const floor = (n: number, d = 0): number => Math.floor(n * 10 ** d) / 10 ** d;\n\nexport const isNumeric = (n: unknown): n is number => typeof n === 'number' && !Number.isNaN(n) && Number.isFinite(n);\n\nexport const isObject = (v: unknown): v is Record<string, unknown> =>\n typeof v === 'object' && v !== null && !Array.isArray(v);\n\nexport const hasKeys = <T extends string>(obj: Record<string, unknown>, keys: T[]): obj is Record<T, unknown> =>\n keys.every((k) => k in obj);\n","import { clamp, round } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nconst parseHexChannel = (hex: string): number => parseInt(hex.padEnd(2, hex), 16);\n\nexport const parseHex = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const clean = input.trim().replace(/^#/, '');\n if (!/^[0-9a-f]{3,8}$/i.test(clean)) return null;\n\n if (clean.length === 3 || clean.length === 4) {\n const [r, g, b, a = 'f'] = clean.split('');\n return {\n r: parseHexChannel(r!),\n g: parseHexChannel(g!),\n b: parseHexChannel(b!),\n a: round(parseHexChannel(a) / 255, 2),\n };\n }\n\n if (clean.length === 6 || clean.length === 8) {\n return {\n r: parseInt(clean.slice(0, 2), 16),\n g: parseInt(clean.slice(2, 4), 16),\n b: parseInt(clean.slice(4, 6), 16),\n a: clean.length === 8 ? round(parseInt(clean.slice(6, 8), 16) / 255, 2) : 1,\n };\n }\n\n return null;\n};\n\nexport const rgbToHex = ({ r, g, b, a }: RgbColor): string => {\n const toHex = (n: number) => clamp(Math.round(n), 0, 255).toString(16).padStart(2, '0');\n const hex = `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n return a < 1 ? hex + toHex(a * 255) : hex;\n};\n","import { parseHex } from '../colorModels/hex.js';\nimport type { Plugin } from '../colordx.js';\nimport { Colordx } from '../colordx.js';\nimport type { RgbColor } from '../types.js';\n\ndeclare module '../colordx.js' {\n interface Colordx {\n toName(): string | undefined;\n }\n}\n\n// CSS color names map (name → hex)\nconst NAMES: Record<string, string> = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n};\n\nconst names: Plugin = (ColordClass, parsers) => {\n parsers.push((input): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const hex = NAMES[input.toLowerCase().trim()];\n return hex ? parseHex(hex) : null;\n });\n\n ColordClass.prototype.toName = function (this: Colordx): string | undefined {\n const hex = this.toHex().toLowerCase();\n return Object.keys(NAMES).find((name) => NAMES[name] === hex);\n };\n};\n\nexport default names;\n"]}
@@ -0,0 +1,10 @@
1
+ import { Plugin } from '../index.cjs';
2
+
3
+ declare module '../colordx.js' {
4
+ interface Colordx {
5
+ toName(): string | undefined;
6
+ }
7
+ }
8
+ declare const names: Plugin;
9
+
10
+ export { names as default };
@@ -0,0 +1,10 @@
1
+ import { Plugin } from '../index.js';
2
+
3
+ declare module '../colordx.js' {
4
+ interface Colordx {
5
+ toName(): string | undefined;
6
+ }
7
+ }
8
+ declare const names: Plugin;
9
+
10
+ export { names as default };
@@ -0,0 +1,2 @@
1
+ var o=(r,e=0)=>Math.round(r*10**e)/10**e;var n=r=>parseInt(r.padEnd(2,r),16),l=r=>{if(typeof r!="string")return null;let e=r.trim().replace(/^#/,"");if(!/^[0-9a-f]{3,8}$/i.test(e))return null;if(e.length===3||e.length===4){let[f,a,d,i="f"]=e.split("");return {r:n(f),g:n(a),b:n(d),a:o(n(i)/255,2)}}return e.length===6||e.length===8?{r:parseInt(e.slice(0,2),16),g:parseInt(e.slice(2,4),16),b:parseInt(e.slice(4,6),16),a:e.length===8?o(parseInt(e.slice(6,8),16)/255,2):1}:null};var t={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"},s=(r,e)=>{e.push(f=>{if(typeof f!="string")return null;let a=t[f.toLowerCase().trim()];return a?l(a):null}),r.prototype.toName=function(){let f=this.toHex().toLowerCase();return Object.keys(t).find(a=>t[a]===f)};},p=s;export{p as default};//# sourceMappingURL=names.mjs.map
2
+ //# sourceMappingURL=names.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/helpers.ts","../../src/colorModels/hex.ts","../../src/plugins/names.ts"],"names":["round","n","d","parseHexChannel","hex","parseHex","input","clean","r","g","b","a","NAMES","names","ColordClass","parsers","name","names_default"],"mappings":"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","file":"names.mjs","sourcesContent":["export const clamp = (n: number, min: number, max: number): number => Math.min(Math.max(n, min), max);\n\nexport const round = (n: number, d = 0): number => Math.round(n * 10 ** d) / 10 ** d;\n\nexport const floor = (n: number, d = 0): number => Math.floor(n * 10 ** d) / 10 ** d;\n\nexport const isNumeric = (n: unknown): n is number => typeof n === 'number' && !Number.isNaN(n) && Number.isFinite(n);\n\nexport const isObject = (v: unknown): v is Record<string, unknown> =>\n typeof v === 'object' && v !== null && !Array.isArray(v);\n\nexport const hasKeys = <T extends string>(obj: Record<string, unknown>, keys: T[]): obj is Record<T, unknown> =>\n keys.every((k) => k in obj);\n","import { clamp, round } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nconst parseHexChannel = (hex: string): number => parseInt(hex.padEnd(2, hex), 16);\n\nexport const parseHex = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const clean = input.trim().replace(/^#/, '');\n if (!/^[0-9a-f]{3,8}$/i.test(clean)) return null;\n\n if (clean.length === 3 || clean.length === 4) {\n const [r, g, b, a = 'f'] = clean.split('');\n return {\n r: parseHexChannel(r!),\n g: parseHexChannel(g!),\n b: parseHexChannel(b!),\n a: round(parseHexChannel(a) / 255, 2),\n };\n }\n\n if (clean.length === 6 || clean.length === 8) {\n return {\n r: parseInt(clean.slice(0, 2), 16),\n g: parseInt(clean.slice(2, 4), 16),\n b: parseInt(clean.slice(4, 6), 16),\n a: clean.length === 8 ? round(parseInt(clean.slice(6, 8), 16) / 255, 2) : 1,\n };\n }\n\n return null;\n};\n\nexport const rgbToHex = ({ r, g, b, a }: RgbColor): string => {\n const toHex = (n: number) => clamp(Math.round(n), 0, 255).toString(16).padStart(2, '0');\n const hex = `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n return a < 1 ? hex + toHex(a * 255) : hex;\n};\n","import { parseHex } from '../colorModels/hex.js';\nimport type { Plugin } from '../colordx.js';\nimport { Colordx } from '../colordx.js';\nimport type { RgbColor } from '../types.js';\n\ndeclare module '../colordx.js' {\n interface Colordx {\n toName(): string | undefined;\n }\n}\n\n// CSS color names map (name → hex)\nconst NAMES: Record<string, string> = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n};\n\nconst names: Plugin = (ColordClass, parsers) => {\n parsers.push((input): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const hex = NAMES[input.toLowerCase().trim()];\n return hex ? parseHex(hex) : null;\n });\n\n ColordClass.prototype.toName = function (this: Colordx): string | undefined {\n const hex = this.toHex().toLowerCase();\n return Object.keys(NAMES).find((name) => NAMES[name] === hex);\n };\n};\n\nexport default names;\n"]}
package/package.json ADDED
@@ -0,0 +1,102 @@
1
+ {
2
+ "name": "@colordx/core",
3
+ "version": "0.1.0",
4
+ "description": "A high-performance color library with extended support for modern color spaces including OKLCH, OKLAB, Display-P3, and more",
5
+ "author": "",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/dkryaklin/colordx.git"
10
+ },
11
+ "keywords": [
12
+ "color",
13
+ "colour",
14
+ "oklch",
15
+ "oklab",
16
+ "display-p3",
17
+ "wide-gamut",
18
+ "hsl",
19
+ "rgb",
20
+ "hex",
21
+ "hsv",
22
+ "hwb",
23
+ "lab",
24
+ "lch",
25
+ "xyz",
26
+ "cmyk",
27
+ "color-space",
28
+ "color-manipulation",
29
+ "color-conversion",
30
+ "performance"
31
+ ],
32
+ "sideEffects": false,
33
+ "type": "module",
34
+ "exports": {
35
+ ".": {
36
+ "import": {
37
+ "types": "./dist/index.d.ts",
38
+ "default": "./dist/index.mjs"
39
+ },
40
+ "require": {
41
+ "types": "./dist/index.d.cts",
42
+ "default": "./dist/index.cjs"
43
+ }
44
+ },
45
+ "./plugins/*": {
46
+ "import": {
47
+ "types": "./dist/plugins/*.d.ts",
48
+ "default": "./dist/plugins/*.mjs"
49
+ },
50
+ "require": {
51
+ "types": "./dist/plugins/*.d.cts",
52
+ "default": "./dist/plugins/*.cjs"
53
+ }
54
+ }
55
+ },
56
+ "main": "./dist/index.cjs",
57
+ "module": "./dist/index.mjs",
58
+ "types": "./dist/index.d.ts",
59
+ "files": [
60
+ "dist"
61
+ ],
62
+ "packageManager": "yarn@4.13.0",
63
+ "scripts": {
64
+ "build": "tsup",
65
+ "dev": "tsup --watch",
66
+ "test": "vitest run",
67
+ "test:watch": "vitest",
68
+ "test:coverage": "vitest run --coverage",
69
+ "lint": "eslint src",
70
+ "format": "prettier --write \"src/**/*.ts\"",
71
+ "format:check": "prettier --check \"src/**/*.ts\"",
72
+ "typecheck": "tsc --noEmit",
73
+ "changeset": "changeset",
74
+ "version": "changeset version",
75
+ "release": "yarn build && publint && changeset publish",
76
+ "prepare": "node --eval \"if (process.env.CI) process.exit(0)\" && husky || true"
77
+ },
78
+ "lint-staged": {
79
+ "src/**/*.ts": [
80
+ "prettier --write",
81
+ "eslint --fix"
82
+ ]
83
+ },
84
+ "devDependencies": {
85
+ "@changesets/changelog-github": "^0.6.0",
86
+ "@changesets/cli": "^2.30.0",
87
+ "@trivago/prettier-plugin-sort-imports": "^6.0.2",
88
+ "@typescript-eslint/eslint-plugin": "^8.57.1",
89
+ "@typescript-eslint/parser": "^8.57.1",
90
+ "@vitest/coverage-v8": "^4.1.0",
91
+ "eslint": "^9.39.0",
92
+ "eslint-config-prettier": "^10.1.8",
93
+ "husky": "^9.1.7",
94
+ "lint-staged": "^16.4.0",
95
+ "prettier": "^3.8.1",
96
+ "publint": "^0.3.18",
97
+ "tsup": "^8.5.1",
98
+ "typescript": "^5.9.3",
99
+ "typescript-eslint": "^8.57.1",
100
+ "vitest": "^4.1.0"
101
+ }
102
+ }