@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 +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +112 -0
- package/dist/index.d.ts +112 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/dist/plugins/a11y.cjs +2 -0
- package/dist/plugins/a11y.cjs.map +1 -0
- package/dist/plugins/a11y.d.cts +14 -0
- package/dist/plugins/a11y.d.ts +14 -0
- package/dist/plugins/a11y.mjs +2 -0
- package/dist/plugins/a11y.mjs.map +1 -0
- package/dist/plugins/harmonies.cjs +2 -0
- package/dist/plugins/harmonies.cjs.map +1 -0
- package/dist/plugins/harmonies.d.cts +10 -0
- package/dist/plugins/harmonies.d.ts +10 -0
- package/dist/plugins/harmonies.mjs +2 -0
- package/dist/plugins/harmonies.mjs.map +1 -0
- package/dist/plugins/mix.cjs +2 -0
- package/dist/plugins/mix.cjs.map +1 -0
- package/dist/plugins/mix.d.cts +16 -0
- package/dist/plugins/mix.d.ts +16 -0
- package/dist/plugins/mix.mjs +2 -0
- package/dist/plugins/mix.mjs.map +1 -0
- package/dist/plugins/names.cjs +2 -0
- package/dist/plugins/names.cjs.map +1 -0
- package/dist/plugins/names.d.cts +10 -0
- package/dist/plugins/names.d.ts +10 -0
- package/dist/plugins/names.mjs +2 -0
- package/dist/plugins/names.mjs.map +1 -0
- package/package.json +102 -0
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"]}
|
package/dist/index.d.cts
ADDED
|
@@ -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.d.ts
ADDED
|
@@ -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":"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","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,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
|
+
}
|