@colordx/core
Advanced tools
| 'use strict';var chunk44FDTAPT_cjs=require('./chunk-44FDTAPT.cjs'),chunkEDNIB75Q_cjs=require('./chunk-EDNIB75Q.cjs'),chunkX5FCFNQN_cjs=require('./chunk-X5FCFNQN.cjs'),chunkYISEJCI6_cjs=require('./chunk-YISEJCI6.cjs');var K=/^oklch\(\s*([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,q=/^oklab\(\s*([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(%?)\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,C=e=>{if(typeof e=="object"&&e!==null){let r=e;if("l"in r&&"a"in r&&"b"in r&&r.colorSpace!=="lab"&&!("c"in r)&&!("r"in r)){let n=e;if(typeof n.l=="number"&&typeof n.a=="number"&&typeof n.b=="number"&&typeof n.alpha=="number")return {l:n.l,a:n.a,b:n.b,alpha:n.alpha}}if("l"in r&&"c"in r&&"h"in r&&r.colorSpace!=="lch"&&!("a"in r)&&!("r"in r)){let n=e;if(typeof n.l=="number"&&typeof n.c=="number"&&typeof n.h=="number"){let o=n.h*Math.PI/180;return {l:n.l,a:n.c*Math.cos(o),b:n.c*Math.sin(o),alpha:n.alpha}}}if(r.colorSpace==="lab"){let n=e;if(typeof n.l!="number"||typeof n.a!="number"||typeof n.b!="number")return null;let{x:o,y:t,z:b}=chunkEDNIB75Q_cjs.d(n),[u,l,p]=chunkEDNIB75Q_cjs.b(o,t,b),[m,d,k]=chunk44FDTAPT_cjs.a(u,l,p);return {l:m,a:d,b:k,alpha:typeof n.alpha=="number"?n.alpha:1}}return null}if(typeof e=="string"){let r=K.exec(e);if(r){let n=r[2]?Number(r[1])/100:Number(r[1]),o=r[4]?Number(r[3])*.004:Number(r[3]),t=r[6]?.toLowerCase()??"deg",u=Number(r[5])*(chunkYISEJCI6_cjs.d[t]??1)*Math.PI/180,l=r[7]===void 0?1:Number(r[7])/(r[8]?100:1);return {l:n,a:o*Math.cos(u),b:o*Math.sin(u),alpha:l}}if(r=q.exec(e),r){let n=r[2]?Number(r[1])/100:Number(r[1]),o=r[4]?Number(r[3])*.004:Number(r[3]),t=r[6]?Number(r[5])*.004:Number(r[5]),b=r[7]===void 0?1:Number(r[7])/(r[8]?100:1);return {l:n,a:o,b:t,alpha:b}}return null}return null},c=5e-4,D=(e,r,n)=>e>=-c&&e<=1+c&&r>=-c&&r<=1+c&&n>=-c&&n<=1+c,O=(e,r,n)=>e>=0&&e<=1&&r>=0&&r<=1&&n>=0&&n<=1,Q=e=>{let r=C(e);if(r===null)return true;let[n,o,t]=chunk44FDTAPT_cjs.f(r.l,r.a,r.b);return D(n,o,t)},E=.02,U=1e-4,F=(e,r)=>{let n=e[0]-r[0],o=e[1]-r[1],t=e[2]-r[2];return Math.sqrt(n*n+o*o+t*t)},_=(e,r,n,o,t,b)=>{if(e>=1)return {l:1,a:0,b:0,alpha:o};if(e<=0)return {l:0,a:0,b:0,alpha:o};let[u,l,p]=t(e,r,n);if(O(u,l,p))return {l:e,a:r,b:n,alpha:o};let m=b(chunkYISEJCI6_cjs.a(u,0,1),chunkYISEJCI6_cjs.a(l,0,1),chunkYISEJCI6_cjs.a(p,0,1));if(F(m,[e,r,n])<=E)return {l:m[0],a:m[1],b:m[2],alpha:o};let d=Math.atan2(n,r),k=Math.sqrt(r*r+n*n),f=0,L=k,M=true,y=m;for(;L-f>U;){let i=(f+L)/2,N=i*Math.cos(d),x=i*Math.sin(d),[A,T,R]=t(e,N,x);if(M&&O(A,T,R)){f=i;continue}let I=b(chunkYISEJCI6_cjs.a(A,0,1),chunkYISEJCI6_cjs.a(T,0,1),chunkYISEJCI6_cjs.a(R,0,1));y=I,F(I,[e,N,x])<=E?(f=i,M=false):L=i;}return {l:y[0],a:y[1],b:y[2],alpha:o}},V=e=>{let r=C(e);if(r===null)return null;let{l:n,a:o,b:t,alpha:b}=r;return _(n,o,t,b,chunk44FDTAPT_cjs.f,chunk44FDTAPT_cjs.a)},W=(e,r)=>{let n=C(e);if(n===null)return true;let[o,t,b]=r(n.l,n.a,n.b);return D(o,t,b)},Y=(e,r,n)=>{let o=C(e);if(o===null)return null;let{l:t,a:b,b:u,alpha:l}=o;return _(t,b,u,l,r,n)};var P=Math.PI/180,j=(e,r,n)=>{let o=n*P;return chunk44FDTAPT_cjs.f(e,r*Math.cos(o),r*Math.sin(o))},z=(e,r,n,o)=>{let t=o*P;chunk44FDTAPT_cjs.e(e,r,n*Math.cos(t),n*Math.sin(t));},er=(e,r,n)=>{let[o,t,b]=j(e,r,n);return [chunkX5FCFNQN_cjs.b(o),chunkX5FCFNQN_cjs.b(t),chunkX5FCFNQN_cjs.b(b)]},or=(e,r,n,o)=>{z(e,r,n,o),e[0]=chunkX5FCFNQN_cjs.b(e[0]),e[1]=chunkX5FCFNQN_cjs.b(e[1]),e[2]=chunkX5FCFNQN_cjs.b(e[2]);},tr=(e,r,n)=>{let[o,t,b]=j(e,r,n);return [[o,t,b],[chunkX5FCFNQN_cjs.b(o),chunkX5FCFNQN_cjs.b(t),chunkX5FCFNQN_cjs.b(b)]]},br=(e,r,n,o,t)=>{z(e,n,o,t),r[0]=chunkX5FCFNQN_cjs.b(e[0]),r[1]=chunkX5FCFNQN_cjs.b(e[1]),r[2]=chunkX5FCFNQN_cjs.b(e[2]);};exports.a=Q;exports.b=V;exports.c=W;exports.d=Y;exports.e=j;exports.f=z;exports.g=er;exports.h=or;exports.i=tr;exports.j=br;//# sourceMappingURL=chunk-3D3MFLZZ.cjs.map | ||
| //# sourceMappingURL=chunk-3D3MFLZZ.cjs.map |
| {"version":3,"sources":["../src/gamut.ts","../src/channels.ts"],"names":["OKLCH_RE","OKLAB_RE","getRawOklab","input","obj","c","hRad","x","y","z","labToXyz","lr","lg","lb","xyzD50ToLinearSrgb","ol","oa","ob","linearSrgbToOklab","m","l","unit","ANGLE_UNITS","alpha","a","b","EPS","isLinearInGamut","r","g","strictInGamut","inGamutSrgb","raw","oklabToLinear","JND","GAMUT_EPSILON","deltaEOK","lab1","lab2","dl","da","db","cssGamutMap","toLinear","fromLinear","r0","g0","b0","clip0","clamp","C","lo","hi","minInGamut","lastClip","mid","ma","mb","clipOklab","toGamutSrgbRaw","inGamutCustom","toGamutCustom","DEG_TO_RAD","oklchToLinear","h","oklchToLinearInto","out","oklabToLinearInto","oklchToRgbChannels","srgbFromLinear","oklchToRgbChannelsInto","oklchToLinearAndSrgb","oklchToLinearAndSrgbInto","linOut","srgbOut"],"mappings":"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","file":"chunk-3D3MFLZZ.cjs","sourcesContent":["import { labToXyz } from './colorModels/lab.js';\nimport { linearSrgbToOklab, oklabToLinear } from './colorModels/oklab.js';\nimport { xyzD50ToLinearSrgb } from './colorModels/xyz.js';\nimport { ANGLE_UNITS, clamp } from './helpers.js';\nimport type { AnyColor, LabColor, OklabColor, OklchColor } from './types.js';\n\nconst OKLCH_RE =\n /^oklch\\(\\s*([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nconst OKLAB_RE =\n /^oklab\\(\\s*([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(%?)\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\n/**\n * Extract raw OKLab {l, a, b, alpha} without clamping.\n * Returns null for inputs that are already sRGB-bounded (hex, rgb, hsl, hsv, hwb, etc.).\n */\nconst getRawOklab = (input: AnyColor): { l: number; a: number; b: number; alpha: number } | null => {\n if (typeof input === 'object' && input !== null) {\n const obj = input as unknown as Record<string, unknown>;\n // OklabColor: l/a/b present, no 'lab' colorSpace brand\n if ('l' in obj && 'a' in obj && 'b' in obj && obj.colorSpace !== 'lab' && !('c' in obj) && !('r' in obj)) {\n const c = input as OklabColor;\n if (\n typeof c.l === 'number' &&\n typeof c.a === 'number' &&\n typeof c.b === 'number' &&\n typeof c.alpha === 'number'\n ) {\n return { l: c.l, a: c.a, b: c.b, alpha: c.alpha };\n }\n }\n // OklchColor: l/c/h present, no 'lch' colorSpace brand\n if ('l' in obj && 'c' in obj && 'h' in obj && obj.colorSpace !== 'lch' && !('a' in obj) && !('r' in obj)) {\n const c = input as OklchColor;\n if (typeof c.l === 'number' && typeof c.c === 'number' && typeof c.h === 'number') {\n const hRad = (c.h * Math.PI) / 180;\n return { l: c.l, a: c.c * Math.cos(hRad), b: c.c * Math.sin(hRad), alpha: c.alpha };\n }\n }\n // LabColor: convert Lab (D50) → XYZ D50 → D65 → linear sRGB → OKLab (no clamping)\n if (obj.colorSpace === 'lab') {\n const c = input as LabColor;\n if (typeof c.l !== 'number' || typeof c.a !== 'number' || typeof c.b !== 'number') return null;\n const { x, y, z } = labToXyz(c);\n const [lr, lg, lb] = xyzD50ToLinearSrgb(x, y, z);\n const [ol, oa, ob] = linearSrgbToOklab(lr, lg, lb);\n return { l: ol, a: oa, b: ob, alpha: typeof c.alpha === 'number' ? c.alpha : 1 };\n }\n return null;\n }\n\n if (typeof input === 'string') {\n let m = OKLCH_RE.exec(input);\n if (m) {\n const l = m[2] ? Number(m[1]) / 100 : Number(m[1]);\n const c = m[4] ? Number(m[3]) * 0.004 : Number(m[3]);\n const unit = m[6]?.toLowerCase() ?? 'deg';\n const hDeg = Number(m[5]) * (ANGLE_UNITS[unit] ?? 1);\n const hRad = (hDeg * Math.PI) / 180;\n const alpha = m[7] === undefined ? 1 : Number(m[7]) / (m[8] ? 100 : 1);\n return { l, a: c * Math.cos(hRad), b: c * Math.sin(hRad), alpha };\n }\n m = OKLAB_RE.exec(input);\n if (m) {\n const l = m[2] ? Number(m[1]) / 100 : Number(m[1]);\n const a = m[4] ? Number(m[3]) * 0.004 : Number(m[3]);\n const b = m[6] ? Number(m[5]) * 0.004 : Number(m[5]);\n const alpha = m[7] === undefined ? 1 : Number(m[7]) / (m[8] ? 100 : 1);\n return { l, a, b, alpha };\n }\n return null;\n }\n\n return null;\n};\n\n// Tolerance for inGamut* checks — NOT used in gamut mapping, which uses strict bounds.\n// Covers two sources of error:\n// 1. Matrix floating-point noise: accumulated cbrt + matrix error is ~3e-10\n// 2. Value rounding: OKLCH stored at 4 dp (L, C) / 2 dp (H) produces linear-sRGB\n// deviations up to 4.4e-4 on sRGB boundary colors (exhaustive scan of all 256^3 sRGB\n// values confirms this). EPS = 5e-4 absorbs all rounding artifacts while staying below\n// ~1.6 gamma-encoded steps (imperceptible), and correctly rejects genuine out-of-gamut\n// colors (typically 1e-3 and above).\nconst EPS = 5e-4;\n\nconst isLinearInGamut = (r: number, g: number, b: number): boolean =>\n r >= -EPS && r <= 1 + EPS && g >= -EPS && g <= 1 + EPS && b >= -EPS && b <= 1 + EPS;\n\nconst strictInGamut = (r: number, g: number, b: number): boolean =>\n r >= 0 && r <= 1 && g >= 0 && g <= 1 && b >= 0 && b <= 1;\n\n/**\n * Returns true if the color is within the sRGB gamut.\n * Always true for hex, rgb, hsl, hsv, and hwb inputs.\n * For oklch/oklab inputs, checks whether the computed linear sRGB channels are in [0, 1].\n */\nexport const inGamutSrgb = (input: AnyColor): boolean => {\n const raw = getRawOklab(input);\n if (raw === null) return true;\n const [r, g, b] = oklabToLinear(raw.l, raw.a, raw.b);\n return isLinearInGamut(r, g, b);\n};\n\n// CSS Color 4 gamut mapping constants\n// https://www.w3.org/TR/css-color-4/#css-gamut-mapping\nconst JND = 0.02;\nconst GAMUT_EPSILON = 0.0001;\n\n/** Euclidean distance in OKLab — the CSS Color 4 deltaEOK metric. */\nconst deltaEOK = (lab1: readonly [number, number, number], lab2: readonly [number, number, number]): number => {\n const dl = lab1[0] - lab2[0];\n const da = lab1[1] - lab2[1];\n const db = lab1[2] - lab2[2];\n return Math.sqrt(dl * dl + da * da + db * db);\n};\n\nexport type LinearConverter = (l: number, a: number, b: number) => [number, number, number];\nexport type FromLinearConverter = (r: number, g: number, b: number) => [number, number, number];\n\n/**\n * CSS Color 4 gamut mapping algorithm.\n * Binary-searches for the highest chroma where clip(color) is within JND (0.02 deltaEOK)\n * of the chroma-reduced color, then returns the clipped result.\n * This preserves lightness and hue while accepting only perceptually negligible clip error.\n *\n * toLinear: OKLab → unclamped linear target-space channels\n * fromLinear: linear target-space channels → OKLab (used to measure deltaEOK of clipped color)\n */\nconst cssGamutMap = (\n l: number,\n a: number,\n b: number,\n alpha: number,\n toLinear: LinearConverter,\n fromLinear: FromLinearConverter\n): OklabColor => {\n if (l >= 1) return { l: 1, a: 0, b: 0, alpha };\n if (l <= 0) return { l: 0, a: 0, b: 0, alpha };\n\n const [r0, g0, b0] = toLinear(l, a, b);\n if (strictInGamut(r0, g0, b0)) return { l, a, b, alpha };\n\n // Early exit: if the simple clip is already within JND, use it directly\n const clip0 = fromLinear(clamp(r0, 0, 1), clamp(g0, 0, 1), clamp(b0, 0, 1));\n if (deltaEOK(clip0, [l, a, b]) <= JND) {\n return { l: clip0[0], a: clip0[1], b: clip0[2], alpha };\n }\n\n const hRad = Math.atan2(b, a);\n const C = Math.sqrt(a * a + b * b);\n let lo = 0;\n let hi = C;\n let minInGamut = true;\n let lastClip: readonly [number, number, number] = clip0;\n\n while (hi - lo > GAMUT_EPSILON) {\n const mid = (lo + hi) / 2;\n const ma = mid * Math.cos(hRad);\n const mb = mid * Math.sin(hRad);\n const [lr, lg, lb] = toLinear(l, ma, mb);\n\n if (minInGamut && strictInGamut(lr, lg, lb)) {\n lo = mid;\n continue;\n }\n\n const clipOklab = fromLinear(clamp(lr, 0, 1), clamp(lg, 0, 1), clamp(lb, 0, 1));\n lastClip = clipOklab;\n const E = deltaEOK(clipOklab, [l, ma, mb]);\n\n if (E <= JND) {\n lo = mid;\n minInGamut = false;\n } else {\n hi = mid;\n }\n }\n\n return { l: lastClip[0], a: lastClip[1], b: lastClip[2], alpha };\n};\n\n/**\n * Maps an out-of-sRGB-gamut color using the CSS Color 4 algorithm.\n * Returns null for sRGB-bounded inputs (hex, rgb, hsl, etc.) — pass through unchanged.\n * Returns the mapped OklabColor otherwise.\n */\nexport const toGamutSrgbRaw = (input: AnyColor): OklabColor | null => {\n const raw = getRawOklab(input);\n if (raw === null) return null;\n const { l, a, b, alpha } = raw;\n return cssGamutMap(l, a, b, alpha, oklabToLinear, linearSrgbToOklab);\n};\n\nexport const inGamutCustom = (input: AnyColor, toLinear: LinearConverter): boolean => {\n const raw = getRawOklab(input);\n // sRGB-bounded inputs (hex, rgb, hsl, etc.) are always inside the wider P3/Rec.2020 gamut\n if (raw === null) return true;\n const [r, g, b] = toLinear(raw.l, raw.a, raw.b);\n return isLinearInGamut(r, g, b);\n};\n\n/**\n * Maps an out-of-gamut color into a custom gamut using the CSS Color 4 gamut mapping algorithm.\n * Returns null for sRGB-bounded inputs (hex, rgb, hsl, etc.) — pass through unchanged.\n * Returns the mapped OklabColor otherwise.\n * toLinear: OKLab → unclamped linear target-space channels\n * fromLinear: linear target-space channels → OKLab (for deltaEOK of clipped colors)\n */\nexport const toGamutCustom = (\n input: AnyColor,\n toLinear: LinearConverter,\n fromLinear: FromLinearConverter\n): OklabColor | null => {\n const raw = getRawOklab(input);\n if (raw === null) return null;\n const { l, a, b, alpha } = raw;\n return cssGamutMap(l, a, b, alpha, toLinear, fromLinear);\n};\n","import { oklabToLinear, oklabToLinearInto } from './colorModels/oklab.js';\nimport { srgbFromLinear } from './transfer.js';\n\nconst DEG_TO_RAD = Math.PI / 180;\n\n/**\n * Convert OKLCH to unclamped linear sRGB channels without object allocation.\n * This is the shared expensive step (OKLCH → OKLab → linear sRGB via 3× cbrt + matrix).\n * Use this when you need multiple color spaces from the same color — compute once,\n * then pass to linearToP3Channels / linearToRec2020Channels (from their plugins) to avoid duplicate work.\n *\n * In-gamut sRGB colors have all channels in [0, 1]. Channels outside this range\n * indicate an out-of-gamut color — use as a free gamut check.\n */\nexport const oklchToLinear = (l: number, c: number, h: number): [number, number, number] => {\n const hRad = h * DEG_TO_RAD;\n return oklabToLinear(l, c * Math.cos(hRad), c * Math.sin(hRad));\n};\n\n/** Zero-allocation sibling of oklchToLinear — writes [lr, lg, lb] into `out`. */\nexport const oklchToLinearInto = (out: Float64Array | number[], l: number, c: number, h: number): void => {\n const hRad = h * DEG_TO_RAD;\n oklabToLinearInto(out, l, c * Math.cos(hRad), c * Math.sin(hRad));\n};\n\n/**\n * Convert OKLCH to gamma-encoded sRGB channels without object allocation.\n * Returns [r, g, b] in [0, 1] for in-gamut colors. Out-of-gamut channels may\n * exceed this range — callers are responsible for clamping before byte encoding.\n */\nexport const oklchToRgbChannels = (l: number, c: number, h: number): [number, number, number] => {\n const [r, g, b] = oklchToLinear(l, c, h);\n return [srgbFromLinear(r), srgbFromLinear(g), srgbFromLinear(b)];\n};\n\n/** Zero-allocation sibling of oklchToRgbChannels — writes [r, g, b] (gamma-encoded, 0–1) into `out`. */\nexport const oklchToRgbChannelsInto = (out: Float64Array | number[], l: number, c: number, h: number): void => {\n oklchToLinearInto(out, l, c, h);\n out[0] = srgbFromLinear(out[0]!);\n out[1] = srgbFromLinear(out[1]!);\n out[2] = srgbFromLinear(out[2]!);\n};\n\n/**\n * Convert OKLCH to both linear and gamma-encoded sRGB channels in a single pass.\n * Avoids recomputing the expensive OKLCH → OKLab → linear step when you need both.\n *\n * Linear channels are useful for gamut checks (all in [0,1] = in sRGB gamut)\n * and as input to P3/Rec2020 conversion matrices.\n * Gamma channels are ready for display on an sRGB canvas (still need clamping for out-of-gamut).\n *\n * Returns [[lr, lg, lb], [sr, sg, sb]] — both in [0, 1] for in-gamut colors.\n */\nexport const oklchToLinearAndSrgb = (\n l: number,\n c: number,\n h: number\n): [[number, number, number], [number, number, number]] => {\n const [lr, lg, lb] = oklchToLinear(l, c, h);\n return [\n [lr, lg, lb],\n [srgbFromLinear(lr), srgbFromLinear(lg), srgbFromLinear(lb)],\n ];\n};\n\n/**\n * Zero-allocation sibling of oklchToLinearAndSrgb — writes linear channels into `linOut`\n * and gamma-encoded sRGB channels into `srgbOut`. The two buffers must be distinct.\n */\nexport const oklchToLinearAndSrgbInto = (\n linOut: Float64Array | number[],\n srgbOut: Float64Array | number[],\n l: number,\n c: number,\n h: number\n): void => {\n oklchToLinearInto(linOut, l, c, h);\n srgbOut[0] = srgbFromLinear(linOut[0]!);\n srgbOut[1] = srgbFromLinear(linOut[1]!);\n srgbOut[2] = srgbFromLinear(linOut[2]!);\n};\n"]} |
| 'use strict';var chunkYISEJCI6_cjs=require('./chunk-YISEJCI6.cjs');var $=s=>({r:chunkYISEJCI6_cjs.a(s.r,0,255),g:chunkYISEJCI6_cjs.a(s.g,0,255),b:chunkYISEJCI6_cjs.a(s.b,0,255),alpha:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(s.alpha,3),0,1)}),x=s=>{if(!chunkYISEJCI6_cjs.h(s))return null;let n=s.colorSpace;if(n==="display-p3"||n==="rec2020"||!chunkYISEJCI6_cjs.i(s,["r","g","b"]))return null;let{r:e,g:t,b:c,alpha:l=1}=s;return !chunkYISEJCI6_cjs.f(e)||!chunkYISEJCI6_cjs.f(t)||!chunkYISEJCI6_cjs.f(c)||!chunkYISEJCI6_cjs.f(l)?null:$({r:chunkYISEJCI6_cjs.g(e),g:chunkYISEJCI6_cjs.g(t),b:chunkYISEJCI6_cjs.g(c),alpha:chunkYISEJCI6_cjs.g(l)})},y=new RegExp(`^rgba?\\(\\s*(?<r>${chunkYISEJCI6_cjs.k})(?<rp>%?)\\s*(?:,\\s*(?<g_c>${chunkYISEJCI6_cjs.k})(?<gp_c>%?)\\s*,\\s*(?<b_c>${chunkYISEJCI6_cjs.k})(?<bp_c>%?)(?:\\s*,\\s*(?<al_c>${chunkYISEJCI6_cjs.k})(?<alp_c>%?))?\\s*|\\s+(?<g_s>${chunkYISEJCI6_cjs.k})(?<gp_s>%?)\\s+(?<b_s>${chunkYISEJCI6_cjs.k})(?<bp_s>%?)(?:\\s*/\\s*(?<al_s>${chunkYISEJCI6_cjs.k})(?<alp_s>%?))?\\s*)\\)$`,"i"),N=s=>{if(typeof s!="string")return null;let n=y.exec(s.trim())?.groups;if(!n)return null;let e=n.g_c!==void 0,t=n.g_c??n.g_s,c=n.b_c??n.b_s,l=!!n.rp,_=!!(n.gp_c??n.gp_s),b=!!(n.bp_c??n.bp_s),m=l?chunkYISEJCI6_cjs.l(n.r)/100*255:chunkYISEJCI6_cjs.l(n.r),w=_?chunkYISEJCI6_cjs.l(t)/100*255:chunkYISEJCI6_cjs.l(t),d=b?chunkYISEJCI6_cjs.l(c)/100*255:chunkYISEJCI6_cjs.l(c);if(e&&(l!==_||_!==b||/^none$/i.test(n.r)||/^none$/i.test(t)||/^none$/i.test(c)))return null;let g=n.al_c??n.al_s,h=!!(n.alp_c??n.alp_s);if(e&&g!==void 0&&/^none$/i.test(g))return null;let k=g===void 0?1:chunkYISEJCI6_cjs.l(g)/(h?100:1);return $({r:m,g:w,b:d,alpha:k})};exports.a=$;exports.b=x;exports.c=N;//# sourceMappingURL=chunk-3V4MONNR.cjs.map | ||
| //# sourceMappingURL=chunk-3V4MONNR.cjs.map |
| {"version":3,"sources":["../src/colorModels/rgb.ts"],"names":["clampRgb","rgb","clamp","round","parseRgbObject","input","isObject","cs","hasKeys","r","g","b","alpha","isAnyNumber","sanitize","RGB_RE","NUM_OR_NONE","parseRgbString","isComma","gRaw","bRaw","rPct","gPct","bPct","parseNum","gc","rawA","aPct"],"mappings":"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","file":"chunk-3V4MONNR.cjs","sourcesContent":["import { NUM_OR_NONE, clamp, hasKeys, isAnyNumber, isObject, parseNum, round, sanitize } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nexport const clampRgb = (rgb: RgbColor): RgbColor => ({\n r: clamp(rgb.r, 0, 255),\n g: clamp(rgb.g, 0, 255),\n b: clamp(rgb.b, 0, 255),\n alpha: clamp(round(rgb.alpha, 3), 0, 1),\n});\n\nexport const parseRgbObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n const cs = (input as { colorSpace?: unknown }).colorSpace;\n if (cs === 'display-p3' || cs === 'rec2020') return null;\n if (!hasKeys(input, ['r', 'g', 'b'])) return null;\n const { r, g, b, alpha = 1 } = input as { r: unknown; g: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(r) || !isAnyNumber(g) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return clampRgb({ r: sanitize(r), g: sanitize(g), b: sanitize(b), alpha: sanitize(alpha) });\n};\n\n// Matches both legacy comma syntax: rgb(255, 0, 0) / rgba(255, 0, 0, 0.5)\n// and modern space syntax: rgb(255 0 0) / rgb(255 0 0 / 0.5).\n// Supports percentage-based channels and the CSS Color 4 `none` keyword.\n// Named groups are suffixed `_c` (comma/legacy branch) or `_s` (space/modern branch)\n// because ES2022 regex requires distinct names across alternation branches.\nconst RGB_RE = new RegExp(\n `^rgba?\\\\(\\\\s*(?<r>${NUM_OR_NONE})(?<rp>%?)\\\\s*(?:` +\n `,\\\\s*(?<g_c>${NUM_OR_NONE})(?<gp_c>%?)\\\\s*,\\\\s*(?<b_c>${NUM_OR_NONE})(?<bp_c>%?)` +\n `(?:\\\\s*,\\\\s*(?<al_c>${NUM_OR_NONE})(?<alp_c>%?))?\\\\s*` +\n `|` +\n `\\\\s+(?<g_s>${NUM_OR_NONE})(?<gp_s>%?)\\\\s+(?<b_s>${NUM_OR_NONE})(?<bp_s>%?)` +\n `(?:\\\\s*/\\\\s*(?<al_s>${NUM_OR_NONE})(?<alp_s>%?))?\\\\s*` +\n `)\\\\)$`,\n 'i'\n);\n\nexport const parseRgbString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = RGB_RE.exec(input.trim())?.groups;\n if (!g) return null;\n\n const isComma = g.g_c !== undefined;\n const gRaw = g.g_c ?? g.g_s!;\n const bRaw = g.b_c ?? g.b_s!;\n const rPct = !!g.rp;\n const gPct = !!(g.gp_c ?? g.gp_s);\n const bPct = !!(g.bp_c ?? g.bp_s);\n\n const r = rPct ? (parseNum(g.r!) / 100) * 255 : parseNum(g.r!);\n const gc = gPct ? (parseNum(gRaw) / 100) * 255 : parseNum(gRaw);\n const b = bPct ? (parseNum(bRaw) / 100) * 255 : parseNum(bRaw);\n\n // Legacy: channels must match type, no `none`. Modern: mixing + `none` allowed.\n if (isComma) {\n if (rPct !== gPct || gPct !== bPct) return null;\n if (/^none$/i.test(g.r!) || /^none$/i.test(gRaw) || /^none$/i.test(bRaw)) return null;\n }\n\n const rawA = g.al_c ?? g.al_s;\n const aPct = !!(g.alp_c ?? g.alp_s);\n if (isComma && rawA !== undefined && /^none$/i.test(rawA)) return null;\n const alpha = rawA === undefined ? 1 : parseNum(rawA) / (aPct ? 100 : 1);\n\n return clampRgb({ r, g: gc, b, alpha });\n};\n"]} |
| 'use strict';var chunkX5FCFNQN_cjs=require('./chunk-X5FCFNQN.cjs'),chunk3V4MONNR_cjs=require('./chunk-3V4MONNR.cjs'),chunkYISEJCI6_cjs=require('./chunk-YISEJCI6.cjs');var F=.4122214708,K=.5363325363,U=.0514459929,z=.2119034982,q=.6806995451,D=.1073969566,H=.0883024619,J=.2817188376,P=.6299787005,Q=.2104542553,V=.793617785,W=-0.0040720468,X=1.9779984951,Y=-2.428592205,Z=.4505937099,nn=.0259040371,on=.7827717662,rn=-0.808675766,R=.3963377774,I=.2158037573,S=-0.1055613458,f=-0.0638541728,O=-0.0894841775,h=-1.291485548,B=4.0767416613,x=-3.3077115904,A=.2309699287,C=-1.2684380041,w=2.6097574007,T=-0.3413193963,y=-0.0041960865,G=-0.7034186145,d=1.7076147009;var tn=(o,n,r)=>{let t=Math.cbrt(F*o+K*n+U*r),s=Math.cbrt(z*o+q*n+D*r),c=Math.cbrt(H*o+J*n+P*r);return [Q*t+V*s+W*c,X*t+Y*s+Z*c,nn*t+on*s+rn*c]},bn=({r:o,g:n,b:r,alpha:t})=>{let[s,c,e]=tn(chunkX5FCFNQN_cjs.a(o/255),chunkX5FCFNQN_cjs.a(n/255),chunkX5FCFNQN_cjs.a(r/255));return {l:s,a:c,b:e,alpha:t}},N=({l:o,a:n,b:r,alpha:t})=>{let[s,c,e]=sn(o,n,r);return {r:chunkX5FCFNQN_cjs.b(s)*255,g:chunkX5FCFNQN_cjs.b(c)*255,b:chunkX5FCFNQN_cjs.b(e)*255,alpha:t}},an=({l:o,a:n,b:r,alpha:t})=>{let s=o+.3963377774*n+.2158037573*r,c=o-.1055613458*n-.0638541728*r,e=o-.0894841775*n-1.291485548*r,_=s**3,l=c**3,a=e**3,$=4.0767416613*_-3.3077115904*l+.2309699287*a,j=-1.2684380041*_+2.6097574007*l-.3413193963*a,E=-0.0041960865*_-.7034186145*l+1.7076147009*a;return chunk3V4MONNR_cjs.a({r:chunkX5FCFNQN_cjs.b(chunkYISEJCI6_cjs.a($,0,1))*255,g:chunkX5FCFNQN_cjs.b(chunkYISEJCI6_cjs.a(j,0,1))*255,b:chunkX5FCFNQN_cjs.b(chunkYISEJCI6_cjs.a(E,0,1))*255,alpha:t})},Mn=(o,n,r,t)=>{let s=n+R*r+I*t,c=n+S*r+f*t,e=n+O*r+h*t,_=s**3,l=c**3,a=e**3;o[0]=B*_+x*l+A*a,o[1]=C*_+w*l+T*a,o[2]=y*_+G*l+d*a;},sn=(o,n,r)=>{let t=o+R*n+I*r,s=o+S*n+f*r,c=o+O*n+h*r,e=t**3,_=s**3,l=c**3;return [B*e+x*_+A*l,C*e+w*_+T*l,y*e+G*_+d*l]},un=o=>{if(!chunkYISEJCI6_cjs.h(o)||o.colorSpace==="lab"||!chunkYISEJCI6_cjs.i(o,["l","a","b"])||"r"in o||"x"in o||"c"in o||"h"in o)return null;let{l:n,a:r,b:t,alpha:s=1}=o;return !chunkYISEJCI6_cjs.f(n)||!chunkYISEJCI6_cjs.f(r)||!chunkYISEJCI6_cjs.f(t)||!chunkYISEJCI6_cjs.f(s)||chunkYISEJCI6_cjs.g(n)>1?null:N({l:chunkYISEJCI6_cjs.g(n),a:chunkYISEJCI6_cjs.g(r),b:chunkYISEJCI6_cjs.g(t),alpha:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.g(s),0,1)})},cn=new RegExp(`^oklab\\(\\s*(?<l>${chunkYISEJCI6_cjs.k})(?<lp>%?)\\s+(?<a>${chunkYISEJCI6_cjs.k})(?<ap>%?)\\s+(?<b>${chunkYISEJCI6_cjs.k})(?<bp>%?)\\s*(?:/\\s*(?<al>${chunkYISEJCI6_cjs.k})(?<alp>%?)\\s*)?\\)$`,"i"),mn=o=>{if(typeof o!="string")return null;let n=cn.exec(o.trim())?.groups;if(!n)return null;let r=n.lp?chunkYISEJCI6_cjs.l(n.l)/100:chunkYISEJCI6_cjs.l(n.l),t=n.ap?chunkYISEJCI6_cjs.l(n.a)*.004:chunkYISEJCI6_cjs.l(n.a),s=n.bp?chunkYISEJCI6_cjs.l(n.b)*.004:chunkYISEJCI6_cjs.l(n.b),c=n.al===void 0?1:chunkYISEJCI6_cjs.l(n.al)/(n.alp?100:1);return N({l:r,a:t,b:s,alpha:chunkYISEJCI6_cjs.a(c,0,1)})};exports.a=tn;exports.b=bn;exports.c=N;exports.d=an;exports.e=Mn;exports.f=sn;exports.g=un;exports.h=mn;//# sourceMappingURL=chunk-44FDTAPT.cjs.map | ||
| //# sourceMappingURL=chunk-44FDTAPT.cjs.map |
| {"version":3,"sources":["../src/colorModels/oklab.ts"],"names":["M1_LR","M1_LG","M1_LB","M1_MR","M1_MG","M1_MB","M1_SR","M1_SG","M1_SB","M2_L_L","M2_M_L","M2_S_L","M2_L_A","M2_M_A","M2_S_A","M2_L_B","M2_M_B","M2_S_B","M2I_A_L","M2I_B_L","M2I_A_M","M2I_B_M","M2I_A_S","M2I_B_S","M1I_L_R","M1I_M_R","M1I_S_R","M1I_L_G","M1I_M_G","M1I_S_G","M1I_L_B","M1I_M_B","M1I_S_B","linearSrgbToOklab","lr","lg","lb","lv","mv","sv","rgbToOklab","r","g","b","alpha","l","a","bv","srgbToLinear","oklabToRgbUnclamped","oklabToLinear","srgbFromLinear","oklabToRgb","l_","m_","s_","clampRgb","clamp","oklabToLinearInto","out","parseOklabObject","input","isObject","hasKeys","isAnyNumber","sanitize","OKLAB_RE","NUM_OR_NONE","parseOklabString","L","parseNum"],"mappings":"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","file":"chunk-44FDTAPT.cjs","sourcesContent":["import { NUM_OR_NONE, clamp, hasKeys, isAnyNumber, isObject, parseNum, sanitize } from '../helpers.js';\nimport { srgbFromLinear, srgbToLinear } from '../transfer.js';\nimport type { OklabColor, RgbColor } from '../types.js';\nimport { clampRgb } from './rgb.js';\n\n// Björn Ottosson's OKLab matrix coefficients. Referenced by both the allocating\n// and zero-alloc (*Into) variants so the math lives in one place.\n// sRGB linear → LMS (cubed roots taken at M1 stage)\nconst M1_LR = 0.4122214708,\n M1_LG = 0.5363325363,\n M1_LB = 0.0514459929;\nconst M1_MR = 0.2119034982,\n M1_MG = 0.6806995451,\n M1_MB = 0.1073969566;\nconst M1_SR = 0.0883024619,\n M1_SG = 0.2817188376,\n M1_SB = 0.6299787005;\n// LMS' → OKLab\nconst M2_L_L = 0.2104542553,\n M2_M_L = 0.793617785,\n M2_S_L = -0.0040720468;\nconst M2_L_A = 1.9779984951,\n M2_M_A = -2.428592205,\n M2_S_A = 0.4505937099;\nconst M2_L_B = 0.0259040371,\n M2_M_B = 0.7827717662,\n M2_S_B = -0.808675766;\n// OKLab → LMS' (inverse of M2)\nconst M2I_A_L = 0.3963377774,\n M2I_B_L = 0.2158037573;\nconst M2I_A_M = -0.1055613458,\n M2I_B_M = -0.0638541728;\nconst M2I_A_S = -0.0894841775,\n M2I_B_S = -1.291485548;\n// LMS → linear sRGB (inverse of M1)\nconst M1I_L_R = 4.0767416613,\n M1I_M_R = -3.3077115904,\n M1I_S_R = 0.2309699287;\nconst M1I_L_G = -1.2684380041,\n M1I_M_G = 2.6097574007,\n M1I_S_G = -0.3413193963;\nconst M1I_L_B = -0.0041960865,\n M1I_M_B = -0.7034186145,\n M1I_S_B = 1.7076147009;\n\n/** Zero-allocation sibling of linearSrgbToOklab — writes [l, a, b] into `out`. */\nexport const linearSrgbToOklabInto = (out: Float64Array | number[], lr: number, lg: number, lb: number): void => {\n const lv = Math.cbrt(M1_LR * lr + M1_LG * lg + M1_LB * lb);\n const mv = Math.cbrt(M1_MR * lr + M1_MG * lg + M1_MB * lb);\n const sv = Math.cbrt(M1_SR * lr + M1_SG * lg + M1_SB * lb);\n out[0] = M2_L_L * lv + M2_M_L * mv + M2_S_L * sv;\n out[1] = M2_L_A * lv + M2_M_A * mv + M2_S_A * sv;\n out[2] = M2_L_B * lv + M2_M_B * mv + M2_S_B * sv;\n};\n\n/** Convert linear sRGB channels to OKLab (Björn Ottosson). No gamma, no clamping. */\nexport const linearSrgbToOklab = (lr: number, lg: number, lb: number): [number, number, number] => {\n const lv = Math.cbrt(M1_LR * lr + M1_LG * lg + M1_LB * lb);\n const mv = Math.cbrt(M1_MR * lr + M1_MG * lg + M1_MB * lb);\n const sv = Math.cbrt(M1_SR * lr + M1_SG * lg + M1_SB * lb);\n return [\n M2_L_L * lv + M2_M_L * mv + M2_S_L * sv,\n M2_L_A * lv + M2_M_A * mv + M2_S_A * sv,\n M2_L_B * lv + M2_M_B * mv + M2_S_B * sv,\n ];\n};\n\nexport const rgbToOklab = ({ r, g, b, alpha }: RgbColor): OklabColor => {\n const [l, a, bv] = linearSrgbToOklab(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n return { l, a, b: bv, alpha };\n};\n\n/** Unclamped OKLab → gamma-encoded sRGB. Channels may exceed [0, 255] for out-of-sRGB-gamut colors. */\nexport const oklabToRgbUnclamped = ({ l, a, b, alpha }: OklabColor): RgbColor => {\n const [lr, lg, lb] = oklabToLinear(l, a, b);\n return {\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n };\n};\n\nexport const oklabToRgb = ({ l, a, b, alpha }: OklabColor): RgbColor => {\n const l_ = l + 0.3963377774 * a + 0.2158037573 * b;\n const m_ = l - 0.1055613458 * a - 0.0638541728 * b;\n const s_ = l - 0.0894841775 * a - 1.291485548 * b;\n\n const lv = l_ ** 3;\n const mv = m_ ** 3;\n const sv = s_ ** 3;\n\n const r = 4.0767416613 * lv - 3.3077115904 * mv + 0.2309699287 * sv;\n const g = -1.2684380041 * lv + 2.6097574007 * mv - 0.3413193963 * sv;\n const bv = -0.0041960865 * lv - 0.7034186145 * mv + 1.7076147009 * sv;\n\n return clampRgb({\n r: srgbFromLinear(clamp(r, 0, 1)) * 255,\n g: srgbFromLinear(clamp(g, 0, 1)) * 255,\n b: srgbFromLinear(clamp(bv, 0, 1)) * 255,\n alpha,\n });\n};\n\n/** Zero-allocation sibling of oklabToLinear — writes [lr, lg, lb] into `out`. */\nexport const oklabToLinearInto = (out: Float64Array | number[], l: number, a: number, b: number): void => {\n const l_ = l + M2I_A_L * a + M2I_B_L * b;\n const m_ = l + M2I_A_M * a + M2I_B_M * b;\n const s_ = l + M2I_A_S * a + M2I_B_S * b;\n const lv = l_ ** 3,\n mv = m_ ** 3,\n sv = s_ ** 3;\n out[0] = M1I_L_R * lv + M1I_M_R * mv + M1I_S_R * sv;\n out[1] = M1I_L_G * lv + M1I_M_G * mv + M1I_S_G * sv;\n out[2] = M1I_L_B * lv + M1I_M_B * mv + M1I_S_B * sv;\n};\n\n/** Unclamped linear sRGB channels from OKLab values. Channels may exceed [0, 1] for out-of-gamut colors. */\nexport const oklabToLinear = (l: number, a: number, b: number): [number, number, number] => {\n const l_ = l + M2I_A_L * a + M2I_B_L * b;\n const m_ = l + M2I_A_M * a + M2I_B_M * b;\n const s_ = l + M2I_A_S * a + M2I_B_S * b;\n const lv = l_ ** 3,\n mv = m_ ** 3,\n sv = s_ ** 3;\n return [\n M1I_L_R * lv + M1I_M_R * mv + M1I_S_R * sv,\n M1I_L_G * lv + M1I_M_G * mv + M1I_S_G * sv,\n M1I_L_B * lv + M1I_M_B * mv + M1I_S_B * sv,\n ];\n};\n\nexport const parseOklabObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n // Objects with colorSpace: 'lab' are CIE Lab, not OKLab — let parseLabObject handle them.\n if ((input as { colorSpace?: unknown }).colorSpace === 'lab') return null;\n if (!hasKeys(input, ['l', 'a', 'b'])) return null;\n if ('r' in input || 'x' in input || 'c' in input || 'h' in input) return null;\n const { l, a, b, alpha = 1 } = input as { l: unknown; a: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(a) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n if (sanitize(l) > 1) return null; // OKLab L is always [0, 1]; reject CIE Lab values passed without colorSpace branding\n return oklabToRgbUnclamped({\n l: sanitize(l),\n a: sanitize(a),\n b: sanitize(b),\n alpha: clamp(sanitize(alpha), 0, 1),\n });\n};\n\nconst OKLAB_RE = new RegExp(\n `^oklab\\\\(\\\\s*(?<l>${NUM_OR_NONE})(?<lp>%?)\\\\s+(?<a>${NUM_OR_NONE})(?<ap>%?)\\\\s+(?<b>${NUM_OR_NONE})(?<bp>%?)` +\n `\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseOklabString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = OKLAB_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const L = g.lp ? parseNum(g.l!) / 100 : parseNum(g.l!); // 100% = 1\n const a = g.ap ? parseNum(g.a!) * 0.004 : parseNum(g.a!); // 100% = 0.4\n const b = g.bp ? parseNum(g.b!) * 0.004 : parseNum(g.b!);\n const alpha = g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1);\n return oklabToRgbUnclamped({ l: L, a, b, alpha: clamp(alpha, 0, 1) });\n};\n"]} |
| import {b,a}from'./chunk-IOXRZECH.mjs';var c=Array.from({length:256},(t,r)=>r.toString(16).padStart(2,"0")),n=t=>(t&15)+9*(t>>6),u=(t,r)=>n(t.charCodeAt(r))<<4|n(t.charCodeAt(r+1)),g=/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,f=t=>{if(typeof t!="string")return null;let r=t.trim();if(!g.test(r))return null;let o=r.length;if(o===4||o===5){let e=n(r.charCodeAt(1)),a=n(r.charCodeAt(2)),l=n(r.charCodeAt(3)),b$1=o===5?n(r.charCodeAt(4)):15;return {r:e|e<<4,g:a|a<<4,b:l|l<<4,alpha:b((b$1|b$1<<4)/255,3)}}return {r:u(r,1),g:u(r,3),b:u(r,5),alpha:o===9?b(u(r,7)/255,3):1}},m=({r:t,g:r,b:o,alpha:e})=>{let a$1="#"+c[a(Math.round(t),0,255)]+c[a(Math.round(r),0,255)]+c[a(Math.round(o),0,255)];return e<1?a$1+c[a(Math.round(e*255),0,255)]:a$1};export{f as a,m as b};//# sourceMappingURL=chunk-4JCO6H3F.mjs.map | ||
| //# sourceMappingURL=chunk-4JCO6H3F.mjs.map |
| {"version":3,"sources":["../src/colorModels/hex.ts"],"names":["HEX_BYTE","_","i","hexNibble","c","hexByte","s","HEX_RE","parseHex","input","len","rv","gv","bv","av","round","rgbToHex","r","g","b","alpha","hex","clamp"],"mappings":"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","file":"chunk-4JCO6H3F.mjs","sourcesContent":["import { clamp, round } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nconst HEX_BYTE = /* #__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\nconst hexNibble = (c: number): number => (c & 0xf) + 9 * (c >> 6);\nconst hexByte = (s: string, i: number): number => (hexNibble(s.charCodeAt(i)) << 4) | hexNibble(s.charCodeAt(i + 1));\nconst HEX_RE = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;\n\nexport const parseHex = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const s = input.trim();\n if (!HEX_RE.test(s)) return null;\n const len = s.length;\n\n if (len === 4 || len === 5) {\n const rv = hexNibble(s.charCodeAt(1));\n const gv = hexNibble(s.charCodeAt(2));\n const bv = hexNibble(s.charCodeAt(3));\n const av = len === 5 ? hexNibble(s.charCodeAt(4)) : 15;\n return { r: rv | (rv << 4), g: gv | (gv << 4), b: bv | (bv << 4), alpha: round((av | (av << 4)) / 255, 3) };\n }\n\n return {\n r: hexByte(s, 1),\n g: hexByte(s, 3),\n b: hexByte(s, 5),\n alpha: len === 9 ? round(hexByte(s, 7) / 255, 3) : 1,\n };\n};\n\nexport const rgbToHex = ({ r, g, b, alpha }: RgbColor): string => {\n const hex =\n '#' +\n HEX_BYTE[clamp(Math.round(r), 0, 255)] +\n HEX_BYTE[clamp(Math.round(g), 0, 255)] +\n HEX_BYTE[clamp(Math.round(b), 0, 255)];\n return alpha < 1 ? hex + HEX_BYTE[clamp(Math.round(alpha * 255), 0, 255)] : hex;\n};\n"]} |
| import {f,e,a}from'./chunk-OS5JUSWI.mjs';import {d,b as b$1}from'./chunk-OXYX6VNO.mjs';import {b}from'./chunk-FXCFKFXK.mjs';import {d as d$1,a as a$1}from'./chunk-IOXRZECH.mjs';var K=/^oklch\(\s*([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,q=/^oklab\(\s*([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(%?)\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,C=e=>{if(typeof e=="object"&&e!==null){let r=e;if("l"in r&&"a"in r&&"b"in r&&r.colorSpace!=="lab"&&!("c"in r)&&!("r"in r)){let n=e;if(typeof n.l=="number"&&typeof n.a=="number"&&typeof n.b=="number"&&typeof n.alpha=="number")return {l:n.l,a:n.a,b:n.b,alpha:n.alpha}}if("l"in r&&"c"in r&&"h"in r&&r.colorSpace!=="lch"&&!("a"in r)&&!("r"in r)){let n=e;if(typeof n.l=="number"&&typeof n.c=="number"&&typeof n.h=="number"){let o=n.h*Math.PI/180;return {l:n.l,a:n.c*Math.cos(o),b:n.c*Math.sin(o),alpha:n.alpha}}}if(r.colorSpace==="lab"){let n=e;if(typeof n.l!="number"||typeof n.a!="number"||typeof n.b!="number")return null;let{x:o,y:t,z:b}=d(n),[u,l,p]=b$1(o,t,b),[m,d$1,k]=a(u,l,p);return {l:m,a:d$1,b:k,alpha:typeof n.alpha=="number"?n.alpha:1}}return null}if(typeof e=="string"){let r=K.exec(e);if(r){let n=r[2]?Number(r[1])/100:Number(r[1]),o=r[4]?Number(r[3])*.004:Number(r[3]),t=r[6]?.toLowerCase()??"deg",u=Number(r[5])*(d$1[t]??1)*Math.PI/180,l=r[7]===void 0?1:Number(r[7])/(r[8]?100:1);return {l:n,a:o*Math.cos(u),b:o*Math.sin(u),alpha:l}}if(r=q.exec(e),r){let n=r[2]?Number(r[1])/100:Number(r[1]),o=r[4]?Number(r[3])*.004:Number(r[3]),t=r[6]?Number(r[5])*.004:Number(r[5]),b=r[7]===void 0?1:Number(r[7])/(r[8]?100:1);return {l:n,a:o,b:t,alpha:b}}return null}return null},c=5e-4,D=(e,r,n)=>e>=-c&&e<=1+c&&r>=-c&&r<=1+c&&n>=-c&&n<=1+c,O=(e,r,n)=>e>=0&&e<=1&&r>=0&&r<=1&&n>=0&&n<=1,Q=e=>{let r=C(e);if(r===null)return true;let[n,o,t]=f(r.l,r.a,r.b);return D(n,o,t)},E=.02,U=1e-4,F=(e,r)=>{let n=e[0]-r[0],o=e[1]-r[1],t=e[2]-r[2];return Math.sqrt(n*n+o*o+t*t)},_=(e,r,n,o,t,b)=>{if(e>=1)return {l:1,a:0,b:0,alpha:o};if(e<=0)return {l:0,a:0,b:0,alpha:o};let[u,l,p]=t(e,r,n);if(O(u,l,p))return {l:e,a:r,b:n,alpha:o};let m=b(a$1(u,0,1),a$1(l,0,1),a$1(p,0,1));if(F(m,[e,r,n])<=E)return {l:m[0],a:m[1],b:m[2],alpha:o};let d=Math.atan2(n,r),k=Math.sqrt(r*r+n*n),f=0,L=k,M=true,y=m;for(;L-f>U;){let i=(f+L)/2,N=i*Math.cos(d),x=i*Math.sin(d),[A,T,R]=t(e,N,x);if(M&&O(A,T,R)){f=i;continue}let I=b(a$1(A,0,1),a$1(T,0,1),a$1(R,0,1));y=I,F(I,[e,N,x])<=E?(f=i,M=false):L=i;}return {l:y[0],a:y[1],b:y[2],alpha:o}},V=e=>{let r=C(e);if(r===null)return null;let{l:n,a:o,b:t,alpha:b}=r;return _(n,o,t,b,f,a)},W=(e,r)=>{let n=C(e);if(n===null)return true;let[o,t,b]=r(n.l,n.a,n.b);return D(o,t,b)},Y=(e,r,n)=>{let o=C(e);if(o===null)return null;let{l:t,a:b,b:u,alpha:l}=o;return _(t,b,u,l,r,n)};var P=Math.PI/180,j=(e,r,n)=>{let o=n*P;return f(e,r*Math.cos(o),r*Math.sin(o))},z=(e$1,r,n,o)=>{let t=o*P;e(e$1,r,n*Math.cos(t),n*Math.sin(t));},er=(e,r,n)=>{let[o,t,b$1]=j(e,r,n);return [b(o),b(t),b(b$1)]},or=(e,r,n,o)=>{z(e,r,n,o),e[0]=b(e[0]),e[1]=b(e[1]),e[2]=b(e[2]);},tr=(e,r,n)=>{let[o,t,b$1]=j(e,r,n);return [[o,t,b$1],[b(o),b(t),b(b$1)]]},br=(e,r,n,o,t)=>{z(e,n,o,t),r[0]=b(e[0]),r[1]=b(e[1]),r[2]=b(e[2]);};export{Q as a,V as b,W as c,Y as d,j as e,z as f,er as g,or as h,tr as i,br as j};//# sourceMappingURL=chunk-AOK3BIZI.mjs.map | ||
| //# sourceMappingURL=chunk-AOK3BIZI.mjs.map |
| {"version":3,"sources":["../src/gamut.ts","../src/channels.ts"],"names":["OKLCH_RE","OKLAB_RE","getRawOklab","input","obj","c","hRad","x","y","z","labToXyz","lr","lg","lb","xyzD50ToLinearSrgb","ol","oa","ob","linearSrgbToOklab","m","l","unit","ANGLE_UNITS","alpha","a","b","EPS","isLinearInGamut","r","g","strictInGamut","inGamutSrgb","raw","oklabToLinear","JND","GAMUT_EPSILON","deltaEOK","lab1","lab2","dl","da","db","cssGamutMap","toLinear","fromLinear","r0","g0","b0","clip0","clamp","C","lo","hi","minInGamut","lastClip","mid","ma","mb","clipOklab","toGamutSrgbRaw","inGamutCustom","toGamutCustom","DEG_TO_RAD","oklchToLinear","h","oklchToLinearInto","out","oklabToLinearInto","oklchToRgbChannels","srgbFromLinear","oklchToRgbChannelsInto","oklchToLinearAndSrgb","oklchToLinearAndSrgbInto","linOut","srgbOut"],"mappings":"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","file":"chunk-AOK3BIZI.mjs","sourcesContent":["import { labToXyz } from './colorModels/lab.js';\nimport { linearSrgbToOklab, oklabToLinear } from './colorModels/oklab.js';\nimport { xyzD50ToLinearSrgb } from './colorModels/xyz.js';\nimport { ANGLE_UNITS, clamp } from './helpers.js';\nimport type { AnyColor, LabColor, OklabColor, OklchColor } from './types.js';\n\nconst OKLCH_RE =\n /^oklch\\(\\s*([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nconst OKLAB_RE =\n /^oklab\\(\\s*([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(%?)\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\n/**\n * Extract raw OKLab {l, a, b, alpha} without clamping.\n * Returns null for inputs that are already sRGB-bounded (hex, rgb, hsl, hsv, hwb, etc.).\n */\nconst getRawOklab = (input: AnyColor): { l: number; a: number; b: number; alpha: number } | null => {\n if (typeof input === 'object' && input !== null) {\n const obj = input as unknown as Record<string, unknown>;\n // OklabColor: l/a/b present, no 'lab' colorSpace brand\n if ('l' in obj && 'a' in obj && 'b' in obj && obj.colorSpace !== 'lab' && !('c' in obj) && !('r' in obj)) {\n const c = input as OklabColor;\n if (\n typeof c.l === 'number' &&\n typeof c.a === 'number' &&\n typeof c.b === 'number' &&\n typeof c.alpha === 'number'\n ) {\n return { l: c.l, a: c.a, b: c.b, alpha: c.alpha };\n }\n }\n // OklchColor: l/c/h present, no 'lch' colorSpace brand\n if ('l' in obj && 'c' in obj && 'h' in obj && obj.colorSpace !== 'lch' && !('a' in obj) && !('r' in obj)) {\n const c = input as OklchColor;\n if (typeof c.l === 'number' && typeof c.c === 'number' && typeof c.h === 'number') {\n const hRad = (c.h * Math.PI) / 180;\n return { l: c.l, a: c.c * Math.cos(hRad), b: c.c * Math.sin(hRad), alpha: c.alpha };\n }\n }\n // LabColor: convert Lab (D50) → XYZ D50 → D65 → linear sRGB → OKLab (no clamping)\n if (obj.colorSpace === 'lab') {\n const c = input as LabColor;\n if (typeof c.l !== 'number' || typeof c.a !== 'number' || typeof c.b !== 'number') return null;\n const { x, y, z } = labToXyz(c);\n const [lr, lg, lb] = xyzD50ToLinearSrgb(x, y, z);\n const [ol, oa, ob] = linearSrgbToOklab(lr, lg, lb);\n return { l: ol, a: oa, b: ob, alpha: typeof c.alpha === 'number' ? c.alpha : 1 };\n }\n return null;\n }\n\n if (typeof input === 'string') {\n let m = OKLCH_RE.exec(input);\n if (m) {\n const l = m[2] ? Number(m[1]) / 100 : Number(m[1]);\n const c = m[4] ? Number(m[3]) * 0.004 : Number(m[3]);\n const unit = m[6]?.toLowerCase() ?? 'deg';\n const hDeg = Number(m[5]) * (ANGLE_UNITS[unit] ?? 1);\n const hRad = (hDeg * Math.PI) / 180;\n const alpha = m[7] === undefined ? 1 : Number(m[7]) / (m[8] ? 100 : 1);\n return { l, a: c * Math.cos(hRad), b: c * Math.sin(hRad), alpha };\n }\n m = OKLAB_RE.exec(input);\n if (m) {\n const l = m[2] ? Number(m[1]) / 100 : Number(m[1]);\n const a = m[4] ? Number(m[3]) * 0.004 : Number(m[3]);\n const b = m[6] ? Number(m[5]) * 0.004 : Number(m[5]);\n const alpha = m[7] === undefined ? 1 : Number(m[7]) / (m[8] ? 100 : 1);\n return { l, a, b, alpha };\n }\n return null;\n }\n\n return null;\n};\n\n// Tolerance for inGamut* checks — NOT used in gamut mapping, which uses strict bounds.\n// Covers two sources of error:\n// 1. Matrix floating-point noise: accumulated cbrt + matrix error is ~3e-10\n// 2. Value rounding: OKLCH stored at 4 dp (L, C) / 2 dp (H) produces linear-sRGB\n// deviations up to 4.4e-4 on sRGB boundary colors (exhaustive scan of all 256^3 sRGB\n// values confirms this). EPS = 5e-4 absorbs all rounding artifacts while staying below\n// ~1.6 gamma-encoded steps (imperceptible), and correctly rejects genuine out-of-gamut\n// colors (typically 1e-3 and above).\nconst EPS = 5e-4;\n\nconst isLinearInGamut = (r: number, g: number, b: number): boolean =>\n r >= -EPS && r <= 1 + EPS && g >= -EPS && g <= 1 + EPS && b >= -EPS && b <= 1 + EPS;\n\nconst strictInGamut = (r: number, g: number, b: number): boolean =>\n r >= 0 && r <= 1 && g >= 0 && g <= 1 && b >= 0 && b <= 1;\n\n/**\n * Returns true if the color is within the sRGB gamut.\n * Always true for hex, rgb, hsl, hsv, and hwb inputs.\n * For oklch/oklab inputs, checks whether the computed linear sRGB channels are in [0, 1].\n */\nexport const inGamutSrgb = (input: AnyColor): boolean => {\n const raw = getRawOklab(input);\n if (raw === null) return true;\n const [r, g, b] = oklabToLinear(raw.l, raw.a, raw.b);\n return isLinearInGamut(r, g, b);\n};\n\n// CSS Color 4 gamut mapping constants\n// https://www.w3.org/TR/css-color-4/#css-gamut-mapping\nconst JND = 0.02;\nconst GAMUT_EPSILON = 0.0001;\n\n/** Euclidean distance in OKLab — the CSS Color 4 deltaEOK metric. */\nconst deltaEOK = (lab1: readonly [number, number, number], lab2: readonly [number, number, number]): number => {\n const dl = lab1[0] - lab2[0];\n const da = lab1[1] - lab2[1];\n const db = lab1[2] - lab2[2];\n return Math.sqrt(dl * dl + da * da + db * db);\n};\n\nexport type LinearConverter = (l: number, a: number, b: number) => [number, number, number];\nexport type FromLinearConverter = (r: number, g: number, b: number) => [number, number, number];\n\n/**\n * CSS Color 4 gamut mapping algorithm.\n * Binary-searches for the highest chroma where clip(color) is within JND (0.02 deltaEOK)\n * of the chroma-reduced color, then returns the clipped result.\n * This preserves lightness and hue while accepting only perceptually negligible clip error.\n *\n * toLinear: OKLab → unclamped linear target-space channels\n * fromLinear: linear target-space channels → OKLab (used to measure deltaEOK of clipped color)\n */\nconst cssGamutMap = (\n l: number,\n a: number,\n b: number,\n alpha: number,\n toLinear: LinearConverter,\n fromLinear: FromLinearConverter\n): OklabColor => {\n if (l >= 1) return { l: 1, a: 0, b: 0, alpha };\n if (l <= 0) return { l: 0, a: 0, b: 0, alpha };\n\n const [r0, g0, b0] = toLinear(l, a, b);\n if (strictInGamut(r0, g0, b0)) return { l, a, b, alpha };\n\n // Early exit: if the simple clip is already within JND, use it directly\n const clip0 = fromLinear(clamp(r0, 0, 1), clamp(g0, 0, 1), clamp(b0, 0, 1));\n if (deltaEOK(clip0, [l, a, b]) <= JND) {\n return { l: clip0[0], a: clip0[1], b: clip0[2], alpha };\n }\n\n const hRad = Math.atan2(b, a);\n const C = Math.sqrt(a * a + b * b);\n let lo = 0;\n let hi = C;\n let minInGamut = true;\n let lastClip: readonly [number, number, number] = clip0;\n\n while (hi - lo > GAMUT_EPSILON) {\n const mid = (lo + hi) / 2;\n const ma = mid * Math.cos(hRad);\n const mb = mid * Math.sin(hRad);\n const [lr, lg, lb] = toLinear(l, ma, mb);\n\n if (minInGamut && strictInGamut(lr, lg, lb)) {\n lo = mid;\n continue;\n }\n\n const clipOklab = fromLinear(clamp(lr, 0, 1), clamp(lg, 0, 1), clamp(lb, 0, 1));\n lastClip = clipOklab;\n const E = deltaEOK(clipOklab, [l, ma, mb]);\n\n if (E <= JND) {\n lo = mid;\n minInGamut = false;\n } else {\n hi = mid;\n }\n }\n\n return { l: lastClip[0], a: lastClip[1], b: lastClip[2], alpha };\n};\n\n/**\n * Maps an out-of-sRGB-gamut color using the CSS Color 4 algorithm.\n * Returns null for sRGB-bounded inputs (hex, rgb, hsl, etc.) — pass through unchanged.\n * Returns the mapped OklabColor otherwise.\n */\nexport const toGamutSrgbRaw = (input: AnyColor): OklabColor | null => {\n const raw = getRawOklab(input);\n if (raw === null) return null;\n const { l, a, b, alpha } = raw;\n return cssGamutMap(l, a, b, alpha, oklabToLinear, linearSrgbToOklab);\n};\n\nexport const inGamutCustom = (input: AnyColor, toLinear: LinearConverter): boolean => {\n const raw = getRawOklab(input);\n // sRGB-bounded inputs (hex, rgb, hsl, etc.) are always inside the wider P3/Rec.2020 gamut\n if (raw === null) return true;\n const [r, g, b] = toLinear(raw.l, raw.a, raw.b);\n return isLinearInGamut(r, g, b);\n};\n\n/**\n * Maps an out-of-gamut color into a custom gamut using the CSS Color 4 gamut mapping algorithm.\n * Returns null for sRGB-bounded inputs (hex, rgb, hsl, etc.) — pass through unchanged.\n * Returns the mapped OklabColor otherwise.\n * toLinear: OKLab → unclamped linear target-space channels\n * fromLinear: linear target-space channels → OKLab (for deltaEOK of clipped colors)\n */\nexport const toGamutCustom = (\n input: AnyColor,\n toLinear: LinearConverter,\n fromLinear: FromLinearConverter\n): OklabColor | null => {\n const raw = getRawOklab(input);\n if (raw === null) return null;\n const { l, a, b, alpha } = raw;\n return cssGamutMap(l, a, b, alpha, toLinear, fromLinear);\n};\n","import { oklabToLinear, oklabToLinearInto } from './colorModels/oklab.js';\nimport { srgbFromLinear } from './transfer.js';\n\nconst DEG_TO_RAD = Math.PI / 180;\n\n/**\n * Convert OKLCH to unclamped linear sRGB channels without object allocation.\n * This is the shared expensive step (OKLCH → OKLab → linear sRGB via 3× cbrt + matrix).\n * Use this when you need multiple color spaces from the same color — compute once,\n * then pass to linearToP3Channels / linearToRec2020Channels (from their plugins) to avoid duplicate work.\n *\n * In-gamut sRGB colors have all channels in [0, 1]. Channels outside this range\n * indicate an out-of-gamut color — use as a free gamut check.\n */\nexport const oklchToLinear = (l: number, c: number, h: number): [number, number, number] => {\n const hRad = h * DEG_TO_RAD;\n return oklabToLinear(l, c * Math.cos(hRad), c * Math.sin(hRad));\n};\n\n/** Zero-allocation sibling of oklchToLinear — writes [lr, lg, lb] into `out`. */\nexport const oklchToLinearInto = (out: Float64Array | number[], l: number, c: number, h: number): void => {\n const hRad = h * DEG_TO_RAD;\n oklabToLinearInto(out, l, c * Math.cos(hRad), c * Math.sin(hRad));\n};\n\n/**\n * Convert OKLCH to gamma-encoded sRGB channels without object allocation.\n * Returns [r, g, b] in [0, 1] for in-gamut colors. Out-of-gamut channels may\n * exceed this range — callers are responsible for clamping before byte encoding.\n */\nexport const oklchToRgbChannels = (l: number, c: number, h: number): [number, number, number] => {\n const [r, g, b] = oklchToLinear(l, c, h);\n return [srgbFromLinear(r), srgbFromLinear(g), srgbFromLinear(b)];\n};\n\n/** Zero-allocation sibling of oklchToRgbChannels — writes [r, g, b] (gamma-encoded, 0–1) into `out`. */\nexport const oklchToRgbChannelsInto = (out: Float64Array | number[], l: number, c: number, h: number): void => {\n oklchToLinearInto(out, l, c, h);\n out[0] = srgbFromLinear(out[0]!);\n out[1] = srgbFromLinear(out[1]!);\n out[2] = srgbFromLinear(out[2]!);\n};\n\n/**\n * Convert OKLCH to both linear and gamma-encoded sRGB channels in a single pass.\n * Avoids recomputing the expensive OKLCH → OKLab → linear step when you need both.\n *\n * Linear channels are useful for gamut checks (all in [0,1] = in sRGB gamut)\n * and as input to P3/Rec2020 conversion matrices.\n * Gamma channels are ready for display on an sRGB canvas (still need clamping for out-of-gamut).\n *\n * Returns [[lr, lg, lb], [sr, sg, sb]] — both in [0, 1] for in-gamut colors.\n */\nexport const oklchToLinearAndSrgb = (\n l: number,\n c: number,\n h: number\n): [[number, number, number], [number, number, number]] => {\n const [lr, lg, lb] = oklchToLinear(l, c, h);\n return [\n [lr, lg, lb],\n [srgbFromLinear(lr), srgbFromLinear(lg), srgbFromLinear(lb)],\n ];\n};\n\n/**\n * Zero-allocation sibling of oklchToLinearAndSrgb — writes linear channels into `linOut`\n * and gamma-encoded sRGB channels into `srgbOut`. The two buffers must be distinct.\n */\nexport const oklchToLinearAndSrgbInto = (\n linOut: Float64Array | number[],\n srgbOut: Float64Array | number[],\n l: number,\n c: number,\n h: number\n): void => {\n oklchToLinearInto(linOut, l, c, h);\n srgbOut[0] = srgbFromLinear(linOut[0]!);\n srgbOut[1] = srgbFromLinear(linOut[1]!);\n srgbOut[2] = srgbFromLinear(linOut[2]!);\n};\n"]} |
| 'use strict';var chunkX5FCFNQN_cjs=require('./chunk-X5FCFNQN.cjs'),chunk3V4MONNR_cjs=require('./chunk-3V4MONNR.cjs'),chunkYISEJCI6_cjs=require('./chunk-YISEJCI6.cjs');var q=96.4295675298354,G=100,N=82.51046025104603,U=({r:o,g:t,b:r,alpha:s})=>{let n=chunkX5FCFNQN_cjs.a(o/255),a=chunkX5FCFNQN_cjs.a(t/255),c=chunkX5FCFNQN_cjs.a(r/255),e=100*(.4123907992659595*n+.35758433938387796*a+.1804807884018343*c),l=100*(.21263900587151036*n+.7151686787677559*a+.07219231536073371*c),p=100*(.01933081871559185*n+.11919477979462599*a+.9505321522496606*c);return {x:1.0479297925449969*e+.022946870601609652*l-.05019226628920524*p,y:.02962780877005599*e+.9904344267538799*l-.017073799063418826*p,z:-0.009243040646204504*e+.015055191490298152*l+.7518742814281371*p,alpha:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(s,3),0,1)}},c0=.955473421488075,l0=-0.02309845494876471,e0=.06325924320057072,b0=-0.0283697093338637,p0=1.0099953980813041,u0=.021041441191917323,h0=.012314014864481998,m0=-0.020507649298898964,g0=1.330365926242124,C0=.032409699419045215,y0=-0.015373831775700935,i0=-0.004986107602930032,x0=-0.009692436362808799,X0=.018759675015077207,_0=.0004155505740717561,f0=.000556300796969936,R0=-0.002039769588889766,L0=.010569715142428786;var v=(o,t,r)=>{let s=c0*o+l0*t+e0*r,n=b0*o+p0*t+u0*r,a=h0*o+m0*t+g0*r;return [C0*s+y0*n+i0*a,x0*s+X0*n+_0*a,f0*s+R0*n+L0*a]},J=({x:o,y:t,z:r,alpha:s})=>{let[n,a,c]=v(o,t,r);return chunk3V4MONNR_cjs.a({r:chunkX5FCFNQN_cjs.b(n)*255,g:chunkX5FCFNQN_cjs.b(a)*255,b:chunkX5FCFNQN_cjs.b(c)*255,alpha:s})},z0=({x:o,y:t,z:r,alpha:s})=>{let[n,a,c]=v(o,t,r);return {r:chunkX5FCFNQN_cjs.b(n)*255,g:chunkX5FCFNQN_cjs.b(a)*255,b:chunkX5FCFNQN_cjs.b(c)*255,alpha:s}},Y0=o=>{if(!chunkYISEJCI6_cjs.h(o)||!chunkYISEJCI6_cjs.i(o,["x","y","z"]))return null;let{x:t,y:r,z:s,alpha:n=1}=o;return !chunkYISEJCI6_cjs.e(t)||!chunkYISEJCI6_cjs.e(r)||!chunkYISEJCI6_cjs.e(s)||!chunkYISEJCI6_cjs.e(n)?null:z0({x:t,y:r,z:s,alpha:chunkYISEJCI6_cjs.a(n,0,1)})};var d0=.3127/.329*100,M0=100,T0=(1-.3127-.329)/.329*100,O=216/24389,M=24389/27,i=o=>o>O?Math.cbrt(o):(M*o+16)/116,B0=({x:o,y:t,z:r,alpha:s})=>{let n=i(t/G);return {l:116*n-16,a:500*(i(o/q)-n)||0,b:200*(n-i(r/N))||0,alpha:chunkYISEJCI6_cjs.b(s,3),colorSpace:"lab"}},w0=({l:o,a:t,b:r,alpha:s})=>{let n=(o+16)/116,a=t/500+n,c=n-r/200;return {x:(a**3>O?a**3:(116*a-16)/M)*q,y:(o>8?n**3:o/M)*G,z:(c**3>O?c**3:(116*c-16)/M)*N,alpha:s}},O0=o=>B0(U(o)),j0=({r:o,g:t,b:r,alpha:s})=>{let n=chunkX5FCFNQN_cjs.a(o/255),a=chunkX5FCFNQN_cjs.a(t/255),c=chunkX5FCFNQN_cjs.a(r/255),e=100*(.4123907992659595*n+.35758433938387796*a+.1804807884018343*c),l=100*(.21263900587151036*n+.7151686787677559*a+.07219231536073371*c),p=100*(.01933081871559185*n+.11919477979462599*a+.9505321522496606*c),x=i(l/M0);return {l:116*x-16,a:500*(i(e/d0)-x)||0,b:200*(x-i(p/T0))||0,alpha:chunkYISEJCI6_cjs.b(s,3),colorSpace:"lab"}},A0=(o,t)=>{let{l:r,a:s,b:n}=o,{l:a,a:c,b:e}=t,l=Math.PI/180,p=180/Math.PI,x=Math.sqrt(s**2+n**2),V=Math.sqrt(c**2+e**2),j=((x+V)/2)**7,A=.5*(1-Math.sqrt(j/(j+25**7))),T=s*(1+A),B=c*(1+A),w=Math.sqrt(T**2+n**2),D=Math.sqrt(B**2+e**2),S=(w+D)/2,k=T===0&&n===0?0:Math.atan2(n,T)*p,W=B===0&&e===0?0:Math.atan2(e,B)*p,C=k<0?k+360:k,y=W<0?W+360:W,Y=y-C,Z=Math.abs(y-C);Z>180&&y<=C?Y+=360:Z>180&&y>C&&(Y-=360);let E=(r+a)/2,b=C+y;Z<=180?b/=2:b=(C+y<360?b+360:b-360)/2;let o0=1-.17*Math.cos(l*(b-30))+.24*Math.cos(2*l*b)+.32*Math.cos(l*(3*b+6))-.2*Math.cos(l*(4*b-63)),n0=a-r,P=D-w,$=2*Math.sin(l*Y/2)*Math.sqrt(w*D),t0=1+.015*(E-50)**2/Math.sqrt(20+(E-50)**2),I=1+.045*S,H=1+.015*S*o0,K=S**7,r0=2*Math.sqrt(K/(K+25**7)),s0=30*Math.exp(-(((b-275)/25)**2)),a0=-r0*Math.sin(2*l*s0);return Math.sqrt((n0/t0)**2+(P/I)**2+($/H)**2+a0*(P/I)*($/H))},Q=o=>J(w0(o)),D0=new RegExp(`^lab\\(\\s*(?<l>${chunkYISEJCI6_cjs.k})(?<lp>%?)\\s+(?<a>${chunkYISEJCI6_cjs.k})(?<ap>%?)\\s+(?<b>${chunkYISEJCI6_cjs.k})(?<bp>%?)\\s*(?:/\\s*(?<al>${chunkYISEJCI6_cjs.k})(?<alp>%?)\\s*)?\\)$`,"i"),E0=o=>{if(typeof o!="string")return null;let t=D0.exec(o.trim())?.groups;if(!t)return null;let r=chunkYISEJCI6_cjs.l(t.l),s=t.ap?chunkYISEJCI6_cjs.l(t.a)*1.25:chunkYISEJCI6_cjs.l(t.a),n=t.bp?chunkYISEJCI6_cjs.l(t.b)*1.25:chunkYISEJCI6_cjs.l(t.b),a=t.al===void 0?1:chunkYISEJCI6_cjs.l(t.al)/(t.alp?100:1);return Q({l:chunkYISEJCI6_cjs.a(r,0,100),a:s,b:n,alpha:chunkYISEJCI6_cjs.a(a,0,1)})},P0=o=>{if(!chunkYISEJCI6_cjs.h(o)||o.colorSpace!=="lab"||!chunkYISEJCI6_cjs.i(o,["l","a","b"]))return null;let{l:t,a:r,b:s,alpha:n=1}=o;return !chunkYISEJCI6_cjs.f(t)||!chunkYISEJCI6_cjs.f(r)||!chunkYISEJCI6_cjs.f(s)||!chunkYISEJCI6_cjs.f(n)?null:Q({l:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.g(t),0,100),a:chunkYISEJCI6_cjs.g(r),b:chunkYISEJCI6_cjs.g(s),alpha:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.g(n),0,1)})};exports.a=U;exports.b=v;exports.c=Y0;exports.d=w0;exports.e=O0;exports.f=j0;exports.g=A0;exports.h=Q;exports.i=E0;exports.j=P0;//# sourceMappingURL=chunk-EDNIB75Q.cjs.map | ||
| //# sourceMappingURL=chunk-EDNIB75Q.cjs.map |
| {"version":3,"sources":["../src/colorModels/xyz.ts","../src/colorModels/lab.ts"],"names":["D50_WX","D50_WY","D50_WZ","rgbToXyz","r","g","b","alpha","lr","srgbToLinear","lg","lb","xd65","yd65","zd65","clamp","round","B_XR","B_XG","B_XB","B_YR","B_YG","B_YB","B_ZR","B_ZG","B_ZB","X_RX","X_RY","X_RZ","X_GX","X_GY","X_GZ","X_BX","X_BY","X_BZ","xyzD50ToLinearSrgb","x","y","z","xyzToRgb","clampRgb","srgbFromLinear","xyzToRgbUnclamped","parseXyzObject","input","isObject","hasKeys","isNumber","D65_WX","D65_WY","D65_WZ","EPSILON","KAPPA","f","t","xyzToLab","fy","labToXyz","l","a","fx","fz","rgbToLab","rgb","rgbToLabD65","deltaE2000","lab1","lab2","L1","a1","b1","L2","a2","b2","rad","deg","C1","C2","Cab","G","a1p","a2p","C1p","C2p","Cp","h1p","h2p","h1","h2","dhp","absDh","Lm","Hm","T","dLp","dCp","dHp","SL","SC","SH","RC7","RC","dTheta","RT","labToRgb","lab","LAB_RE","NUM_OR_NONE","parseLabString","parseNum","parseLabObject","isAnyNumber","sanitize"],"mappings":"uKAMO,IAAMA,CAAAA,CAAS,gBAAA,CACTC,CAAAA,CAAS,GAAA,CACTC,CAAAA,CAAS,iBAAA,CAETC,CAAAA,CAAW,CAAC,CAAE,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,KAAA,CAAAC,CAAM,CAAA,GAA0B,CAClE,IAAMC,CAAAA,CAAKC,mBAAAA,CAAaL,CAAAA,CAAI,GAAG,CAAA,CAC7BM,CAAAA,CAAKD,mBAAAA,CAAaJ,CAAAA,CAAI,GAAG,CAAA,CACzBM,CAAAA,CAAKF,mBAAAA,CAAaH,CAAAA,CAAI,GAAG,CAAA,CAErBM,CAAAA,CAAO,GAAA,EAAO,iBAAA,CAAsBJ,CAAAA,CAAK,kBAAA,CAAsBE,CAAAA,CAAK,iBAAA,CAAsBC,CAAAA,CAAAA,CAC1FE,CAAAA,CAAO,GAAA,EAAO,kBAAA,CAAsBL,CAAAA,CAAK,iBAAA,CAAsBE,CAAAA,CAAK,kBAAA,CAAuBC,CAAAA,CAAAA,CAC3FG,CAAAA,CAAO,GAAA,EAAO,kBAAA,CAAuBN,CAAAA,CAAK,kBAAA,CAAsBE,CAAAA,CAAK,iBAAA,CAAsBC,CAAAA,CAAAA,CAEjG,OAAO,CACL,EAAG,kBAAA,CAAqBC,CAAAA,CAAO,mBAAA,CAAuBC,CAAAA,CAAO,kBAAA,CAAsBC,CAAAA,CACnF,CAAA,CAAG,kBAAA,CAAsBF,CAAAA,CAAO,iBAAA,CAAqBC,CAAAA,CAAO,mBAAA,CAAuBC,CAAAA,CACnF,CAAA,CAAG,qBAAA,CAAwBF,CAAAA,CAAO,mBAAA,CAAuBC,CAAAA,CAAO,iBAAA,CAAqBC,CAAAA,CACrF,KAAA,CAAOC,mBAAAA,CAAMC,mBAAAA,CAAMT,CAAAA,CAAO,CAAC,CAAA,CAAG,CAAA,CAAG,CAAC,CACpC,CACF,CAAA,CAIMU,EAAAA,CAAO,iBACXC,EAAAA,CAAO,oBAAA,CACPC,EAAAA,CAAO,kBAAA,CACHC,EAAAA,CAAO,mBAAA,CACXC,EAAAA,CAAO,kBAAA,CACPC,EAAAA,CAAO,mBAAA,CACHC,EAAAA,CAAO,mBAAA,CACXC,EAAAA,CAAO,qBAAA,CACPC,EAAAA,CAAO,iBAAA,CACHC,GAAO,mBAAA,CACXC,EAAAA,CAAO,qBAAA,CACPC,EAAAA,CAAO,qBAAA,CACHC,EAAAA,CAAO,qBAAA,CACXC,EAAAA,CAAO,mBAAA,CACPC,EAAAA,CAAO,oBAAA,CACHC,EAAAA,CAAO,mBAAA,CACXC,EAAAA,CAAO,qBAAA,CACPC,EAAAA,CAAO,oBAaF,IAAMC,CAAAA,CAAqB,CAACC,CAAAA,CAAWC,CAAAA,CAAWC,CAAAA,GAAwC,CAC/F,IAAM1B,CAAAA,CAAOK,EAAAA,CAAOmB,CAAAA,CAAIlB,EAAAA,CAAOmB,CAAAA,CAAIlB,EAAAA,CAAOmB,CAAAA,CACpCzB,CAAAA,CAAOO,EAAAA,CAAOgB,CAAAA,CAAIf,EAAAA,CAAOgB,CAAAA,CAAIf,EAAAA,CAAOgB,CAAAA,CACpCxB,CAAAA,CAAOS,EAAAA,CAAOa,CAAAA,CAAIZ,EAAAA,CAAOa,CAAAA,CAAIZ,EAAAA,CAAOa,CAAAA,CAC1C,OAAO,CACLZ,EAAAA,CAAOd,EAAOe,EAAAA,CAAOd,CAAAA,CAAOe,EAAAA,CAAOd,CAAAA,CACnCe,EAAAA,CAAOjB,CAAAA,CAAOkB,EAAAA,CAAOjB,CAAAA,CAAOkB,EAAAA,CAAOjB,CAAAA,CACnCkB,EAAAA,CAAOpB,CAAAA,CAAOqB,EAAAA,CAAOpB,CAAAA,CAAOqB,EAAAA,CAAOpB,CACrC,CACF,CAAA,CAEayB,CAAAA,CAAW,CAAC,CAAE,CAAA,CAAAH,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,KAAA,CAAA/B,CAAM,CAAA,GAA0B,CAClE,GAAM,CAACC,EAAIE,CAAAA,CAAIC,CAAE,CAAA,CAAIwB,CAAAA,CAAmBC,CAAAA,CAAGC,CAAAA,CAAGC,CAAC,CAAA,CAC/C,OAAOE,mBAAAA,CAAS,CACd,CAAA,CAAGC,mBAAAA,CAAejC,CAAE,CAAA,CAAI,GAAA,CACxB,CAAA,CAAGiC,mBAAAA,CAAe/B,CAAE,CAAA,CAAI,GAAA,CACxB,CAAA,CAAG+B,mBAAAA,CAAe9B,CAAE,CAAA,CAAI,GAAA,CACxB,KAAA,CAAAJ,CACF,CAAC,CACH,CAAA,CAGMmC,EAAAA,CAAoB,CAAC,CAAE,CAAA,CAAAN,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,KAAA,CAAA/B,CAAM,CAAA,GAA0B,CACpE,GAAM,CAACC,CAAAA,CAAIE,CAAAA,CAAIC,CAAE,EAAIwB,CAAAA,CAAmBC,CAAAA,CAAGC,CAAAA,CAAGC,CAAC,CAAA,CAC/C,OAAO,CACL,CAAA,CAAGG,mBAAAA,CAAejC,CAAE,CAAA,CAAI,GAAA,CACxB,CAAA,CAAGiC,mBAAAA,CAAe/B,CAAE,CAAA,CAAI,IACxB,CAAA,CAAG+B,mBAAAA,CAAe9B,CAAE,CAAA,CAAI,GAAA,CACxB,KAAA,CAAAJ,CACF,CACF,CAAA,CAEaoC,EAAAA,CAAkBC,CAAAA,EAAoC,CAEjE,GADI,CAACC,mBAAAA,CAASD,CAAK,CAAA,EACf,CAACE,mBAAAA,CAAQF,CAAAA,CAAO,CAAC,GAAA,CAAK,GAAA,CAAK,GAAG,CAAC,CAAA,CAAG,OAAO,IAAA,CAC7C,GAAM,CAAE,CAAA,CAAAR,CAAAA,CAAG,EAAAC,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,KAAA,CAAA/B,CAAAA,CAAQ,CAAE,CAAA,CAAIqC,CAAAA,CAC/B,OAAI,CAACG,mBAAAA,CAASX,CAAC,CAAA,EAAK,CAACW,mBAAAA,CAASV,CAAC,CAAA,EAAK,CAACU,mBAAAA,CAAST,CAAC,CAAA,EAAK,CAACS,mBAAAA,CAASxC,CAAK,CAAA,CAAU,IAAA,CACtEmC,EAAAA,CAAkB,CACvB,CAAA,CAAAN,CAAAA,CACA,CAAA,CAAAC,CAAAA,CACA,EAAAC,CAAAA,CACA,KAAA,CAAOvB,mBAAAA,CAAMR,CAAAA,CAAO,CAAA,CAAG,CAAC,CAC1B,CAAC,CACH,EChGA,IAAMyC,EAAAA,CAAU,KAAA,CAAS,IAAA,CAAS,GAAA,CAC5BC,EAAAA,CAAS,GAAA,CACTC,EAAAA,CAAAA,CAAW,CAAA,CAAI,KAAA,CAAS,IAAA,EAAS,IAAA,CAAS,GAAA,CAE1CC,CAAAA,CAAU,GAAA,CAAM,KAAA,CAChBC,CAAAA,CAAQ,KAAA,CAAQ,EAAA,CAEhBC,CAAAA,CAAKC,CAAAA,EAAeA,CAAAA,CAAIH,EAAU,IAAA,CAAK,IAAA,CAAKG,CAAC,CAAA,CAAA,CAAKF,CAAAA,CAAQE,CAAAA,CAAI,EAAA,EAAM,GAAA,CAE7DC,EAAAA,CAAW,CAAC,CAAE,CAAA,CAAAnB,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAAC,EAAG,KAAA,CAAA/B,CAAM,CAAA,GAA0B,CAClE,IAAMiD,CAAAA,CAAKH,CAAAA,CAAEhB,CAAAA,CAAIpC,CAAE,CAAA,CACnB,OAAO,CACL,CAAA,CAAG,GAAA,CAAMuD,CAAAA,CAAK,EAAA,CACd,EAAG,GAAA,EAAOH,CAAAA,CAAEjB,CAAAA,CAAIpC,CAAE,CAAA,CAAIwD,CAAAA,CAAAA,EAAO,CAAA,CAC7B,CAAA,CAAG,GAAA,EAAOA,CAAAA,CAAKH,CAAAA,CAAEf,CAAAA,CAAIpC,CAAE,CAAA,CAAA,EAAM,CAAA,CAC7B,KAAA,CAAOc,mBAAAA,CAAMT,CAAAA,CAAO,CAAC,CAAA,CACrB,UAAA,CAAY,KACd,CACF,CAAA,CAEakD,EAAAA,CAAW,CAAC,CAAE,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAArD,EAAG,KAAA,CAAAC,CAAM,CAAA,GAA0B,CAClE,IAAMiD,CAAAA,CAAAA,CAAME,CAAAA,CAAI,EAAA,EAAM,GAAA,CAChBE,CAAAA,CAAKD,CAAAA,CAAI,GAAA,CAAMH,CAAAA,CACfK,CAAAA,CAAKL,CAAAA,CAAKlD,CAAAA,CAAI,IACpB,OAAO,CACL,CAAA,CAAA,CAAIsD,CAAAA,EAAM,CAAA,CAAIT,CAAAA,CAAUS,CAAAA,EAAM,CAAA,CAAA,CAAK,GAAA,CAAMA,CAAAA,CAAK,EAAA,EAAMR,CAAAA,EAASpD,CAAAA,CAC7D,CAAA,CAAA,CAAI0D,CAAAA,CAAI,CAAA,CAAIF,GAAM,CAAA,CAAIE,CAAAA,CAAIN,CAAAA,EAASnD,CAAAA,CACnC,CAAA,CAAA,CAAI4D,CAAAA,EAAM,CAAA,CAAIV,CAAAA,CAAUU,CAAAA,EAAM,CAAA,CAAA,CAAK,GAAA,CAAMA,CAAAA,CAAK,EAAA,EAAMT,CAAAA,EAASlD,CAAAA,CAC7D,KAAA,CAAAK,CACF,CACF,CAAA,CAEauD,EAAAA,CAAYC,CAAAA,EAA4BR,EAAAA,CAASpD,CAAAA,CAAS4D,CAAG,CAAC,CAAA,CAG9DC,EAAAA,CAAc,CAAC,CAAE,CAAA,CAAA5D,CAAAA,CAAG,CAAA,CAAAC,EAAG,CAAA,CAAAC,CAAAA,CAAG,KAAA,CAAAC,CAAM,CAAA,GAA0B,CACrE,IAAMC,CAAAA,CAAKC,mBAAAA,CAAaL,CAAAA,CAAI,GAAG,CAAA,CAC7BM,CAAAA,CAAKD,mBAAAA,CAAaJ,CAAAA,CAAI,GAAG,EACzBM,CAAAA,CAAKF,mBAAAA,CAAaH,CAAAA,CAAI,GAAG,CAAA,CACrB8B,CAAAA,CAAI,GAAA,EAAO,iBAAA,CAAsB5B,CAAAA,CAAK,kBAAA,CAAsBE,CAAAA,CAAK,iBAAA,CAAsBC,CAAAA,CAAAA,CACvF0B,CAAAA,CAAI,GAAA,EAAO,kBAAA,CAAsB7B,EAAK,iBAAA,CAAsBE,CAAAA,CAAK,kBAAA,CAAuBC,CAAAA,CAAAA,CACxF2B,CAAAA,CAAI,GAAA,EAAO,kBAAA,CAAuB9B,CAAAA,CAAK,kBAAA,CAAsBE,CAAAA,CAAK,iBAAA,CAAsBC,CAAAA,CAAAA,CACxF6C,CAAAA,CAAKH,CAAAA,CAAEhB,CAAAA,CAAIY,EAAM,CAAA,CACvB,OAAO,CACL,CAAA,CAAG,GAAA,CAAMO,CAAAA,CAAK,EAAA,CACd,CAAA,CAAG,GAAA,EAAOH,CAAAA,CAAEjB,CAAAA,CAAIY,EAAM,CAAA,CAAIQ,CAAAA,CAAAA,EAAO,CAAA,CACjC,CAAA,CAAG,KAAOA,CAAAA,CAAKH,CAAAA,CAAEf,CAAAA,CAAIY,EAAM,CAAA,CAAA,EAAM,CAAA,CACjC,KAAA,CAAOlC,mBAAAA,CAAMT,CAAAA,CAAO,CAAC,CAAA,CACrB,UAAA,CAAY,KACd,CACF,CAAA,CAEa0D,EAAAA,CAAa,CAACC,CAAAA,CAAgBC,CAAAA,GAA2B,CACpE,GAAM,CAAE,CAAA,CAAGC,CAAAA,CAAI,CAAA,CAAGC,CAAAA,CAAI,CAAA,CAAGC,CAAG,CAAA,CAAIJ,CAAAA,CAC1B,CAAE,CAAA,CAAGK,EAAI,CAAA,CAAGC,CAAAA,CAAI,CAAA,CAAGC,CAAG,CAAA,CAAIN,CAAAA,CAC1BO,CAAAA,CAAM,IAAA,CAAK,EAAA,CAAK,GAAA,CAChBC,CAAAA,CAAM,GAAA,CAAM,IAAA,CAAK,EAAA,CAEjBC,CAAAA,CAAK,IAAA,CAAK,IAAA,CAAKP,CAAAA,EAAM,CAAA,CAAIC,CAAAA,EAAM,CAAC,CAAA,CAChCO,CAAAA,CAAK,IAAA,CAAK,IAAA,CAAKL,CAAAA,EAAM,CAAA,CAAIC,CAAAA,EAAM,CAAC,CAAA,CAChCK,CAAAA,CAAAA,CAAAA,CAAQF,CAAAA,CAAKC,GAAM,CAAA,GAAM,CAAA,CACzBE,CAAAA,CAAI,EAAA,EAAO,CAAA,CAAI,IAAA,CAAK,IAAA,CAAKD,CAAAA,EAAOA,CAAAA,CAAM,EAAA,EAAM,CAAA,CAAE,CAAA,CAAA,CAC9CE,CAAAA,CAAMX,CAAAA,EAAM,CAAA,CAAIU,CAAAA,CAAAA,CAChBE,EAAMT,CAAAA,EAAM,CAAA,CAAIO,CAAAA,CAAAA,CAChBG,CAAAA,CAAM,IAAA,CAAK,IAAA,CAAKF,CAAAA,EAAO,CAAA,CAAIV,CAAAA,EAAM,CAAC,CAAA,CAClCa,CAAAA,CAAM,IAAA,CAAK,IAAA,CAAKF,CAAAA,EAAO,CAAA,CAAIR,GAAM,CAAC,CAAA,CAClCW,CAAAA,CAAAA,CAAMF,CAAAA,CAAMC,CAAAA,EAAO,CAAA,CAEnBE,CAAAA,CAAML,CAAAA,GAAQ,CAAA,EAAKV,CAAAA,GAAO,CAAA,CAAI,CAAA,CAAI,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAIU,CAAG,CAAA,CAAIL,CAAAA,CACxDW,CAAAA,CAAML,CAAAA,GAAQ,CAAA,EAAKR,CAAAA,GAAO,CAAA,CAAI,CAAA,CAAI,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAIQ,CAAG,CAAA,CAAIN,CAAAA,CACxDY,CAAAA,CAAKF,CAAAA,CAAM,EAAIA,CAAAA,CAAM,GAAA,CAAMA,CAAAA,CAC3BG,CAAAA,CAAKF,CAAAA,CAAM,CAAA,CAAIA,CAAAA,CAAM,GAAA,CAAMA,CAAAA,CAE7BG,CAAAA,CAAMD,CAAAA,CAAKD,CAAAA,CACTG,CAAAA,CAAQ,IAAA,CAAK,GAAA,CAAIF,CAAAA,CAAKD,CAAE,CAAA,CAC1BG,CAAAA,CAAQ,GAAA,EAAOF,CAAAA,EAAMD,CAAAA,CAAIE,CAAAA,EAAO,GAAA,CAC3BC,CAAAA,CAAQ,GAAA,EAAOF,CAAAA,CAAKD,CAAAA,GAAIE,CAAAA,EAAO,GAAA,CAAA,CAExC,IAAME,CAAAA,CAAAA,CAAMvB,CAAAA,CAAKG,GAAM,CAAA,CACnBqB,CAAAA,CAAKL,CAAAA,CAAKC,CAAAA,CACVE,CAAAA,EAAS,GAAA,CAAKE,CAAAA,EAAM,CAAA,CACnBA,CAAAA,CAAAA,CAAML,CAAAA,CAAKC,CAAAA,CAAK,GAAA,CAAMI,CAAAA,CAAK,GAAA,CAAMA,CAAAA,CAAK,GAAA,EAAO,CAAA,CAElD,IAAMC,EAAAA,CACJ,CAAA,CACA,GAAA,CAAO,IAAA,CAAK,GAAA,CAAInB,CAAAA,EAAOkB,CAAAA,CAAK,EAAA,CAAG,CAAA,CAC/B,GAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,CAAIlB,CAAAA,CAAMkB,CAAE,CAAA,CAC5B,GAAA,CAAO,IAAA,CAAK,GAAA,CAAIlB,CAAAA,EAAO,CAAA,CAAIkB,CAAAA,CAAK,CAAA,CAAE,CAAA,CAClC,EAAA,CAAM,IAAA,CAAK,GAAA,CAAIlB,CAAAA,EAAO,CAAA,CAAIkB,CAAAA,CAAK,EAAA,CAAG,EAE9BE,EAAAA,CAAMvB,CAAAA,CAAKH,CAAAA,CACX2B,CAAAA,CAAMZ,CAAAA,CAAMD,CAAAA,CACZc,CAAAA,CAAM,CAAA,CAAI,IAAA,CAAK,GAAA,CAAKtB,CAAAA,CAAMe,CAAAA,CAAO,CAAC,CAAA,CAAI,IAAA,CAAK,IAAA,CAAKP,EAAMC,CAAG,CAAA,CAEzDc,EAAAA,CAAK,CAAA,CAAK,IAAA,CAAA,CAASN,CAAAA,CAAK,EAAA,GAAO,CAAA,CAAK,IAAA,CAAK,IAAA,CAAK,EAAA,CAAA,CAAMA,CAAAA,CAAK,EAAA,GAAO,CAAC,CAAA,CACjEO,CAAAA,CAAK,CAAA,CAAI,IAAA,CAAQd,CAAAA,CACjBe,CAAAA,CAAK,CAAA,CAAI,IAAA,CAAQf,CAAAA,CAAKS,EAAAA,CAEtBO,CAAAA,CAAMhB,CAAAA,EAAM,CAAA,CACZiB,EAAAA,CAAK,CAAA,CAAI,IAAA,CAAK,IAAA,CAAKD,CAAAA,EAAOA,EAAM,EAAA,EAAM,CAAA,CAAE,CAAA,CACxCE,EAAAA,CAAS,EAAA,CAAK,IAAA,CAAK,GAAA,CAAI,EAAA,CAAA,CAAIV,CAAAA,CAAK,GAAA,EAAO,EAAA,GAAO,CAAA,CAAE,CAAA,CAChDW,EAAAA,CAAK,CAACF,EAAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAA,CAAI3B,CAAAA,CAAM4B,EAAM,CAAA,CAE1C,OAAO,IAAA,CAAK,IAAA,CAAA,CAAMR,EAAAA,CAAMG,EAAAA,GAAO,CAAA,CAAA,CAAKF,CAAAA,CAAMG,CAAAA,GAAO,CAAA,CAAA,CAAKF,CAAAA,CAAMG,IAAO,CAAA,CAAII,EAAAA,EAAMR,CAAAA,CAAMG,CAAAA,CAAAA,EAAOF,CAAAA,CAAMG,CAAAA,CAAG,CACrG,CAAA,CAEaK,CAAAA,CAAYC,CAAAA,EAA4BlE,CAAAA,CAASkB,EAAAA,CAASgD,CAAG,CAAC,CAAA,CAIrEC,EAAAA,CAAS,IAAI,MAAA,CACjB,CAAA,gBAAA,EAAmBC,mBAAW,CAAA,mBAAA,EAAsBA,mBAAW,CAAA,mBAAA,EAAsBA,mBAAW,CAAA,4BAAA,EACzEA,mBAAW,CAAA,qBAAA,CAAA,CAClC,GACF,CAAA,CAEaC,EAAAA,CAAkBhE,CAAAA,EAAoC,CACjE,GAAI,OAAOA,CAAAA,EAAU,QAAA,CAAU,OAAO,IAAA,CACtC,IAAMvC,CAAAA,CAAIqG,EAAAA,CAAO,IAAA,CAAK9D,CAAAA,CAAM,IAAA,EAAM,CAAA,EAAG,MAAA,CACrC,GAAI,CAACvC,EAAG,OAAO,IAAA,CACf,IAAMqD,CAAAA,CAAImD,mBAAAA,CAASxG,CAAAA,CAAE,CAAE,CAAA,CACjBsD,CAAAA,CAAItD,CAAAA,CAAE,EAAA,CAAKwG,mBAAAA,CAASxG,CAAAA,CAAE,CAAE,CAAA,CAAI,IAAA,CAAOwG,oBAASxG,CAAAA,CAAE,CAAE,CAAA,CAChDC,CAAAA,CAAID,CAAAA,CAAE,EAAA,CAAKwG,mBAAAA,CAASxG,CAAAA,CAAE,CAAE,CAAA,CAAI,IAAA,CAAOwG,mBAAAA,CAASxG,CAAAA,CAAE,CAAE,CAAA,CAChDE,CAAAA,CAAQF,CAAAA,CAAE,EAAA,GAAO,MAAA,CAAY,CAAA,CAAIwG,mBAAAA,CAASxG,CAAAA,CAAE,EAAE,CAAA,EAAKA,CAAAA,CAAE,GAAA,CAAM,GAAA,CAAM,CAAA,CAAA,CACvE,OAAOmG,CAAAA,CAAS,CACd,CAAA,CAAGzF,oBAAM2C,CAAAA,CAAG,CAAA,CAAG,GAAG,CAAA,CAClB,CAAA,CAAAC,CAAAA,CACA,CAAA,CAAArD,CAAAA,CACA,KAAA,CAAOS,mBAAAA,CAAMR,CAAAA,CAAO,CAAA,CAAG,CAAC,CAE1B,CAAC,CACH,CAAA,CAEauG,EAAAA,CAAkBlE,CAAAA,EAAoC,CAGjE,GAFI,CAACC,mBAAAA,CAASD,CAAK,CAAA,EACdA,CAAAA,CAAmC,UAAA,GAAe,KAAA,EACnD,CAACE,mBAAAA,CAAQF,CAAAA,CAAO,CAAC,GAAA,CAAK,GAAA,CAAK,GAAG,CAAC,CAAA,CAAG,OAAO,IAAA,CAC7C,GAAM,CAAE,CAAA,CAAAc,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAArD,CAAAA,CAAG,KAAA,CAAAC,CAAAA,CAAQ,CAAE,CAAA,CAAIqC,CAAAA,CAC/B,OAAI,CAACmE,mBAAAA,CAAYrD,CAAC,CAAA,EAAK,CAACqD,mBAAAA,CAAYpD,CAAC,CAAA,EAAK,CAACoD,mBAAAA,CAAYzG,CAAC,GAAK,CAACyG,mBAAAA,CAAYxG,CAAK,CAAA,CAAU,IAAA,CAClFiG,CAAAA,CAAS,CACd,CAAA,CAAGzF,mBAAAA,CAAMiG,mBAAAA,CAAStD,CAAC,CAAA,CAAG,CAAA,CAAG,GAAG,CAAA,CAC5B,CAAA,CAAGsD,oBAASrD,CAAC,CAAA,CACb,CAAA,CAAGqD,mBAAAA,CAAS1G,CAAC,CAAA,CACb,KAAA,CAAOS,mBAAAA,CAAMiG,mBAAAA,CAASzG,CAAK,CAAA,CAAG,CAAA,CAAG,CAAC,CAEpC,CAAC,CACH","file":"chunk-EDNIB75Q.cjs","sourcesContent":["import { clamp, hasKeys, isNumber, isObject, round } from '../helpers.js';\nimport { srgbFromLinear, srgbToLinear } from '../transfer.js';\nimport type { RgbColor, XyzColor } from '../types.js';\nimport { clampRgb } from './rgb.js';\n\n// D50 white point (CSS Color 4: xy = 0.3457/0.3585)\nexport const D50_WX = 96.42956752983539;\nexport const D50_WY = 100;\nexport const D50_WZ = 82.51046025104603;\n\nexport const rgbToXyz = ({ r, g, b, alpha }: RgbColor): XyzColor => {\n const lr = srgbToLinear(r / 255),\n lg = srgbToLinear(g / 255),\n lb = srgbToLinear(b / 255);\n // sRGB → XYZ D65 (CSS Color 4 exact rational fractions)\n const xd65 = 100 * (0.41239079926595951 * lr + 0.35758433938387796 * lg + 0.18048078840183429 * lb);\n const yd65 = 100 * (0.21263900587151036 * lr + 0.71516867876775592 * lg + 0.072192315360733714 * lb);\n const zd65 = 100 * (0.019330818715591849 * lr + 0.11919477979462599 * lg + 0.95053215224966059 * lb);\n // D65 → D50 (Bradford, CSS Color 4)\n return {\n x: 1.0479297925449969 * xd65 + 0.022946870601609652 * yd65 - 0.05019226628920524 * zd65,\n y: 0.02962780877005599 * xd65 + 0.9904344267538799 * yd65 - 0.017073799063418826 * zd65,\n z: -0.009243040646204504 * xd65 + 0.015055191490298152 * yd65 + 0.7518742814281371 * zd65,\n alpha: clamp(round(alpha, 3), 0, 1),\n };\n};\n\n// Bradford D50→D65 and XYZ(D65)→linear sRGB matrices (CSS Color 4).\n// Shared between the allocating and *Into variants to keep coefficients in one place.\nconst B_XR = 0.955473421488075,\n B_XG = -0.02309845494876471,\n B_XB = 0.06325924320057072;\nconst B_YR = -0.0283697093338637,\n B_YG = 1.0099953980813041,\n B_YB = 0.021041441191917323;\nconst B_ZR = 0.012314014864481998,\n B_ZG = -0.020507649298898964,\n B_ZB = 1.330365926242124;\nconst X_RX = 0.032409699419045213,\n X_RY = -0.015373831775700935,\n X_RZ = -0.0049861076029300327;\nconst X_GX = -0.0096924363628087984,\n X_GY = 0.018759675015077206,\n X_GZ = 0.00041555057407175612;\nconst X_BX = 0.00055630079696993608,\n X_BY = -0.0020397695888897657,\n X_BZ = 0.010569715142428786;\n\n/** Zero-allocation sibling of xyzD50ToLinearSrgb — writes [lr, lg, lb] into `out`. */\nexport const xyzD50ToLinearSrgbInto = (out: Float64Array | number[], x: number, y: number, z: number): void => {\n const xd65 = B_XR * x + B_XG * y + B_XB * z;\n const yd65 = B_YR * x + B_YG * y + B_YB * z;\n const zd65 = B_ZR * x + B_ZG * y + B_ZB * z;\n out[0] = X_RX * xd65 + X_RY * yd65 + X_RZ * zd65;\n out[1] = X_GX * xd65 + X_GY * yd65 + X_GZ * zd65;\n out[2] = X_BX * xd65 + X_BY * yd65 + X_BZ * zd65;\n};\n\n/** XYZ D50 → linear sRGB (no gamma, no clamping). x/y/z are in 0–100 scale. */\nexport const xyzD50ToLinearSrgb = (x: number, y: number, z: number): [number, number, number] => {\n const xd65 = B_XR * x + B_XG * y + B_XB * z;\n const yd65 = B_YR * x + B_YG * y + B_YB * z;\n const zd65 = B_ZR * x + B_ZG * y + B_ZB * z;\n return [\n X_RX * xd65 + X_RY * yd65 + X_RZ * zd65,\n X_GX * xd65 + X_GY * yd65 + X_GZ * zd65,\n X_BX * xd65 + X_BY * yd65 + X_BZ * zd65,\n ];\n};\n\nexport const xyzToRgb = ({ x, y, z, alpha }: XyzColor): RgbColor => {\n const [lr, lg, lb] = xyzD50ToLinearSrgb(x, y, z);\n return clampRgb({\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n });\n};\n\n/** Unclamped XYZ D50 → gamma-encoded sRGB. Channels may exceed [0, 255] for out-of-sRGB-gamut colors. */\nconst xyzToRgbUnclamped = ({ x, y, z, alpha }: XyzColor): RgbColor => {\n const [lr, lg, lb] = xyzD50ToLinearSrgb(x, y, z);\n return {\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n };\n};\n\nexport const parseXyzObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['x', 'y', 'z'])) return null;\n const { x, y, z, alpha = 1 } = input as { x: unknown; y: unknown; z: unknown; alpha?: unknown };\n if (!isNumber(x) || !isNumber(y) || !isNumber(z) || !isNumber(alpha)) return null;\n return xyzToRgbUnclamped({\n x,\n y,\n z,\n alpha: clamp(alpha, 0, 1),\n });\n};\n","import { NUM_OR_NONE, clamp, hasKeys, isAnyNumber, isObject, parseNum, round, sanitize } from '../helpers.js';\nimport { srgbToLinear } from '../transfer.js';\nimport type { LabColor, RgbColor, XyzColor } from '../types.js';\nimport { D50_WX as WX, D50_WY as WY, D50_WZ as WZ, rgbToXyz, xyzToRgb } from './xyz.js';\n\n// D65 white point derived from CIE chromaticity (x=0.3127, y=0.329)\nconst D65_WX = (0.3127 / 0.329) * 100;\nconst D65_WY = 100;\nconst D65_WZ = ((1 - 0.3127 - 0.329) / 0.329) * 100;\n\nconst EPSILON = 216 / 24389;\nconst KAPPA = 24389 / 27;\n\nconst f = (t: number) => (t > EPSILON ? Math.cbrt(t) : (KAPPA * t + 16) / 116);\n\nexport const xyzToLab = ({ x, y, z, alpha }: XyzColor): LabColor => {\n const fy = f(y / WY);\n return {\n l: 116 * fy - 16,\n a: 500 * (f(x / WX) - fy) || 0, // || 0 suppresses −0; NaN is impossible since WX/WZ are non-zero constants\n b: 200 * (fy - f(z / WZ)) || 0,\n alpha: round(alpha, 3),\n colorSpace: 'lab' as const,\n };\n};\n\nexport const labToXyz = ({ l, a, b, alpha }: LabColor): XyzColor => {\n const fy = (l + 16) / 116;\n const fx = a / 500 + fy;\n const fz = fy - b / 200;\n return {\n x: (fx ** 3 > EPSILON ? fx ** 3 : (116 * fx - 16) / KAPPA) * WX,\n y: (l > 8 ? fy ** 3 : l / KAPPA) * WY,\n z: (fz ** 3 > EPSILON ? fz ** 3 : (116 * fz - 16) / KAPPA) * WZ,\n alpha,\n };\n};\n\nexport const rgbToLab = (rgb: RgbColor): LabColor => xyzToLab(rgbToXyz(rgb));\n\n/** RGB → CIE Lab using D65 white point (screen-native; used for perceptual difference). */\nexport const rgbToLabD65 = ({ r, g, b, alpha }: RgbColor): LabColor => {\n const lr = srgbToLinear(r / 255),\n lg = srgbToLinear(g / 255),\n lb = srgbToLinear(b / 255);\n const x = 100 * (0.41239079926595951 * lr + 0.35758433938387796 * lg + 0.18048078840183429 * lb);\n const y = 100 * (0.21263900587151036 * lr + 0.71516867876775592 * lg + 0.072192315360733714 * lb);\n const z = 100 * (0.019330818715591849 * lr + 0.11919477979462599 * lg + 0.95053215224966059 * lb);\n const fy = f(y / D65_WY);\n return {\n l: 116 * fy - 16,\n a: 500 * (f(x / D65_WX) - fy) || 0,\n b: 200 * (fy - f(z / D65_WZ)) || 0,\n alpha: round(alpha, 3),\n colorSpace: 'lab' as const,\n };\n};\n\nexport const deltaE2000 = (lab1: LabColor, lab2: LabColor): number => {\n const { l: L1, a: a1, b: b1 } = lab1;\n const { l: L2, a: a2, b: b2 } = lab2;\n const rad = Math.PI / 180;\n const deg = 180 / Math.PI;\n\n const C1 = Math.sqrt(a1 ** 2 + b1 ** 2);\n const C2 = Math.sqrt(a2 ** 2 + b2 ** 2);\n const Cab = ((C1 + C2) / 2) ** 7;\n const G = 0.5 * (1 - Math.sqrt(Cab / (Cab + 25 ** 7)));\n const a1p = a1 * (1 + G);\n const a2p = a2 * (1 + G);\n const C1p = Math.sqrt(a1p ** 2 + b1 ** 2);\n const C2p = Math.sqrt(a2p ** 2 + b2 ** 2);\n const Cp = (C1p + C2p) / 2;\n\n const h1p = a1p === 0 && b1 === 0 ? 0 : Math.atan2(b1, a1p) * deg;\n const h2p = a2p === 0 && b2 === 0 ? 0 : Math.atan2(b2, a2p) * deg;\n const h1 = h1p < 0 ? h1p + 360 : h1p;\n const h2 = h2p < 0 ? h2p + 360 : h2p;\n\n let dhp = h2 - h1;\n const absDh = Math.abs(h2 - h1);\n if (absDh > 180 && h2 <= h1) dhp += 360;\n else if (absDh > 180 && h2 > h1) dhp -= 360;\n\n const Lm = (L1 + L2) / 2;\n let Hm = h1 + h2;\n if (absDh <= 180) Hm /= 2;\n else Hm = (h1 + h2 < 360 ? Hm + 360 : Hm - 360) / 2;\n\n const T =\n 1 -\n 0.17 * Math.cos(rad * (Hm - 30)) +\n 0.24 * Math.cos(2 * rad * Hm) +\n 0.32 * Math.cos(rad * (3 * Hm + 6)) -\n 0.2 * Math.cos(rad * (4 * Hm - 63));\n\n const dLp = L2 - L1;\n const dCp = C2p - C1p;\n const dHp = 2 * Math.sin((rad * dhp) / 2) * Math.sqrt(C1p * C2p);\n\n const SL = 1 + (0.015 * (Lm - 50) ** 2) / Math.sqrt(20 + (Lm - 50) ** 2);\n const SC = 1 + 0.045 * Cp;\n const SH = 1 + 0.015 * Cp * T;\n\n const RC7 = Cp ** 7;\n const RC = 2 * Math.sqrt(RC7 / (RC7 + 25 ** 7));\n const dTheta = 30 * Math.exp(-(((Hm - 275) / 25) ** 2));\n const RT = -RC * Math.sin(2 * rad * dTheta);\n\n return Math.sqrt((dLp / SL) ** 2 + (dCp / SC) ** 2 + (dHp / SH) ** 2 + RT * (dCp / SC) * (dHp / SH));\n};\n\nexport const labToRgb = (lab: LabColor): RgbColor => xyzToRgb(labToXyz(lab));\n\n// CSS Color 4: lab(L a b / alpha). L: number|percentage|none (100% = 100).\n// a/b: number|percentage|none (100% = 125).\nconst LAB_RE = new RegExp(\n `^lab\\\\(\\\\s*(?<l>${NUM_OR_NONE})(?<lp>%?)\\\\s+(?<a>${NUM_OR_NONE})(?<ap>%?)\\\\s+(?<b>${NUM_OR_NONE})(?<bp>%?)` +\n `\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseLabString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = LAB_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const l = parseNum(g.l!); // 100% = 100, so value is unchanged whether `%` present\n const a = g.ap ? parseNum(g.a!) * 1.25 : parseNum(g.a!);\n const b = g.bp ? parseNum(g.b!) * 1.25 : parseNum(g.b!);\n const alpha = g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1);\n return labToRgb({\n l: clamp(l, 0, 100),\n a,\n b,\n alpha: clamp(alpha, 0, 1),\n colorSpace: 'lab',\n });\n};\n\nexport const parseLabObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if ((input as { colorSpace?: unknown }).colorSpace !== 'lab') return null;\n if (!hasKeys(input, ['l', 'a', 'b'])) return null;\n const { l, a, b, alpha = 1 } = input as { l: unknown; a: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(a) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return labToRgb({\n l: clamp(sanitize(l), 0, 100),\n a: sanitize(a),\n b: sanitize(b),\n alpha: clamp(sanitize(alpha), 0, 1),\n colorSpace: 'lab',\n });\n};\n"]} |
| var t=(n,r,e)=>Math.min(Math.max(n,r),e),s=(n,r=0)=>{let e=10**r;return Math.round(e*n)/e},u=n=>n>=0&&n<360?n:(n%360+360)%360,m={deg:1,grad:.9,turn:360,rad:360/(2*Math.PI)},b=n=>typeof n=="number"&&!Number.isNaN(n)&&Number.isFinite(n),i=n=>typeof n=="number",c=n=>Number.isNaN(n)?0:n,p=n=>typeof n=="object"&&n!==null&&!Array.isArray(n),a=(n,r)=>r.every(e=>e in n),o="[+-]?\\d*\\.?\\d+",N=`(?:none|${o})`,x=n=>n.toLowerCase()==="none"?0:Number(n);export{t as a,s as b,u as c,m as d,b as e,i as f,c as g,p as h,a as i,o as j,N as k,x as l};//# sourceMappingURL=chunk-IOXRZECH.mjs.map | ||
| //# sourceMappingURL=chunk-IOXRZECH.mjs.map |
| {"version":3,"sources":["../src/helpers.ts"],"names":["clamp","min","max","round","d","p","normalizeHue","h","ANGLE_UNITS","isNumber","isAnyNumber","sanitize","isObject","v","hasKeys","obj","keys","k","NUM","NUM_OR_NONE","parseNum"],"mappings":"AAAO,IAAMA,CAAAA,CAAQ,CAAC,CAAA,CAAWC,CAAAA,CAAaC,CAAAA,GAAwB,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGD,CAAG,CAAA,CAAGC,CAAG,CAAA,CAEvFC,CAAAA,CAAQ,CAAC,CAAA,CAAWC,CAAAA,CAAI,CAAA,GAAc,CACjD,IAAMC,CAAAA,CAAI,EAAA,EAAMD,CAAAA,CAChB,OAAO,IAAA,CAAK,KAAA,CAAMC,CAAAA,CAAI,CAAC,EAAIA,CAC7B,CAAA,CAIaC,CAAAA,CAAgBC,CAAAA,EAAuBA,CAAAA,EAAK,CAAA,EAAKA,CAAAA,CAAI,GAAA,CAAMA,CAAAA,CAAAA,CAAMA,CAAAA,CAAI,GAAA,CAAO,GAAA,EAAO,GAAA,CAEnFC,CAAAA,CAAsC,CAAE,GAAA,CAAK,CAAA,CAAG,IAAA,CAAM,EAAA,CAAK,IAAA,CAAM,GAAA,CAAK,GAAA,CAAK,GAAA,EAAO,CAAA,CAAI,IAAA,CAAK,EAAA,CAAI,CAAA,CAE/FC,CAAAA,CAAY,CAAA,EAA4B,OAAO,GAAM,QAAA,EAAY,CAAC,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAK,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,CAGtGC,CAAAA,CAAe,CAAA,EAA4B,OAAO,CAAA,EAAM,QAAA,CAGxDC,CAAAA,CAAY,CAAA,EAAuB,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,CAAI,CAAA,CAAI,CAAA,CAEzDC,CAAAA,CAAYC,CAAAA,EACvB,OAAOA,CAAAA,EAAM,QAAA,EAAYA,CAAAA,GAAM,IAAA,EAAQ,CAAC,KAAA,CAAM,OAAA,CAAQA,CAAC,CAAA,CAE5CC,CAAAA,CAAU,CAAmBC,CAAAA,CAA8BC,CAAAA,GACtEA,CAAAA,CAAK,KAAA,CAAOC,CAAAA,EAAMA,CAAAA,IAAKF,CAAG,CAAA,CAGfG,CAAAA,CAAM,mBAAA,CACNC,CAAAA,CAAc,CAAA,QAAA,EAAWD,CAAG,CAAA,CAAA,CAAA,CAG5BE,CAAAA,CAAYP,CAAAA,EAAuBA,CAAAA,CAAE,WAAA,EAAY,GAAM,MAAA,CAAS,CAAA,CAAI,MAAA,CAAOA,CAAC","file":"chunk-IOXRZECH.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 => {\n const p = 10 ** d;\n return Math.round(p * n) / p;\n};\n\n// Normalize hue to [0, 360). Avoids (h + 360) % 360 which can lose precision\n// when h is already in [0, 360) due to binary floating-point subtraction.\nexport const normalizeHue = (h: number): number => (h >= 0 && h < 360 ? h : ((h % 360) + 360) % 360);\n\nexport const ANGLE_UNITS: Record<string, number> = { deg: 1, grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) };\n\nexport const isNumber = (n: unknown): n is number => typeof n === 'number' && !Number.isNaN(n) && Number.isFinite(n);\n\n// Accepts any JS number type (including NaN/±Infinity); use sanitize() before clamping\nexport const isAnyNumber = (n: unknown): n is number => typeof n === 'number';\n\n// Replace NaN with 0; ±Infinity is left for clamp() to handle naturally\nexport const sanitize = (n: number): number => (Number.isNaN(n) ? 0 : 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\n// Shared regex fragments. NUM matches a signed decimal, NUM_OR_NONE adds the CSS Color 4 `none` keyword.\nexport const NUM = '[+-]?\\\\d*\\\\.?\\\\d+';\nexport const NUM_OR_NONE = `(?:none|${NUM})`;\n\n/** Parse a CSS Color 4 channel token. `none` → 0; a plain number is returned as-is. */\nexport const parseNum = (v: string): number => (v.toLowerCase() === 'none' ? 0 : Number(v));\n"]} |
| import {a,b}from'./chunk-FXCFKFXK.mjs';import {a as a$1}from'./chunk-Q3O3QQ4H.mjs';import {a as a$2,h as h$1,i,f as f$1,g,l,k}from'./chunk-IOXRZECH.mjs';var F=.4122214708,K=.5363325363,U=.0514459929,z=.2119034982,q=.6806995451,D=.1073969566,H=.0883024619,J=.2817188376,P=.6299787005,Q=.2104542553,V=.793617785,W=-0.0040720468,X=1.9779984951,Y=-2.428592205,Z=.4505937099,nn=.0259040371,on=.7827717662,rn=-0.808675766,R=.3963377774,I=.2158037573,S=-0.1055613458,f=-0.0638541728,O=-0.0894841775,h=-1.291485548,B=4.0767416613,x=-3.3077115904,A=.2309699287,C=-1.2684380041,w=2.6097574007,T=-0.3413193963,y=-0.0041960865,G=-0.7034186145,d=1.7076147009;var tn=(o,n,r)=>{let t=Math.cbrt(F*o+K*n+U*r),s=Math.cbrt(z*o+q*n+D*r),c=Math.cbrt(H*o+J*n+P*r);return [Q*t+V*s+W*c,X*t+Y*s+Z*c,nn*t+on*s+rn*c]},bn=({r:o,g:n,b:r,alpha:t})=>{let[s,c,e]=tn(a(o/255),a(n/255),a(r/255));return {l:s,a:c,b:e,alpha:t}},N=({l:o,a:n,b:r,alpha:t})=>{let[s,c,e]=sn(o,n,r);return {r:b(s)*255,g:b(c)*255,b:b(e)*255,alpha:t}},an=({l:o,a:n,b:r,alpha:t})=>{let s=o+.3963377774*n+.2158037573*r,c=o-.1055613458*n-.0638541728*r,e=o-.0894841775*n-1.291485548*r,_=s**3,l=c**3,a=e**3,$=4.0767416613*_-3.3077115904*l+.2309699287*a,j=-1.2684380041*_+2.6097574007*l-.3413193963*a,E=-0.0041960865*_-.7034186145*l+1.7076147009*a;return a$1({r:b(a$2($,0,1))*255,g:b(a$2(j,0,1))*255,b:b(a$2(E,0,1))*255,alpha:t})},Mn=(o,n,r,t)=>{let s=n+R*r+I*t,c=n+S*r+f*t,e=n+O*r+h*t,_=s**3,l=c**3,a=e**3;o[0]=B*_+x*l+A*a,o[1]=C*_+w*l+T*a,o[2]=y*_+G*l+d*a;},sn=(o,n,r)=>{let t=o+R*n+I*r,s=o+S*n+f*r,c=o+O*n+h*r,e=t**3,_=s**3,l=c**3;return [B*e+x*_+A*l,C*e+w*_+T*l,y*e+G*_+d*l]},un=o=>{if(!h$1(o)||o.colorSpace==="lab"||!i(o,["l","a","b"])||"r"in o||"x"in o||"c"in o||"h"in o)return null;let{l:n,a:r,b:t,alpha:s=1}=o;return !f$1(n)||!f$1(r)||!f$1(t)||!f$1(s)||g(n)>1?null:N({l:g(n),a:g(r),b:g(t),alpha:a$2(g(s),0,1)})},cn=new RegExp(`^oklab\\(\\s*(?<l>${k})(?<lp>%?)\\s+(?<a>${k})(?<ap>%?)\\s+(?<b>${k})(?<bp>%?)\\s*(?:/\\s*(?<al>${k})(?<alp>%?)\\s*)?\\)$`,"i"),mn=o=>{if(typeof o!="string")return null;let n=cn.exec(o.trim())?.groups;if(!n)return null;let r=n.lp?l(n.l)/100:l(n.l),t=n.ap?l(n.a)*.004:l(n.a),s=n.bp?l(n.b)*.004:l(n.b),c=n.al===void 0?1:l(n.al)/(n.alp?100:1);return N({l:r,a:t,b:s,alpha:a$2(c,0,1)})};export{tn as a,bn as b,N as c,an as d,Mn as e,sn as f,un as g,mn as h};//# sourceMappingURL=chunk-OS5JUSWI.mjs.map | ||
| //# sourceMappingURL=chunk-OS5JUSWI.mjs.map |
| {"version":3,"sources":["../src/colorModels/oklab.ts"],"names":["M1_LR","M1_LG","M1_LB","M1_MR","M1_MG","M1_MB","M1_SR","M1_SG","M1_SB","M2_L_L","M2_M_L","M2_S_L","M2_L_A","M2_M_A","M2_S_A","M2_L_B","M2_M_B","M2_S_B","M2I_A_L","M2I_B_L","M2I_A_M","M2I_B_M","M2I_A_S","M2I_B_S","M1I_L_R","M1I_M_R","M1I_S_R","M1I_L_G","M1I_M_G","M1I_S_G","M1I_L_B","M1I_M_B","M1I_S_B","linearSrgbToOklab","lr","lg","lb","lv","mv","sv","rgbToOklab","r","g","b","alpha","l","a","bv","srgbToLinear","oklabToRgbUnclamped","oklabToLinear","srgbFromLinear","oklabToRgb","l_","m_","s_","clampRgb","clamp","oklabToLinearInto","out","parseOklabObject","input","isObject","hasKeys","isAnyNumber","sanitize","OKLAB_RE","NUM_OR_NONE","parseOklabString","L","parseNum"],"mappings":"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","file":"chunk-OS5JUSWI.mjs","sourcesContent":["import { NUM_OR_NONE, clamp, hasKeys, isAnyNumber, isObject, parseNum, sanitize } from '../helpers.js';\nimport { srgbFromLinear, srgbToLinear } from '../transfer.js';\nimport type { OklabColor, RgbColor } from '../types.js';\nimport { clampRgb } from './rgb.js';\n\n// Björn Ottosson's OKLab matrix coefficients. Referenced by both the allocating\n// and zero-alloc (*Into) variants so the math lives in one place.\n// sRGB linear → LMS (cubed roots taken at M1 stage)\nconst M1_LR = 0.4122214708,\n M1_LG = 0.5363325363,\n M1_LB = 0.0514459929;\nconst M1_MR = 0.2119034982,\n M1_MG = 0.6806995451,\n M1_MB = 0.1073969566;\nconst M1_SR = 0.0883024619,\n M1_SG = 0.2817188376,\n M1_SB = 0.6299787005;\n// LMS' → OKLab\nconst M2_L_L = 0.2104542553,\n M2_M_L = 0.793617785,\n M2_S_L = -0.0040720468;\nconst M2_L_A = 1.9779984951,\n M2_M_A = -2.428592205,\n M2_S_A = 0.4505937099;\nconst M2_L_B = 0.0259040371,\n M2_M_B = 0.7827717662,\n M2_S_B = -0.808675766;\n// OKLab → LMS' (inverse of M2)\nconst M2I_A_L = 0.3963377774,\n M2I_B_L = 0.2158037573;\nconst M2I_A_M = -0.1055613458,\n M2I_B_M = -0.0638541728;\nconst M2I_A_S = -0.0894841775,\n M2I_B_S = -1.291485548;\n// LMS → linear sRGB (inverse of M1)\nconst M1I_L_R = 4.0767416613,\n M1I_M_R = -3.3077115904,\n M1I_S_R = 0.2309699287;\nconst M1I_L_G = -1.2684380041,\n M1I_M_G = 2.6097574007,\n M1I_S_G = -0.3413193963;\nconst M1I_L_B = -0.0041960865,\n M1I_M_B = -0.7034186145,\n M1I_S_B = 1.7076147009;\n\n/** Zero-allocation sibling of linearSrgbToOklab — writes [l, a, b] into `out`. */\nexport const linearSrgbToOklabInto = (out: Float64Array | number[], lr: number, lg: number, lb: number): void => {\n const lv = Math.cbrt(M1_LR * lr + M1_LG * lg + M1_LB * lb);\n const mv = Math.cbrt(M1_MR * lr + M1_MG * lg + M1_MB * lb);\n const sv = Math.cbrt(M1_SR * lr + M1_SG * lg + M1_SB * lb);\n out[0] = M2_L_L * lv + M2_M_L * mv + M2_S_L * sv;\n out[1] = M2_L_A * lv + M2_M_A * mv + M2_S_A * sv;\n out[2] = M2_L_B * lv + M2_M_B * mv + M2_S_B * sv;\n};\n\n/** Convert linear sRGB channels to OKLab (Björn Ottosson). No gamma, no clamping. */\nexport const linearSrgbToOklab = (lr: number, lg: number, lb: number): [number, number, number] => {\n const lv = Math.cbrt(M1_LR * lr + M1_LG * lg + M1_LB * lb);\n const mv = Math.cbrt(M1_MR * lr + M1_MG * lg + M1_MB * lb);\n const sv = Math.cbrt(M1_SR * lr + M1_SG * lg + M1_SB * lb);\n return [\n M2_L_L * lv + M2_M_L * mv + M2_S_L * sv,\n M2_L_A * lv + M2_M_A * mv + M2_S_A * sv,\n M2_L_B * lv + M2_M_B * mv + M2_S_B * sv,\n ];\n};\n\nexport const rgbToOklab = ({ r, g, b, alpha }: RgbColor): OklabColor => {\n const [l, a, bv] = linearSrgbToOklab(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n return { l, a, b: bv, alpha };\n};\n\n/** Unclamped OKLab → gamma-encoded sRGB. Channels may exceed [0, 255] for out-of-sRGB-gamut colors. */\nexport const oklabToRgbUnclamped = ({ l, a, b, alpha }: OklabColor): RgbColor => {\n const [lr, lg, lb] = oklabToLinear(l, a, b);\n return {\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n };\n};\n\nexport const oklabToRgb = ({ l, a, b, alpha }: OklabColor): RgbColor => {\n const l_ = l + 0.3963377774 * a + 0.2158037573 * b;\n const m_ = l - 0.1055613458 * a - 0.0638541728 * b;\n const s_ = l - 0.0894841775 * a - 1.291485548 * b;\n\n const lv = l_ ** 3;\n const mv = m_ ** 3;\n const sv = s_ ** 3;\n\n const r = 4.0767416613 * lv - 3.3077115904 * mv + 0.2309699287 * sv;\n const g = -1.2684380041 * lv + 2.6097574007 * mv - 0.3413193963 * sv;\n const bv = -0.0041960865 * lv - 0.7034186145 * mv + 1.7076147009 * sv;\n\n return clampRgb({\n r: srgbFromLinear(clamp(r, 0, 1)) * 255,\n g: srgbFromLinear(clamp(g, 0, 1)) * 255,\n b: srgbFromLinear(clamp(bv, 0, 1)) * 255,\n alpha,\n });\n};\n\n/** Zero-allocation sibling of oklabToLinear — writes [lr, lg, lb] into `out`. */\nexport const oklabToLinearInto = (out: Float64Array | number[], l: number, a: number, b: number): void => {\n const l_ = l + M2I_A_L * a + M2I_B_L * b;\n const m_ = l + M2I_A_M * a + M2I_B_M * b;\n const s_ = l + M2I_A_S * a + M2I_B_S * b;\n const lv = l_ ** 3,\n mv = m_ ** 3,\n sv = s_ ** 3;\n out[0] = M1I_L_R * lv + M1I_M_R * mv + M1I_S_R * sv;\n out[1] = M1I_L_G * lv + M1I_M_G * mv + M1I_S_G * sv;\n out[2] = M1I_L_B * lv + M1I_M_B * mv + M1I_S_B * sv;\n};\n\n/** Unclamped linear sRGB channels from OKLab values. Channels may exceed [0, 1] for out-of-gamut colors. */\nexport const oklabToLinear = (l: number, a: number, b: number): [number, number, number] => {\n const l_ = l + M2I_A_L * a + M2I_B_L * b;\n const m_ = l + M2I_A_M * a + M2I_B_M * b;\n const s_ = l + M2I_A_S * a + M2I_B_S * b;\n const lv = l_ ** 3,\n mv = m_ ** 3,\n sv = s_ ** 3;\n return [\n M1I_L_R * lv + M1I_M_R * mv + M1I_S_R * sv,\n M1I_L_G * lv + M1I_M_G * mv + M1I_S_G * sv,\n M1I_L_B * lv + M1I_M_B * mv + M1I_S_B * sv,\n ];\n};\n\nexport const parseOklabObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n // Objects with colorSpace: 'lab' are CIE Lab, not OKLab — let parseLabObject handle them.\n if ((input as { colorSpace?: unknown }).colorSpace === 'lab') return null;\n if (!hasKeys(input, ['l', 'a', 'b'])) return null;\n if ('r' in input || 'x' in input || 'c' in input || 'h' in input) return null;\n const { l, a, b, alpha = 1 } = input as { l: unknown; a: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(a) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n if (sanitize(l) > 1) return null; // OKLab L is always [0, 1]; reject CIE Lab values passed without colorSpace branding\n return oklabToRgbUnclamped({\n l: sanitize(l),\n a: sanitize(a),\n b: sanitize(b),\n alpha: clamp(sanitize(alpha), 0, 1),\n });\n};\n\nconst OKLAB_RE = new RegExp(\n `^oklab\\\\(\\\\s*(?<l>${NUM_OR_NONE})(?<lp>%?)\\\\s+(?<a>${NUM_OR_NONE})(?<ap>%?)\\\\s+(?<b>${NUM_OR_NONE})(?<bp>%?)` +\n `\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseOklabString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = OKLAB_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const L = g.lp ? parseNum(g.l!) / 100 : parseNum(g.l!); // 100% = 1\n const a = g.ap ? parseNum(g.a!) * 0.004 : parseNum(g.a!); // 100% = 0.4\n const b = g.bp ? parseNum(g.b!) * 0.004 : parseNum(g.b!);\n const alpha = g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1);\n return oklabToRgbUnclamped({ l: L, a, b, alpha: clamp(alpha, 0, 1) });\n};\n"]} |
| import {a,b as b$1}from'./chunk-FXCFKFXK.mjs';import {a as a$2}from'./chunk-Q3O3QQ4H.mjs';import {a as a$1,b,h,i as i$1,e,l,f,g,k}from'./chunk-IOXRZECH.mjs';var q=96.4295675298354,G=100,N=82.51046025104603,U=({r:o,g:t,b:r,alpha:s})=>{let n=a(o/255),a$2=a(t/255),c=a(r/255),e=100*(.4123907992659595*n+.35758433938387796*a$2+.1804807884018343*c),l=100*(.21263900587151036*n+.7151686787677559*a$2+.07219231536073371*c),p=100*(.01933081871559185*n+.11919477979462599*a$2+.9505321522496606*c);return {x:1.0479297925449969*e+.022946870601609652*l-.05019226628920524*p,y:.02962780877005599*e+.9904344267538799*l-.017073799063418826*p,z:-0.009243040646204504*e+.015055191490298152*l+.7518742814281371*p,alpha:a$1(b(s,3),0,1)}},c0=.955473421488075,l0=-0.02309845494876471,e0=.06325924320057072,b0=-0.0283697093338637,p0=1.0099953980813041,u0=.021041441191917323,h0=.012314014864481998,m0=-0.020507649298898964,g0=1.330365926242124,C0=.032409699419045215,y0=-0.015373831775700935,i0=-0.004986107602930032,x0=-0.009692436362808799,X0=.018759675015077207,_0=.0004155505740717561,f0=.000556300796969936,R0=-0.002039769588889766,L0=.010569715142428786;var v=(o,t,r)=>{let s=c0*o+l0*t+e0*r,n=b0*o+p0*t+u0*r,a=h0*o+m0*t+g0*r;return [C0*s+y0*n+i0*a,x0*s+X0*n+_0*a,f0*s+R0*n+L0*a]},J=({x:o,y:t,z:r,alpha:s})=>{let[n,a,c]=v(o,t,r);return a$2({r:b$1(n)*255,g:b$1(a)*255,b:b$1(c)*255,alpha:s})},z0=({x:o,y:t,z:r,alpha:s})=>{let[n,a,c]=v(o,t,r);return {r:b$1(n)*255,g:b$1(a)*255,b:b$1(c)*255,alpha:s}},Y0=o=>{if(!h(o)||!i$1(o,["x","y","z"]))return null;let{x:t,y:r,z:s,alpha:n=1}=o;return !e(t)||!e(r)||!e(s)||!e(n)?null:z0({x:t,y:r,z:s,alpha:a$1(n,0,1)})};var d0=.3127/.329*100,M0=100,T0=(1-.3127-.329)/.329*100,O=216/24389,M=24389/27,i=o=>o>O?Math.cbrt(o):(M*o+16)/116,B0=({x:o,y:t,z:r,alpha:s})=>{let n=i(t/G);return {l:116*n-16,a:500*(i(o/q)-n)||0,b:200*(n-i(r/N))||0,alpha:b(s,3),colorSpace:"lab"}},w0=({l:o,a:t,b:r,alpha:s})=>{let n=(o+16)/116,a=t/500+n,c=n-r/200;return {x:(a**3>O?a**3:(116*a-16)/M)*q,y:(o>8?n**3:o/M)*G,z:(c**3>O?c**3:(116*c-16)/M)*N,alpha:s}},O0=o=>B0(U(o)),j0=({r:o,g:t,b:r,alpha:s})=>{let n=a(o/255),a$1=a(t/255),c=a(r/255),e=100*(.4123907992659595*n+.35758433938387796*a$1+.1804807884018343*c),l=100*(.21263900587151036*n+.7151686787677559*a$1+.07219231536073371*c),p=100*(.01933081871559185*n+.11919477979462599*a$1+.9505321522496606*c),x=i(l/M0);return {l:116*x-16,a:500*(i(e/d0)-x)||0,b:200*(x-i(p/T0))||0,alpha:b(s,3),colorSpace:"lab"}},A0=(o,t)=>{let{l:r,a:s,b:n}=o,{l:a,a:c,b:e}=t,l=Math.PI/180,p=180/Math.PI,x=Math.sqrt(s**2+n**2),V=Math.sqrt(c**2+e**2),j=((x+V)/2)**7,A=.5*(1-Math.sqrt(j/(j+25**7))),T=s*(1+A),B=c*(1+A),w=Math.sqrt(T**2+n**2),D=Math.sqrt(B**2+e**2),S=(w+D)/2,k=T===0&&n===0?0:Math.atan2(n,T)*p,W=B===0&&e===0?0:Math.atan2(e,B)*p,C=k<0?k+360:k,y=W<0?W+360:W,Y=y-C,Z=Math.abs(y-C);Z>180&&y<=C?Y+=360:Z>180&&y>C&&(Y-=360);let E=(r+a)/2,b=C+y;Z<=180?b/=2:b=(C+y<360?b+360:b-360)/2;let o0=1-.17*Math.cos(l*(b-30))+.24*Math.cos(2*l*b)+.32*Math.cos(l*(3*b+6))-.2*Math.cos(l*(4*b-63)),n0=a-r,P=D-w,$=2*Math.sin(l*Y/2)*Math.sqrt(w*D),t0=1+.015*(E-50)**2/Math.sqrt(20+(E-50)**2),I=1+.045*S,H=1+.015*S*o0,K=S**7,r0=2*Math.sqrt(K/(K+25**7)),s0=30*Math.exp(-(((b-275)/25)**2)),a0=-r0*Math.sin(2*l*s0);return Math.sqrt((n0/t0)**2+(P/I)**2+($/H)**2+a0*(P/I)*($/H))},Q=o=>J(w0(o)),D0=new RegExp(`^lab\\(\\s*(?<l>${k})(?<lp>%?)\\s+(?<a>${k})(?<ap>%?)\\s+(?<b>${k})(?<bp>%?)\\s*(?:/\\s*(?<al>${k})(?<alp>%?)\\s*)?\\)$`,"i"),E0=o=>{if(typeof o!="string")return null;let t=D0.exec(o.trim())?.groups;if(!t)return null;let r=l(t.l),s=t.ap?l(t.a)*1.25:l(t.a),n=t.bp?l(t.b)*1.25:l(t.b),a=t.al===void 0?1:l(t.al)/(t.alp?100:1);return Q({l:a$1(r,0,100),a:s,b:n,alpha:a$1(a,0,1)})},P0=o=>{if(!h(o)||o.colorSpace!=="lab"||!i$1(o,["l","a","b"]))return null;let{l:t,a:r,b:s,alpha:n=1}=o;return !f(t)||!f(r)||!f(s)||!f(n)?null:Q({l:a$1(g(t),0,100),a:g(r),b:g(s),alpha:a$1(g(n),0,1)})};export{U as a,v as b,Y0 as c,w0 as d,O0 as e,j0 as f,A0 as g,Q as h,E0 as i,P0 as j};//# sourceMappingURL=chunk-OXYX6VNO.mjs.map | ||
| //# sourceMappingURL=chunk-OXYX6VNO.mjs.map |
| {"version":3,"sources":["../src/colorModels/xyz.ts","../src/colorModels/lab.ts"],"names":["D50_WX","D50_WY","D50_WZ","rgbToXyz","r","g","b","alpha","lr","srgbToLinear","lg","lb","xd65","yd65","zd65","clamp","round","B_XR","B_XG","B_XB","B_YR","B_YG","B_YB","B_ZR","B_ZG","B_ZB","X_RX","X_RY","X_RZ","X_GX","X_GY","X_GZ","X_BX","X_BY","X_BZ","xyzD50ToLinearSrgb","x","y","z","xyzToRgb","clampRgb","srgbFromLinear","xyzToRgbUnclamped","parseXyzObject","input","isObject","hasKeys","isNumber","D65_WX","D65_WY","D65_WZ","EPSILON","KAPPA","f","t","xyzToLab","fy","labToXyz","l","a","fx","fz","rgbToLab","rgb","rgbToLabD65","deltaE2000","lab1","lab2","L1","a1","b1","L2","a2","b2","rad","deg","C1","C2","Cab","G","a1p","a2p","C1p","C2p","Cp","h1p","h2p","h1","h2","dhp","absDh","Lm","Hm","T","dLp","dCp","dHp","SL","SC","SH","RC7","RC","dTheta","RT","labToRgb","lab","LAB_RE","NUM_OR_NONE","parseLabString","parseNum","parseLabObject","isAnyNumber","sanitize"],"mappings":"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","file":"chunk-OXYX6VNO.mjs","sourcesContent":["import { clamp, hasKeys, isNumber, isObject, round } from '../helpers.js';\nimport { srgbFromLinear, srgbToLinear } from '../transfer.js';\nimport type { RgbColor, XyzColor } from '../types.js';\nimport { clampRgb } from './rgb.js';\n\n// D50 white point (CSS Color 4: xy = 0.3457/0.3585)\nexport const D50_WX = 96.42956752983539;\nexport const D50_WY = 100;\nexport const D50_WZ = 82.51046025104603;\n\nexport const rgbToXyz = ({ r, g, b, alpha }: RgbColor): XyzColor => {\n const lr = srgbToLinear(r / 255),\n lg = srgbToLinear(g / 255),\n lb = srgbToLinear(b / 255);\n // sRGB → XYZ D65 (CSS Color 4 exact rational fractions)\n const xd65 = 100 * (0.41239079926595951 * lr + 0.35758433938387796 * lg + 0.18048078840183429 * lb);\n const yd65 = 100 * (0.21263900587151036 * lr + 0.71516867876775592 * lg + 0.072192315360733714 * lb);\n const zd65 = 100 * (0.019330818715591849 * lr + 0.11919477979462599 * lg + 0.95053215224966059 * lb);\n // D65 → D50 (Bradford, CSS Color 4)\n return {\n x: 1.0479297925449969 * xd65 + 0.022946870601609652 * yd65 - 0.05019226628920524 * zd65,\n y: 0.02962780877005599 * xd65 + 0.9904344267538799 * yd65 - 0.017073799063418826 * zd65,\n z: -0.009243040646204504 * xd65 + 0.015055191490298152 * yd65 + 0.7518742814281371 * zd65,\n alpha: clamp(round(alpha, 3), 0, 1),\n };\n};\n\n// Bradford D50→D65 and XYZ(D65)→linear sRGB matrices (CSS Color 4).\n// Shared between the allocating and *Into variants to keep coefficients in one place.\nconst B_XR = 0.955473421488075,\n B_XG = -0.02309845494876471,\n B_XB = 0.06325924320057072;\nconst B_YR = -0.0283697093338637,\n B_YG = 1.0099953980813041,\n B_YB = 0.021041441191917323;\nconst B_ZR = 0.012314014864481998,\n B_ZG = -0.020507649298898964,\n B_ZB = 1.330365926242124;\nconst X_RX = 0.032409699419045213,\n X_RY = -0.015373831775700935,\n X_RZ = -0.0049861076029300327;\nconst X_GX = -0.0096924363628087984,\n X_GY = 0.018759675015077206,\n X_GZ = 0.00041555057407175612;\nconst X_BX = 0.00055630079696993608,\n X_BY = -0.0020397695888897657,\n X_BZ = 0.010569715142428786;\n\n/** Zero-allocation sibling of xyzD50ToLinearSrgb — writes [lr, lg, lb] into `out`. */\nexport const xyzD50ToLinearSrgbInto = (out: Float64Array | number[], x: number, y: number, z: number): void => {\n const xd65 = B_XR * x + B_XG * y + B_XB * z;\n const yd65 = B_YR * x + B_YG * y + B_YB * z;\n const zd65 = B_ZR * x + B_ZG * y + B_ZB * z;\n out[0] = X_RX * xd65 + X_RY * yd65 + X_RZ * zd65;\n out[1] = X_GX * xd65 + X_GY * yd65 + X_GZ * zd65;\n out[2] = X_BX * xd65 + X_BY * yd65 + X_BZ * zd65;\n};\n\n/** XYZ D50 → linear sRGB (no gamma, no clamping). x/y/z are in 0–100 scale. */\nexport const xyzD50ToLinearSrgb = (x: number, y: number, z: number): [number, number, number] => {\n const xd65 = B_XR * x + B_XG * y + B_XB * z;\n const yd65 = B_YR * x + B_YG * y + B_YB * z;\n const zd65 = B_ZR * x + B_ZG * y + B_ZB * z;\n return [\n X_RX * xd65 + X_RY * yd65 + X_RZ * zd65,\n X_GX * xd65 + X_GY * yd65 + X_GZ * zd65,\n X_BX * xd65 + X_BY * yd65 + X_BZ * zd65,\n ];\n};\n\nexport const xyzToRgb = ({ x, y, z, alpha }: XyzColor): RgbColor => {\n const [lr, lg, lb] = xyzD50ToLinearSrgb(x, y, z);\n return clampRgb({\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n });\n};\n\n/** Unclamped XYZ D50 → gamma-encoded sRGB. Channels may exceed [0, 255] for out-of-sRGB-gamut colors. */\nconst xyzToRgbUnclamped = ({ x, y, z, alpha }: XyzColor): RgbColor => {\n const [lr, lg, lb] = xyzD50ToLinearSrgb(x, y, z);\n return {\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n };\n};\n\nexport const parseXyzObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['x', 'y', 'z'])) return null;\n const { x, y, z, alpha = 1 } = input as { x: unknown; y: unknown; z: unknown; alpha?: unknown };\n if (!isNumber(x) || !isNumber(y) || !isNumber(z) || !isNumber(alpha)) return null;\n return xyzToRgbUnclamped({\n x,\n y,\n z,\n alpha: clamp(alpha, 0, 1),\n });\n};\n","import { NUM_OR_NONE, clamp, hasKeys, isAnyNumber, isObject, parseNum, round, sanitize } from '../helpers.js';\nimport { srgbToLinear } from '../transfer.js';\nimport type { LabColor, RgbColor, XyzColor } from '../types.js';\nimport { D50_WX as WX, D50_WY as WY, D50_WZ as WZ, rgbToXyz, xyzToRgb } from './xyz.js';\n\n// D65 white point derived from CIE chromaticity (x=0.3127, y=0.329)\nconst D65_WX = (0.3127 / 0.329) * 100;\nconst D65_WY = 100;\nconst D65_WZ = ((1 - 0.3127 - 0.329) / 0.329) * 100;\n\nconst EPSILON = 216 / 24389;\nconst KAPPA = 24389 / 27;\n\nconst f = (t: number) => (t > EPSILON ? Math.cbrt(t) : (KAPPA * t + 16) / 116);\n\nexport const xyzToLab = ({ x, y, z, alpha }: XyzColor): LabColor => {\n const fy = f(y / WY);\n return {\n l: 116 * fy - 16,\n a: 500 * (f(x / WX) - fy) || 0, // || 0 suppresses −0; NaN is impossible since WX/WZ are non-zero constants\n b: 200 * (fy - f(z / WZ)) || 0,\n alpha: round(alpha, 3),\n colorSpace: 'lab' as const,\n };\n};\n\nexport const labToXyz = ({ l, a, b, alpha }: LabColor): XyzColor => {\n const fy = (l + 16) / 116;\n const fx = a / 500 + fy;\n const fz = fy - b / 200;\n return {\n x: (fx ** 3 > EPSILON ? fx ** 3 : (116 * fx - 16) / KAPPA) * WX,\n y: (l > 8 ? fy ** 3 : l / KAPPA) * WY,\n z: (fz ** 3 > EPSILON ? fz ** 3 : (116 * fz - 16) / KAPPA) * WZ,\n alpha,\n };\n};\n\nexport const rgbToLab = (rgb: RgbColor): LabColor => xyzToLab(rgbToXyz(rgb));\n\n/** RGB → CIE Lab using D65 white point (screen-native; used for perceptual difference). */\nexport const rgbToLabD65 = ({ r, g, b, alpha }: RgbColor): LabColor => {\n const lr = srgbToLinear(r / 255),\n lg = srgbToLinear(g / 255),\n lb = srgbToLinear(b / 255);\n const x = 100 * (0.41239079926595951 * lr + 0.35758433938387796 * lg + 0.18048078840183429 * lb);\n const y = 100 * (0.21263900587151036 * lr + 0.71516867876775592 * lg + 0.072192315360733714 * lb);\n const z = 100 * (0.019330818715591849 * lr + 0.11919477979462599 * lg + 0.95053215224966059 * lb);\n const fy = f(y / D65_WY);\n return {\n l: 116 * fy - 16,\n a: 500 * (f(x / D65_WX) - fy) || 0,\n b: 200 * (fy - f(z / D65_WZ)) || 0,\n alpha: round(alpha, 3),\n colorSpace: 'lab' as const,\n };\n};\n\nexport const deltaE2000 = (lab1: LabColor, lab2: LabColor): number => {\n const { l: L1, a: a1, b: b1 } = lab1;\n const { l: L2, a: a2, b: b2 } = lab2;\n const rad = Math.PI / 180;\n const deg = 180 / Math.PI;\n\n const C1 = Math.sqrt(a1 ** 2 + b1 ** 2);\n const C2 = Math.sqrt(a2 ** 2 + b2 ** 2);\n const Cab = ((C1 + C2) / 2) ** 7;\n const G = 0.5 * (1 - Math.sqrt(Cab / (Cab + 25 ** 7)));\n const a1p = a1 * (1 + G);\n const a2p = a2 * (1 + G);\n const C1p = Math.sqrt(a1p ** 2 + b1 ** 2);\n const C2p = Math.sqrt(a2p ** 2 + b2 ** 2);\n const Cp = (C1p + C2p) / 2;\n\n const h1p = a1p === 0 && b1 === 0 ? 0 : Math.atan2(b1, a1p) * deg;\n const h2p = a2p === 0 && b2 === 0 ? 0 : Math.atan2(b2, a2p) * deg;\n const h1 = h1p < 0 ? h1p + 360 : h1p;\n const h2 = h2p < 0 ? h2p + 360 : h2p;\n\n let dhp = h2 - h1;\n const absDh = Math.abs(h2 - h1);\n if (absDh > 180 && h2 <= h1) dhp += 360;\n else if (absDh > 180 && h2 > h1) dhp -= 360;\n\n const Lm = (L1 + L2) / 2;\n let Hm = h1 + h2;\n if (absDh <= 180) Hm /= 2;\n else Hm = (h1 + h2 < 360 ? Hm + 360 : Hm - 360) / 2;\n\n const T =\n 1 -\n 0.17 * Math.cos(rad * (Hm - 30)) +\n 0.24 * Math.cos(2 * rad * Hm) +\n 0.32 * Math.cos(rad * (3 * Hm + 6)) -\n 0.2 * Math.cos(rad * (4 * Hm - 63));\n\n const dLp = L2 - L1;\n const dCp = C2p - C1p;\n const dHp = 2 * Math.sin((rad * dhp) / 2) * Math.sqrt(C1p * C2p);\n\n const SL = 1 + (0.015 * (Lm - 50) ** 2) / Math.sqrt(20 + (Lm - 50) ** 2);\n const SC = 1 + 0.045 * Cp;\n const SH = 1 + 0.015 * Cp * T;\n\n const RC7 = Cp ** 7;\n const RC = 2 * Math.sqrt(RC7 / (RC7 + 25 ** 7));\n const dTheta = 30 * Math.exp(-(((Hm - 275) / 25) ** 2));\n const RT = -RC * Math.sin(2 * rad * dTheta);\n\n return Math.sqrt((dLp / SL) ** 2 + (dCp / SC) ** 2 + (dHp / SH) ** 2 + RT * (dCp / SC) * (dHp / SH));\n};\n\nexport const labToRgb = (lab: LabColor): RgbColor => xyzToRgb(labToXyz(lab));\n\n// CSS Color 4: lab(L a b / alpha). L: number|percentage|none (100% = 100).\n// a/b: number|percentage|none (100% = 125).\nconst LAB_RE = new RegExp(\n `^lab\\\\(\\\\s*(?<l>${NUM_OR_NONE})(?<lp>%?)\\\\s+(?<a>${NUM_OR_NONE})(?<ap>%?)\\\\s+(?<b>${NUM_OR_NONE})(?<bp>%?)` +\n `\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseLabString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = LAB_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const l = parseNum(g.l!); // 100% = 100, so value is unchanged whether `%` present\n const a = g.ap ? parseNum(g.a!) * 1.25 : parseNum(g.a!);\n const b = g.bp ? parseNum(g.b!) * 1.25 : parseNum(g.b!);\n const alpha = g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1);\n return labToRgb({\n l: clamp(l, 0, 100),\n a,\n b,\n alpha: clamp(alpha, 0, 1),\n colorSpace: 'lab',\n });\n};\n\nexport const parseLabObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if ((input as { colorSpace?: unknown }).colorSpace !== 'lab') return null;\n if (!hasKeys(input, ['l', 'a', 'b'])) return null;\n const { l, a, b, alpha = 1 } = input as { l: unknown; a: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(a) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return labToRgb({\n l: clamp(sanitize(l), 0, 100),\n a: sanitize(a),\n b: sanitize(b),\n alpha: clamp(sanitize(alpha), 0, 1),\n colorSpace: 'lab',\n });\n};\n"]} |
| 'use strict';var chunk3V4MONNR_cjs=require('./chunk-3V4MONNR.cjs'),chunkYISEJCI6_cjs=require('./chunk-YISEJCI6.cjs');var N=r=>({h:chunkYISEJCI6_cjs.c(r.h),s:chunkYISEJCI6_cjs.a(r.s,0,100),v:chunkYISEJCI6_cjs.a(r.v,0,100),alpha:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(r.alpha,3),0,1)}),f={h:0,s:0,v:0,alpha:0},y=({r,g:s,b:a,alpha:l})=>{let t=r/255,n=s/255,u=a/255,e=Math.max(t,n,u),c=Math.min(t,n,u),h=e-c,v=e===0?0:h/e,k=0;if(e!==c)switch(e){case t:k=((n-u)/h+(n<u?6:0))/6;break;case n:k=((u-t)/h+2)/6;break;case u:k=((t-n)/h+4)/6;break}let C=k*360;return f.h=C>=0&&C<360?C:(C%360+360)%360,f.s=chunkYISEJCI6_cjs.a(v*100,0,100),f.v=chunkYISEJCI6_cjs.a(e*100,0,100),f.alpha=chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(l,3),0,1),f},j=r=>{let{h:s,s:a,v:l,alpha:t}=y(r),n=chunkYISEJCI6_cjs.b(s,2);return {h:n>=360?0:n,s:chunkYISEJCI6_cjs.b(a,2),v:chunkYISEJCI6_cjs.b(l,2),alpha:t}},o=[0,0,0],M=({h:r,s,v:a,alpha:l})=>{let t=s/100,n=a/100,u=Math.floor(r/60%6),e=r/60-Math.floor(r/60),c=n*(1-t),h=n*(1-e*t),v=n*(1-(1-e)*t);switch(u){case 0:o[0]=n,o[1]=v,o[2]=c;break;case 1:o[0]=h,o[1]=n,o[2]=c;break;case 2:o[0]=c,o[1]=n,o[2]=v;break;case 3:o[0]=c,o[1]=h,o[2]=n;break;case 4:o[0]=v,o[1]=c,o[2]=n;break;default:o[0]=n,o[1]=c,o[2]=h;break}return chunk3V4MONNR_cjs.a({r:o[0]*255,g:o[1]*255,b:o[2]*255,alpha:l})},E=new RegExp(`^hsva?\\(\\s*(?<h>${chunkYISEJCI6_cjs.k})(?<hu>deg|rad|grad|turn)?\\s*(?:,\\s*(?<s_c>${chunkYISEJCI6_cjs.j})%\\s*,\\s*(?<v_c>${chunkYISEJCI6_cjs.j})%(?:\\s*,\\s*(?<al_c>${chunkYISEJCI6_cjs.j})(?<alp_c>%?)?\\s*)?|\\s+(?<s_s>${chunkYISEJCI6_cjs.k})(?<sp_s>%?)\\s+(?<v_s>${chunkYISEJCI6_cjs.k})(?<vp_s>%?)(?:\\s*/\\s*(?<al_s>${chunkYISEJCI6_cjs.k})(?<alp_s>%?)?\\s*)?)\\)$`,"i"),A=r=>{if(typeof r!="string")return null;let s=E.exec(r.trim())?.groups;if(!s)return null;let a=s.s_c!==void 0;if(a&&/^none$/i.test(s.h))return null;let l=s.hu?.toLowerCase()??"deg",t=chunkYISEJCI6_cjs.l(s.h)*(chunkYISEJCI6_cjs.d[l]??1),n=chunkYISEJCI6_cjs.l(s.s_c??s.s_s),u=chunkYISEJCI6_cjs.l(s.v_c??s.v_s),e=s.al_c??s.al_s;if(a&&e!==void 0&&/^none$/i.test(e))return null;let c=!!(s.alp_c??s.alp_s),h=e===void 0?1:chunkYISEJCI6_cjs.l(e)/(c?100:1);return M(N({h:t,s:n,v:u,alpha:h}))},S=r=>{if(!chunkYISEJCI6_cjs.h(r)||!chunkYISEJCI6_cjs.i(r,["h","s","v"]))return null;let{h:s,s:a,v:l,alpha:t=1}=r;return !chunkYISEJCI6_cjs.f(s)||!chunkYISEJCI6_cjs.f(a)||!chunkYISEJCI6_cjs.f(l)||!chunkYISEJCI6_cjs.f(t)?null:M(N({h:chunkYISEJCI6_cjs.g(s),s:chunkYISEJCI6_cjs.g(a),v:chunkYISEJCI6_cjs.g(l),alpha:chunkYISEJCI6_cjs.g(t)}))};exports.a=y;exports.b=j;exports.c=M;exports.d=A;exports.e=S;//# sourceMappingURL=chunk-PEAYLEZO.cjs.map | ||
| //# sourceMappingURL=chunk-PEAYLEZO.cjs.map |
| {"version":3,"sources":["../src/colorModels/hsv.ts"],"names":["clampHsv","hsv","normalizeHue","clamp","round","_hsvBuf","rgbToHsvRaw","g","b","alpha","rn","gn","bn","max","min","d","s","h","hDeg","rgbToHsv","rgb","v","hr","_RGB","hsvToRgb","sn","vn","i","f","p","q","t","clampRgb","HSV_RE","NUM_OR_NONE","NUM","parseHsvString","input","isComma","unit","parseNum","ANGLE_UNITS","rawA","isPercent","parseHsvObject","isObject","hasKeys","isAnyNumber","sanitize"],"mappings":"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","file":"chunk-PEAYLEZO.cjs","sourcesContent":["import {\n ANGLE_UNITS,\n NUM,\n NUM_OR_NONE,\n clamp,\n hasKeys,\n isAnyNumber,\n isObject,\n normalizeHue,\n parseNum,\n round,\n sanitize,\n} from '../helpers.js';\nimport type { HsvColor, RgbColor } from '../types.js';\nimport { clampRgb } from './rgb.js';\n\nexport const clampHsv = (hsv: HsvColor): HsvColor => ({\n h: normalizeHue(hsv.h),\n s: clamp(hsv.s, 0, 100),\n v: clamp(hsv.v, 0, 100),\n alpha: clamp(round(hsv.alpha, 3), 0, 1),\n});\n\n// Shared write buffer for rgbToHsvRaw — callers must destructure immediately, never store the reference.\nconst _hsvBuf: HsvColor = { h: 0, s: 0, v: 0, alpha: 0 };\n\nexport const rgbToHsvRaw = ({ r, g, b, alpha }: 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 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 const hDeg = h * 360;\n _hsvBuf.h = hDeg >= 0 && hDeg < 360 ? hDeg : ((hDeg % 360) + 360) % 360;\n _hsvBuf.s = clamp(s * 100, 0, 100);\n _hsvBuf.v = clamp(max * 100, 0, 100);\n _hsvBuf.alpha = clamp(round(alpha, 3), 0, 1);\n return _hsvBuf;\n};\n\nexport const rgbToHsv = (rgb: RgbColor): HsvColor => {\n const { h, s, v, alpha } = rgbToHsvRaw(rgb);\n const hr = round(h, 2);\n // round() can push a value just below 360 to 360.00 due to floating-point; clamp back to 0.\n return { h: hr >= 360 ? 0 : hr, s: round(s, 2), v: round(v, 2), alpha };\n};\n\nconst _RGB = [0, 0, 0] as [number, number, number];\n\nexport const hsvToRgb = ({ h, s, v, alpha }: 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 switch (i) {\n case 0:\n _RGB[0] = vn;\n _RGB[1] = t;\n _RGB[2] = p;\n break;\n case 1:\n _RGB[0] = q;\n _RGB[1] = vn;\n _RGB[2] = p;\n break;\n case 2:\n _RGB[0] = p;\n _RGB[1] = vn;\n _RGB[2] = t;\n break;\n case 3:\n _RGB[0] = p;\n _RGB[1] = q;\n _RGB[2] = vn;\n break;\n case 4:\n _RGB[0] = t;\n _RGB[1] = p;\n _RGB[2] = vn;\n break;\n default: // case 5 — not an error handler; i is always 0–5 for h in [0, 360)\n _RGB[0] = vn;\n _RGB[1] = p;\n _RGB[2] = q;\n break;\n }\n\n return clampRgb({ r: _RGB[0] * 255, g: _RGB[1] * 255, b: _RGB[2] * 255, alpha });\n};\n\n// HSV/HSVA is a non-standard, library-defined syntax (not part of any CSS spec).\n// Format mirrors HSL for consistency. Legacy comma form kept for back-compat input;\n// modern space form supports optional `%` and the CSS Color 4 `none` keyword.\n// Named groups: `_c` = comma/legacy branch, `_s` = space/modern branch.\nconst HSV_RE = new RegExp(\n `^hsva?\\\\(\\\\s*(?<h>${NUM_OR_NONE})(?<hu>deg|rad|grad|turn)?\\\\s*(?:` +\n `,\\\\s*(?<s_c>${NUM})%\\\\s*,\\\\s*(?<v_c>${NUM})%` +\n `(?:\\\\s*,\\\\s*(?<al_c>${NUM})(?<alp_c>%?)?\\\\s*)?` +\n `|` +\n `\\\\s+(?<s_s>${NUM_OR_NONE})(?<sp_s>%?)\\\\s+(?<v_s>${NUM_OR_NONE})(?<vp_s>%?)` +\n `(?:\\\\s*/\\\\s*(?<al_s>${NUM_OR_NONE})(?<alp_s>%?)?\\\\s*)?` +\n `)\\\\)$`,\n 'i'\n);\n\nexport const parseHsvString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = HSV_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const isComma = g.s_c !== undefined;\n if (isComma && /^none$/i.test(g.h!)) return null;\n const unit = g.hu?.toLowerCase() ?? 'deg';\n const h = parseNum(g.h!) * (ANGLE_UNITS[unit] ?? 1);\n const s = parseNum((g.s_c ?? g.s_s)!);\n const v = parseNum((g.v_c ?? g.v_s)!);\n const rawA = g.al_c ?? g.al_s;\n if (isComma && rawA !== undefined && /^none$/i.test(rawA)) return null;\n const isPercent = !!(g.alp_c ?? g.alp_s);\n const alpha = rawA === undefined ? 1 : parseNum(rawA) / (isPercent ? 100 : 1);\n return hsvToRgb(clampHsv({ h, s, v, alpha }));\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, alpha = 1 } = input as { h: unknown; s: unknown; v: unknown; alpha?: unknown };\n if (!isAnyNumber(h) || !isAnyNumber(s) || !isAnyNumber(v) || !isAnyNumber(alpha)) return null;\n return hsvToRgb(clampHsv({ h: sanitize(h), s: sanitize(s), v: sanitize(v), alpha: sanitize(alpha) }));\n};\n"]} |
| import {a,b,h,i,f,g,l,k}from'./chunk-IOXRZECH.mjs';var $=s=>({r:a(s.r,0,255),g:a(s.g,0,255),b:a(s.b,0,255),alpha:a(b(s.alpha,3),0,1)}),x=s=>{if(!h(s))return null;let n=s.colorSpace;if(n==="display-p3"||n==="rec2020"||!i(s,["r","g","b"]))return null;let{r:e,g:t,b:c,alpha:l=1}=s;return !f(e)||!f(t)||!f(c)||!f(l)?null:$({r:g(e),g:g(t),b:g(c),alpha:g(l)})},y=new RegExp(`^rgba?\\(\\s*(?<r>${k})(?<rp>%?)\\s*(?:,\\s*(?<g_c>${k})(?<gp_c>%?)\\s*,\\s*(?<b_c>${k})(?<bp_c>%?)(?:\\s*,\\s*(?<al_c>${k})(?<alp_c>%?))?\\s*|\\s+(?<g_s>${k})(?<gp_s>%?)\\s+(?<b_s>${k})(?<bp_s>%?)(?:\\s*/\\s*(?<al_s>${k})(?<alp_s>%?))?\\s*)\\)$`,"i"),N=s=>{if(typeof s!="string")return null;let n=y.exec(s.trim())?.groups;if(!n)return null;let e=n.g_c!==void 0,t=n.g_c??n.g_s,c=n.b_c??n.b_s,l$1=!!n.rp,_=!!(n.gp_c??n.gp_s),b=!!(n.bp_c??n.bp_s),m=l$1?l(n.r)/100*255:l(n.r),w=_?l(t)/100*255:l(t),d=b?l(c)/100*255:l(c);if(e&&(l$1!==_||_!==b||/^none$/i.test(n.r)||/^none$/i.test(t)||/^none$/i.test(c)))return null;let g=n.al_c??n.al_s,h=!!(n.alp_c??n.alp_s);if(e&&g!==void 0&&/^none$/i.test(g))return null;let k=g===void 0?1:l(g)/(h?100:1);return $({r:m,g:w,b:d,alpha:k})};export{$ as a,x as b,N as c};//# sourceMappingURL=chunk-Q3O3QQ4H.mjs.map | ||
| //# sourceMappingURL=chunk-Q3O3QQ4H.mjs.map |
| {"version":3,"sources":["../src/colorModels/rgb.ts"],"names":["clampRgb","rgb","clamp","round","parseRgbObject","input","isObject","cs","hasKeys","r","g","b","alpha","isAnyNumber","sanitize","RGB_RE","NUM_OR_NONE","parseRgbString","isComma","gRaw","bRaw","rPct","gPct","bPct","parseNum","gc","rawA","aPct"],"mappings":"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","file":"chunk-Q3O3QQ4H.mjs","sourcesContent":["import { NUM_OR_NONE, clamp, hasKeys, isAnyNumber, isObject, parseNum, round, sanitize } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nexport const clampRgb = (rgb: RgbColor): RgbColor => ({\n r: clamp(rgb.r, 0, 255),\n g: clamp(rgb.g, 0, 255),\n b: clamp(rgb.b, 0, 255),\n alpha: clamp(round(rgb.alpha, 3), 0, 1),\n});\n\nexport const parseRgbObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n const cs = (input as { colorSpace?: unknown }).colorSpace;\n if (cs === 'display-p3' || cs === 'rec2020') return null;\n if (!hasKeys(input, ['r', 'g', 'b'])) return null;\n const { r, g, b, alpha = 1 } = input as { r: unknown; g: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(r) || !isAnyNumber(g) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return clampRgb({ r: sanitize(r), g: sanitize(g), b: sanitize(b), alpha: sanitize(alpha) });\n};\n\n// Matches both legacy comma syntax: rgb(255, 0, 0) / rgba(255, 0, 0, 0.5)\n// and modern space syntax: rgb(255 0 0) / rgb(255 0 0 / 0.5).\n// Supports percentage-based channels and the CSS Color 4 `none` keyword.\n// Named groups are suffixed `_c` (comma/legacy branch) or `_s` (space/modern branch)\n// because ES2022 regex requires distinct names across alternation branches.\nconst RGB_RE = new RegExp(\n `^rgba?\\\\(\\\\s*(?<r>${NUM_OR_NONE})(?<rp>%?)\\\\s*(?:` +\n `,\\\\s*(?<g_c>${NUM_OR_NONE})(?<gp_c>%?)\\\\s*,\\\\s*(?<b_c>${NUM_OR_NONE})(?<bp_c>%?)` +\n `(?:\\\\s*,\\\\s*(?<al_c>${NUM_OR_NONE})(?<alp_c>%?))?\\\\s*` +\n `|` +\n `\\\\s+(?<g_s>${NUM_OR_NONE})(?<gp_s>%?)\\\\s+(?<b_s>${NUM_OR_NONE})(?<bp_s>%?)` +\n `(?:\\\\s*/\\\\s*(?<al_s>${NUM_OR_NONE})(?<alp_s>%?))?\\\\s*` +\n `)\\\\)$`,\n 'i'\n);\n\nexport const parseRgbString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = RGB_RE.exec(input.trim())?.groups;\n if (!g) return null;\n\n const isComma = g.g_c !== undefined;\n const gRaw = g.g_c ?? g.g_s!;\n const bRaw = g.b_c ?? g.b_s!;\n const rPct = !!g.rp;\n const gPct = !!(g.gp_c ?? g.gp_s);\n const bPct = !!(g.bp_c ?? g.bp_s);\n\n const r = rPct ? (parseNum(g.r!) / 100) * 255 : parseNum(g.r!);\n const gc = gPct ? (parseNum(gRaw) / 100) * 255 : parseNum(gRaw);\n const b = bPct ? (parseNum(bRaw) / 100) * 255 : parseNum(bRaw);\n\n // Legacy: channels must match type, no `none`. Modern: mixing + `none` allowed.\n if (isComma) {\n if (rPct !== gPct || gPct !== bPct) return null;\n if (/^none$/i.test(g.r!) || /^none$/i.test(gRaw) || /^none$/i.test(bRaw)) return null;\n }\n\n const rawA = g.al_c ?? g.al_s;\n const aPct = !!(g.alp_c ?? g.alp_s);\n if (isComma && rawA !== undefined && /^none$/i.test(rawA)) return null;\n const alpha = rawA === undefined ? 1 : parseNum(rawA) / (aPct ? 100 : 1);\n\n return clampRgb({ r, g: gc, b, alpha });\n};\n"]} |
| import {a as a$1}from'./chunk-Q3O3QQ4H.mjs';import {a,b,l,d,h,i,f as f$1,g,k,j as j$1,c}from'./chunk-IOXRZECH.mjs';var N=r=>({h:c(r.h),s:a(r.s,0,100),v:a(r.v,0,100),alpha:a(b(r.alpha,3),0,1)}),f={h:0,s:0,v:0,alpha:0},y=({r,g:s,b:a$1,alpha:l})=>{let t=r/255,n=s/255,u=a$1/255,e=Math.max(t,n,u),c=Math.min(t,n,u),h=e-c,v=e===0?0:h/e,k=0;if(e!==c)switch(e){case t:k=((n-u)/h+(n<u?6:0))/6;break;case n:k=((u-t)/h+2)/6;break;case u:k=((t-n)/h+4)/6;break}let C=k*360;return f.h=C>=0&&C<360?C:(C%360+360)%360,f.s=a(v*100,0,100),f.v=a(e*100,0,100),f.alpha=a(b(l,3),0,1),f},j=r=>{let{h:s,s:a,v:l,alpha:t}=y(r),n=b(s,2);return {h:n>=360?0:n,s:b(a,2),v:b(l,2),alpha:t}},o=[0,0,0],M=({h:r,s,v:a,alpha:l})=>{let t=s/100,n=a/100,u=Math.floor(r/60%6),e=r/60-Math.floor(r/60),c=n*(1-t),h=n*(1-e*t),v=n*(1-(1-e)*t);switch(u){case 0:o[0]=n,o[1]=v,o[2]=c;break;case 1:o[0]=h,o[1]=n,o[2]=c;break;case 2:o[0]=c,o[1]=n,o[2]=v;break;case 3:o[0]=c,o[1]=h,o[2]=n;break;case 4:o[0]=v,o[1]=c,o[2]=n;break;default:o[0]=n,o[1]=c,o[2]=h;break}return a$1({r:o[0]*255,g:o[1]*255,b:o[2]*255,alpha:l})},E=new RegExp(`^hsva?\\(\\s*(?<h>${k})(?<hu>deg|rad|grad|turn)?\\s*(?:,\\s*(?<s_c>${j$1})%\\s*,\\s*(?<v_c>${j$1})%(?:\\s*,\\s*(?<al_c>${j$1})(?<alp_c>%?)?\\s*)?|\\s+(?<s_s>${k})(?<sp_s>%?)\\s+(?<v_s>${k})(?<vp_s>%?)(?:\\s*/\\s*(?<al_s>${k})(?<alp_s>%?)?\\s*)?)\\)$`,"i"),A=r=>{if(typeof r!="string")return null;let s=E.exec(r.trim())?.groups;if(!s)return null;let a=s.s_c!==void 0;if(a&&/^none$/i.test(s.h))return null;let l$1=s.hu?.toLowerCase()??"deg",t=l(s.h)*(d[l$1]??1),n=l(s.s_c??s.s_s),u=l(s.v_c??s.v_s),e=s.al_c??s.al_s;if(a&&e!==void 0&&/^none$/i.test(e))return null;let c=!!(s.alp_c??s.alp_s),h=e===void 0?1:l(e)/(c?100:1);return M(N({h:t,s:n,v:u,alpha:h}))},S=r=>{if(!h(r)||!i(r,["h","s","v"]))return null;let{h:s,s:a,v:l,alpha:t=1}=r;return !f$1(s)||!f$1(a)||!f$1(l)||!f$1(t)?null:M(N({h:g(s),s:g(a),v:g(l),alpha:g(t)}))};export{y as a,j as b,M as c,A as d,S as e};//# sourceMappingURL=chunk-YCE2ZDOI.mjs.map | ||
| //# sourceMappingURL=chunk-YCE2ZDOI.mjs.map |
| {"version":3,"sources":["../src/colorModels/hsv.ts"],"names":["clampHsv","hsv","normalizeHue","clamp","round","_hsvBuf","rgbToHsvRaw","g","b","alpha","rn","gn","bn","max","min","d","s","h","hDeg","rgbToHsv","rgb","v","hr","_RGB","hsvToRgb","sn","vn","i","f","p","q","t","clampRgb","HSV_RE","NUM_OR_NONE","NUM","parseHsvString","input","isComma","unit","parseNum","ANGLE_UNITS","rawA","isPercent","parseHsvObject","isObject","hasKeys","isAnyNumber","sanitize"],"mappings":"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","file":"chunk-YCE2ZDOI.mjs","sourcesContent":["import {\n ANGLE_UNITS,\n NUM,\n NUM_OR_NONE,\n clamp,\n hasKeys,\n isAnyNumber,\n isObject,\n normalizeHue,\n parseNum,\n round,\n sanitize,\n} from '../helpers.js';\nimport type { HsvColor, RgbColor } from '../types.js';\nimport { clampRgb } from './rgb.js';\n\nexport const clampHsv = (hsv: HsvColor): HsvColor => ({\n h: normalizeHue(hsv.h),\n s: clamp(hsv.s, 0, 100),\n v: clamp(hsv.v, 0, 100),\n alpha: clamp(round(hsv.alpha, 3), 0, 1),\n});\n\n// Shared write buffer for rgbToHsvRaw — callers must destructure immediately, never store the reference.\nconst _hsvBuf: HsvColor = { h: 0, s: 0, v: 0, alpha: 0 };\n\nexport const rgbToHsvRaw = ({ r, g, b, alpha }: 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 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 const hDeg = h * 360;\n _hsvBuf.h = hDeg >= 0 && hDeg < 360 ? hDeg : ((hDeg % 360) + 360) % 360;\n _hsvBuf.s = clamp(s * 100, 0, 100);\n _hsvBuf.v = clamp(max * 100, 0, 100);\n _hsvBuf.alpha = clamp(round(alpha, 3), 0, 1);\n return _hsvBuf;\n};\n\nexport const rgbToHsv = (rgb: RgbColor): HsvColor => {\n const { h, s, v, alpha } = rgbToHsvRaw(rgb);\n const hr = round(h, 2);\n // round() can push a value just below 360 to 360.00 due to floating-point; clamp back to 0.\n return { h: hr >= 360 ? 0 : hr, s: round(s, 2), v: round(v, 2), alpha };\n};\n\nconst _RGB = [0, 0, 0] as [number, number, number];\n\nexport const hsvToRgb = ({ h, s, v, alpha }: 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 switch (i) {\n case 0:\n _RGB[0] = vn;\n _RGB[1] = t;\n _RGB[2] = p;\n break;\n case 1:\n _RGB[0] = q;\n _RGB[1] = vn;\n _RGB[2] = p;\n break;\n case 2:\n _RGB[0] = p;\n _RGB[1] = vn;\n _RGB[2] = t;\n break;\n case 3:\n _RGB[0] = p;\n _RGB[1] = q;\n _RGB[2] = vn;\n break;\n case 4:\n _RGB[0] = t;\n _RGB[1] = p;\n _RGB[2] = vn;\n break;\n default: // case 5 — not an error handler; i is always 0–5 for h in [0, 360)\n _RGB[0] = vn;\n _RGB[1] = p;\n _RGB[2] = q;\n break;\n }\n\n return clampRgb({ r: _RGB[0] * 255, g: _RGB[1] * 255, b: _RGB[2] * 255, alpha });\n};\n\n// HSV/HSVA is a non-standard, library-defined syntax (not part of any CSS spec).\n// Format mirrors HSL for consistency. Legacy comma form kept for back-compat input;\n// modern space form supports optional `%` and the CSS Color 4 `none` keyword.\n// Named groups: `_c` = comma/legacy branch, `_s` = space/modern branch.\nconst HSV_RE = new RegExp(\n `^hsva?\\\\(\\\\s*(?<h>${NUM_OR_NONE})(?<hu>deg|rad|grad|turn)?\\\\s*(?:` +\n `,\\\\s*(?<s_c>${NUM})%\\\\s*,\\\\s*(?<v_c>${NUM})%` +\n `(?:\\\\s*,\\\\s*(?<al_c>${NUM})(?<alp_c>%?)?\\\\s*)?` +\n `|` +\n `\\\\s+(?<s_s>${NUM_OR_NONE})(?<sp_s>%?)\\\\s+(?<v_s>${NUM_OR_NONE})(?<vp_s>%?)` +\n `(?:\\\\s*/\\\\s*(?<al_s>${NUM_OR_NONE})(?<alp_s>%?)?\\\\s*)?` +\n `)\\\\)$`,\n 'i'\n);\n\nexport const parseHsvString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = HSV_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const isComma = g.s_c !== undefined;\n if (isComma && /^none$/i.test(g.h!)) return null;\n const unit = g.hu?.toLowerCase() ?? 'deg';\n const h = parseNum(g.h!) * (ANGLE_UNITS[unit] ?? 1);\n const s = parseNum((g.s_c ?? g.s_s)!);\n const v = parseNum((g.v_c ?? g.v_s)!);\n const rawA = g.al_c ?? g.al_s;\n if (isComma && rawA !== undefined && /^none$/i.test(rawA)) return null;\n const isPercent = !!(g.alp_c ?? g.alp_s);\n const alpha = rawA === undefined ? 1 : parseNum(rawA) / (isPercent ? 100 : 1);\n return hsvToRgb(clampHsv({ h, s, v, alpha }));\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, alpha = 1 } = input as { h: unknown; s: unknown; v: unknown; alpha?: unknown };\n if (!isAnyNumber(h) || !isAnyNumber(s) || !isAnyNumber(v) || !isAnyNumber(alpha)) return null;\n return hsvToRgb(clampHsv({ h: sanitize(h), s: sanitize(s), v: sanitize(v), alpha: sanitize(alpha) }));\n};\n"]} |
| 'use strict';var t=(n,r,e)=>Math.min(Math.max(n,r),e),s=(n,r=0)=>{let e=10**r;return Math.round(e*n)/e},u=n=>n>=0&&n<360?n:(n%360+360)%360,m={deg:1,grad:.9,turn:360,rad:360/(2*Math.PI)},b=n=>typeof n=="number"&&!Number.isNaN(n)&&Number.isFinite(n),i=n=>typeof n=="number",c=n=>Number.isNaN(n)?0:n,p=n=>typeof n=="object"&&n!==null&&!Array.isArray(n),a=(n,r)=>r.every(e=>e in n),o="[+-]?\\d*\\.?\\d+",N=`(?:none|${o})`,x=n=>n.toLowerCase()==="none"?0:Number(n);exports.a=t;exports.b=s;exports.c=u;exports.d=m;exports.e=b;exports.f=i;exports.g=c;exports.h=p;exports.i=a;exports.j=o;exports.k=N;exports.l=x;//# sourceMappingURL=chunk-YISEJCI6.cjs.map | ||
| //# sourceMappingURL=chunk-YISEJCI6.cjs.map |
| {"version":3,"sources":["../src/helpers.ts"],"names":["clamp","min","max","round","d","p","normalizeHue","h","ANGLE_UNITS","isNumber","isAnyNumber","sanitize","isObject","v","hasKeys","obj","keys","k","NUM","NUM_OR_NONE","parseNum"],"mappings":"aAAO,IAAMA,CAAAA,CAAQ,CAAC,CAAA,CAAWC,CAAAA,CAAaC,CAAAA,GAAwB,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGD,CAAG,CAAA,CAAGC,CAAG,CAAA,CAEvFC,CAAAA,CAAQ,CAAC,CAAA,CAAWC,CAAAA,CAAI,CAAA,GAAc,CACjD,IAAMC,CAAAA,CAAI,EAAA,EAAMD,CAAAA,CAChB,OAAO,IAAA,CAAK,KAAA,CAAMC,CAAAA,CAAI,CAAC,EAAIA,CAC7B,CAAA,CAIaC,CAAAA,CAAgBC,CAAAA,EAAuBA,CAAAA,EAAK,CAAA,EAAKA,CAAAA,CAAI,GAAA,CAAMA,CAAAA,CAAAA,CAAMA,CAAAA,CAAI,GAAA,CAAO,GAAA,EAAO,GAAA,CAEnFC,CAAAA,CAAsC,CAAE,GAAA,CAAK,CAAA,CAAG,IAAA,CAAM,EAAA,CAAK,IAAA,CAAM,GAAA,CAAK,GAAA,CAAK,GAAA,EAAO,CAAA,CAAI,IAAA,CAAK,EAAA,CAAI,CAAA,CAE/FC,CAAAA,CAAY,CAAA,EAA4B,OAAO,GAAM,QAAA,EAAY,CAAC,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAK,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,CAGtGC,CAAAA,CAAe,CAAA,EAA4B,OAAO,CAAA,EAAM,QAAA,CAGxDC,CAAAA,CAAY,CAAA,EAAuB,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,CAAI,CAAA,CAAI,CAAA,CAEzDC,CAAAA,CAAYC,CAAAA,EACvB,OAAOA,CAAAA,EAAM,QAAA,EAAYA,CAAAA,GAAM,IAAA,EAAQ,CAAC,KAAA,CAAM,OAAA,CAAQA,CAAC,CAAA,CAE5CC,CAAAA,CAAU,CAAmBC,CAAAA,CAA8BC,CAAAA,GACtEA,CAAAA,CAAK,KAAA,CAAOC,CAAAA,EAAMA,CAAAA,IAAKF,CAAG,CAAA,CAGfG,CAAAA,CAAM,mBAAA,CACNC,CAAAA,CAAc,CAAA,QAAA,EAAWD,CAAG,CAAA,CAAA,CAAA,CAG5BE,CAAAA,CAAYP,CAAAA,EAAuBA,CAAAA,CAAE,WAAA,EAAY,GAAM,MAAA,CAAS,CAAA,CAAI,MAAA,CAAOA,CAAC","file":"chunk-YISEJCI6.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 => {\n const p = 10 ** d;\n return Math.round(p * n) / p;\n};\n\n// Normalize hue to [0, 360). Avoids (h + 360) % 360 which can lose precision\n// when h is already in [0, 360) due to binary floating-point subtraction.\nexport const normalizeHue = (h: number): number => (h >= 0 && h < 360 ? h : ((h % 360) + 360) % 360);\n\nexport const ANGLE_UNITS: Record<string, number> = { deg: 1, grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) };\n\nexport const isNumber = (n: unknown): n is number => typeof n === 'number' && !Number.isNaN(n) && Number.isFinite(n);\n\n// Accepts any JS number type (including NaN/±Infinity); use sanitize() before clamping\nexport const isAnyNumber = (n: unknown): n is number => typeof n === 'number';\n\n// Replace NaN with 0; ±Infinity is left for clamp() to handle naturally\nexport const sanitize = (n: number): number => (Number.isNaN(n) ? 0 : 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\n// Shared regex fragments. NUM matches a signed decimal, NUM_OR_NONE adds the CSS Color 4 `none` keyword.\nexport const NUM = '[+-]?\\\\d*\\\\.?\\\\d+';\nexport const NUM_OR_NONE = `(?:none|${NUM})`;\n\n/** Parse a CSS Color 4 channel token. `none` → 0; a plain number is returned as-is. */\nexport const parseNum = (v: string): number => (v.toLowerCase() === 'none' ? 0 : Number(v));\n"]} |
| 'use strict';var chunkYISEJCI6_cjs=require('./chunk-YISEJCI6.cjs');var c=Array.from({length:256},(t,r)=>r.toString(16).padStart(2,"0")),n=t=>(t&15)+9*(t>>6),u=(t,r)=>n(t.charCodeAt(r))<<4|n(t.charCodeAt(r+1)),g=/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,f=t=>{if(typeof t!="string")return null;let r=t.trim();if(!g.test(r))return null;let o=r.length;if(o===4||o===5){let e=n(r.charCodeAt(1)),a=n(r.charCodeAt(2)),l=n(r.charCodeAt(3)),b=o===5?n(r.charCodeAt(4)):15;return {r:e|e<<4,g:a|a<<4,b:l|l<<4,alpha:chunkYISEJCI6_cjs.b((b|b<<4)/255,3)}}return {r:u(r,1),g:u(r,3),b:u(r,5),alpha:o===9?chunkYISEJCI6_cjs.b(u(r,7)/255,3):1}},m=({r:t,g:r,b:o,alpha:e})=>{let a="#"+c[chunkYISEJCI6_cjs.a(Math.round(t),0,255)]+c[chunkYISEJCI6_cjs.a(Math.round(r),0,255)]+c[chunkYISEJCI6_cjs.a(Math.round(o),0,255)];return e<1?a+c[chunkYISEJCI6_cjs.a(Math.round(e*255),0,255)]:a};exports.a=f;exports.b=m;//# sourceMappingURL=chunk-Z5MM7DU5.cjs.map | ||
| //# sourceMappingURL=chunk-Z5MM7DU5.cjs.map |
| {"version":3,"sources":["../src/colorModels/hex.ts"],"names":["HEX_BYTE","_","i","hexNibble","c","hexByte","s","HEX_RE","parseHex","input","len","rv","gv","bv","av","round","rgbToHex","r","g","b","alpha","hex","clamp"],"mappings":"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","file":"chunk-Z5MM7DU5.cjs","sourcesContent":["import { clamp, round } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nconst HEX_BYTE = /* #__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\nconst hexNibble = (c: number): number => (c & 0xf) + 9 * (c >> 6);\nconst hexByte = (s: string, i: number): number => (hexNibble(s.charCodeAt(i)) << 4) | hexNibble(s.charCodeAt(i + 1));\nconst HEX_RE = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;\n\nexport const parseHex = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const s = input.trim();\n if (!HEX_RE.test(s)) return null;\n const len = s.length;\n\n if (len === 4 || len === 5) {\n const rv = hexNibble(s.charCodeAt(1));\n const gv = hexNibble(s.charCodeAt(2));\n const bv = hexNibble(s.charCodeAt(3));\n const av = len === 5 ? hexNibble(s.charCodeAt(4)) : 15;\n return { r: rv | (rv << 4), g: gv | (gv << 4), b: bv | (bv << 4), alpha: round((av | (av << 4)) / 255, 3) };\n }\n\n return {\n r: hexByte(s, 1),\n g: hexByte(s, 3),\n b: hexByte(s, 5),\n alpha: len === 9 ? round(hexByte(s, 7) / 255, 3) : 1,\n };\n};\n\nexport const rgbToHex = ({ r, g, b, alpha }: RgbColor): string => {\n const hex =\n '#' +\n HEX_BYTE[clamp(Math.round(r), 0, 255)] +\n HEX_BYTE[clamp(Math.round(g), 0, 255)] +\n HEX_BYTE[clamp(Math.round(b), 0, 255)];\n return alpha < 1 ? hex + HEX_BYTE[clamp(Math.round(alpha * 255), 0, 255)] : hex;\n};\n"]} |
+1
-1
@@ -1,2 +0,2 @@ | ||
| 'use strict';var chunk5Q4QJ3KC_cjs=require('./chunk-5Q4QJ3KC.cjs'),chunkEPG4VVQB_cjs=require('./chunk-EPG4VVQB.cjs'),chunkBBEOVRYB_cjs=require('./chunk-BBEOVRYB.cjs');require('./chunk-IHOZOJHA.cjs');var chunkX5FCFNQN_cjs=require('./chunk-X5FCFNQN.cjs'),chunkGYCEEHZT_cjs=require('./chunk-GYCEEHZT.cjs'),chunkEXPXWBLP_cjs=require('./chunk-EXPXWBLP.cjs');var B=n=>({h:chunkEXPXWBLP_cjs.c(n.h),s:chunkEXPXWBLP_cjs.a(n.s,0,100),l:chunkEXPXWBLP_cjs.a(n.l,0,100),alpha:chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.b(n.alpha,3),0,1)}),R={h:0,s:0,l:0,alpha:0},y=({r:n,g:r,b:o,alpha:t})=>{let l=n/255,e=r/255,s=o/255,b=Math.max(l,e,s),c=Math.min(l,e,s),m=(b+c)/2,C=0,x=0;if(b!==c){let O=b-c;switch(x=m>.5?O/(2-b-c):O/(b+c),b){case l:C=((e-s)/O+(e<s?6:0))/6;break;case e:C=((s-l)/O+2)/6;break;case s:C=((l-e)/O+4)/6;break}}let _=C*360;return R.h=_>=0&&_<360?_:(_%360+360)%360,R.s=chunkEXPXWBLP_cjs.a(x*100,0,100),R.l=chunkEXPXWBLP_cjs.a(m*100,0,100),R.alpha=chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.b(t,3),0,1),R};var A=(n,r,o)=>(o<0&&(o+=1),o>1&&(o-=1),o<1/6?n+(r-n)*6*o:o<1/2?r:o<2/3?n+(r-n)*(2/3-o)*6:n),k=({h:n,s:r,l:o,alpha:t})=>{let l=r/100,e=o/100,s=e<.5?e*(1+l):e+l-e*l,b=2*e-s,c=(n%360+360)%360/360;return {r:A(b,s,c+1/3)*255,g:A(b,s,c)*255,b:A(b,s,c-1/3)*255,alpha:t}},V=n=>{if(!chunkEXPXWBLP_cjs.h(n)||!chunkEXPXWBLP_cjs.i(n,["h","s","l"]))return null;let{h:r,s:o,l:t,alpha:l=1}=n;return !chunkEXPXWBLP_cjs.f(r)||!chunkEXPXWBLP_cjs.f(o)||!chunkEXPXWBLP_cjs.f(t)||!chunkEXPXWBLP_cjs.f(l)?null:k(B({h:chunkEXPXWBLP_cjs.g(r),s:chunkEXPXWBLP_cjs.g(o),l:chunkEXPXWBLP_cjs.g(t),alpha:chunkEXPXWBLP_cjs.g(l)}))},p="[+-]?\\d*\\.?\\d+",mr=new RegExp(`^hsla?\\(\\s*(${p})(deg|rad|grad|turn)?\\s*(?:,\\s*(${p})%\\s*,\\s*(${p})%(?:\\s*,\\s*(${p})(%?)?\\s*)?|\\s+(${p})(%?)\\s+(${p})(%?)(?:\\s*/\\s*(${p})(%?)?\\s*)?)\\)$`,"i"),X=n=>{if(typeof n!="string")return null;let r=mr.exec(n.trim());if(!r)return null;let o=r[2]?.toLowerCase()??"deg",t=Number(r[1])*(chunkEXPXWBLP_cjs.d[o]??1),l=Number(r[3]??r[7]),e=Number(r[4]??r[9]),s=r[5]??r[11],b=!!(r[6]??r[12]),c=s===void 0?1:Number(s)/(b?100:1);return k(B({h:t,s:l,l:e,alpha:c}))};var J=({l:n,c:r,h:o,alpha:t})=>({l:n,a:r*Math.cos(o*Math.PI/180),b:r*Math.sin(o*Math.PI/180),alpha:t}),Q=n=>{let{l:r,a:o,b:t,alpha:l}=chunkBBEOVRYB_cjs.b(n),e=Math.sqrt(o*o+t*t),s=Math.atan2(t,o)*180/Math.PI;return {l:r,c:e,h:e<4e-6?0:chunkEXPXWBLP_cjs.c(s),alpha:l}},F=n=>chunkBBEOVRYB_cjs.d(J(n)),W=n=>chunkBBEOVRYB_cjs.c(J(n)),Y=n=>{if(!chunkEXPXWBLP_cjs.h(n)||n.colorSpace==="lch"||!chunkEXPXWBLP_cjs.i(n,["l","c","h"]))return null;let{l:r,c:o,h:t,alpha:l=1}=n;return !chunkEXPXWBLP_cjs.f(r)||!chunkEXPXWBLP_cjs.f(o)||!chunkEXPXWBLP_cjs.f(t)||!chunkEXPXWBLP_cjs.f(l)||chunkEXPXWBLP_cjs.g(r)>1?null:W({l:chunkEXPXWBLP_cjs.g(r),c:Math.max(0,chunkEXPXWBLP_cjs.g(o)),h:chunkEXPXWBLP_cjs.c(chunkEXPXWBLP_cjs.g(t)),alpha:chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.g(l),0,1)})},pr=/^oklch\(\s*(none|[+-]?\d*\.?\d+)(%?)\s+(none|[+-]?\d*\.?\d+)(%?)\s+(none|[+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*(?:\/\s*(none|[+-]?\d*\.?\d+)(%)?\s*)?\)$/i,f=n=>n.toLowerCase()==="none"?0:Number(n),Z=n=>{if(typeof n!="string")return null;let r=pr.exec(n.trim());if(!r)return null;let o=r[2]?f(r[1])/100:f(r[1]),t=Math.max(0,r[4]?f(r[3])*.004:f(r[3])),l=r[6]?.toLowerCase()??"deg",e=f(r[5])*(chunkEXPXWBLP_cjs.d[l]??1),s=r[7]===void 0?1:f(r[7])/(r[8]?100:1);return W({l:o,c:t,h:chunkEXPXWBLP_cjs.c(e),alpha:chunkEXPXWBLP_cjs.a(s,0,1)})};var rr=[[chunk5Q4QJ3KC_cjs.a,"hex"],[chunkGYCEEHZT_cjs.c,"rgb"],[X,"hsl"],[Z,"oklch"],[chunkBBEOVRYB_cjs.h,"oklab"]],or=[[chunkGYCEEHZT_cjs.b,"rgb"],[V,"hsl"],[chunkBBEOVRYB_cjs.g,"oklab"],[Y,"oklch"]],tr=rr.map(([n])=>n),nr=or.map(([n])=>n),lr=[...tr,...nr],L=[...lr],M=[],er=n=>{if(n==="transparent")return {r:0,g:0,b:0,alpha:0};let r=typeof n=="string"?tr:nr;for(let o of r){let t=o(n);if(t)return t}for(let o=lr.length;o<L.length;o++){let t=L[o](n);if(t)return t}return null},Cr=n=>{if(n==="transparent")return "name";let r=typeof n=="string"?rr:or;for(let[o,t]of r)if(o(n))return t;for(let[o,t]of M)if(o(n))return t};var sr=Symbol(),u=class n{_rgb;_valid;constructor(r,o){if(r===sr)this._valid=true,this._rgb=o;else if(r instanceof n)this._valid=r._valid,this._rgb=r._rgb;else {let t=er(r);this._valid=t!==null,this._rgb=t??{r:0,g:0,b:0,alpha:1};}}static _make(r){return new n(sr,r)}static _makeFromOklab({l:r,a:o,b:t,alpha:l}){let[e,s,b]=chunkBBEOVRYB_cjs.f(r,o,t);return n._make({r:chunkX5FCFNQN_cjs.b(e)*255,g:chunkX5FCFNQN_cjs.b(s)*255,b:chunkX5FCFNQN_cjs.b(b)*255,alpha:l})}isValid(){return this._valid}toRgb(){let{r,g:o,b:t,alpha:l}=this._rgb;return {r:chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.b(r),0,255),g:chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.b(o),0,255),b:chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.b(t),0,255),alpha:l}}_rawRgb(){return this._rgb}toRgbString(){let{r,g:o,b:t,alpha:l}=this._rgb,e=chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.b(r),0,255),s=chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.b(o),0,255),b=chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.b(t),0,255);return l<1?`rgba(${e}, ${s}, ${b}, ${l})`:`rgb(${e}, ${s}, ${b})`}toHex(){return chunk5Q4QJ3KC_cjs.b(this._rgb)}toNumber(){let{r,g:o,b:t}=this._rgb;return chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.b(r),0,255)<<16|chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.b(o),0,255)<<8|chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.b(t),0,255)}toHsl(r=2){let{h:o,s:t,l,alpha:e}=y(this._rgb),s=chunkEXPXWBLP_cjs.b(o,r);return {h:s>=360?0:s,s:chunkEXPXWBLP_cjs.b(t,r),l:chunkEXPXWBLP_cjs.b(l,r),alpha:e}}toHslString(r=2){let{h:o,s:t,l,alpha:e}=this.toHsl(r);return e<1?`hsla(${o}, ${t}%, ${l}%, ${e})`:`hsl(${o}, ${t}%, ${l}%)`}toOklab(){let{l:r,a:o,b:t,alpha:l}=chunkBBEOVRYB_cjs.b(this._rgb);return {l:chunkEXPXWBLP_cjs.b(r,4),a:chunkEXPXWBLP_cjs.b(o,4),b:chunkEXPXWBLP_cjs.b(t,4),alpha:l}}toOklabString(){let{l:r,a:o,b:t,alpha:l}=this.toOklab();return l<1?`oklab(${r} ${o} ${t} / ${l})`:`oklab(${r} ${o} ${t})`}toOklch(){let{l:r,c:o,h:t,alpha:l}=Q(this._rgb);return {l:chunkEXPXWBLP_cjs.b(r,4),c:chunkEXPXWBLP_cjs.b(o,4),h:chunkEXPXWBLP_cjs.b(t,2),alpha:l}}toOklchString(){let{l:r,c:o,h:t,alpha:l}=this.toOklch(),e=o===0?"none":t;return l<1?`oklch(${r} ${o} ${e} / ${l})`:`oklch(${r} ${o} ${e})`}brightness(){let{r,g:o,b:t}=this._rgb;return chunkEXPXWBLP_cjs.b((r*299+o*587+t*114)/255e3,2)}isDark(){return this.brightness()<.5}isLight(){return this.brightness()>=.5}alpha(r){return r===void 0?this._rgb.alpha:n._make({...this._rgb,alpha:chunkEXPXWBLP_cjs.b(chunkEXPXWBLP_cjs.a(r,0,1),3)})}hue(r){let{h:o,s:t,l,alpha:e}=y(this._rgb);if(r===void 0){let s=chunkEXPXWBLP_cjs.b(o,2);return s>=360?0:s}return n._make(k({h:r,s:t,l,alpha:e}))}lightness(r){let o=this.toOklch();return r===void 0?o.l:n._make(F({...o,l:chunkEXPXWBLP_cjs.a(r,0,1)}))}chroma(r){let o=this.toOklch();return r===void 0?o.c:n._make(F({...o,c:chunkEXPXWBLP_cjs.a(r,0,.4)}))}lighten(r=.1,o){let{h:t,s:l,l:e,alpha:s}=y(this._rgb),b=o?.relative?e*(1+r):e+r*100;return n._make(k({h:t,s:l,l:chunkEXPXWBLP_cjs.a(b,0,100),alpha:s}))}darken(r=.1,o){return this.lighten(-r,o)}saturate(r=.1,o){let{h:t,s:l,l:e,alpha:s}=y(this._rgb),b=o?.relative?l*(1+r):l+r*100;return n._make(k({h:t,s:chunkEXPXWBLP_cjs.a(b,0,100),l:e,alpha:s}))}desaturate(r=.1,o){return this.saturate(-r,o)}grayscale(){return this.desaturate(1)}invert(){let{r,g:o,b:t,alpha:l}=this._rgb;return n._make({r:255-r,g:255-o,b:255-t,alpha:l})}rotate(r=15){return this.hue(this.hue()+r)}isEqual(r){let o=new n(r).toRgb(),t=this.toRgb();return t.r===o.r&&t.g===o.g&&t.b===o.b&&t.alpha===o.alpha}toString(){return this.toHex()}clampSrgb(){let{r,g:o,b:t,alpha:l}=this._rgb;return r>=0&&r<=255&&o>=0&&o<=255&&t>=0&&t<=255?this:n._make({r:chunkEXPXWBLP_cjs.a(r,0,255),g:chunkEXPXWBLP_cjs.a(o,0,255),b:chunkEXPXWBLP_cjs.a(t,0,255),alpha:l})}mapSrgb(){let{r,g:o,b:t,alpha:l}=this._rgb;if(r>=0&&r<=255&&o>=0&&o<=255&&t>=0&&t<=255)return this;let[e,s,b]=chunkBBEOVRYB_cjs.a(chunkX5FCFNQN_cjs.a(r/255),chunkX5FCFNQN_cjs.a(o/255),chunkX5FCFNQN_cjs.a(t/255)),c=e>1-1e-7?1:e<1e-7?0:e,m=chunkEPG4VVQB_cjs.b({l:c,a:s,b,alpha:l});return m!==null?n._makeFromOklab(m):this}static toGamutSrgb},dr=n=>new u(n),kr=n=>{n.forEach(r=>r(u,L,M));},fr=(n,r)=>{if(r.length===0)throw new Error("nearest: candidates array must not be empty");let{l:o,a:t,b:l}=new u(n).toOklab(),e=1/0,s=r[0];for(let b of r){let{l:c,a:m,b:C}=new u(b).toOklab(),x=(c-o)**2+(m-t)**2+(C-l)**2;x<e&&(e=x,s=b);}return s},xr=()=>new u({r:Math.round(Math.random()*255),g:Math.round(Math.random()*255),b:Math.round(Math.random()*255),alpha:1});u.toGamutSrgb=n=>{let r=chunkEPG4VVQB_cjs.b(n);return r!==null?u._makeFromOklab(r):new u(n)};Object.defineProperty(exports,"inGamutSrgb",{enumerable:true,get:function(){return chunkEPG4VVQB_cjs.a}});Object.defineProperty(exports,"oklchToLinear",{enumerable:true,get:function(){return chunkEPG4VVQB_cjs.e}});Object.defineProperty(exports,"oklchToLinearAndSrgb",{enumerable:true,get:function(){return chunkEPG4VVQB_cjs.i}});Object.defineProperty(exports,"oklchToLinearAndSrgbInto",{enumerable:true,get:function(){return chunkEPG4VVQB_cjs.j}});Object.defineProperty(exports,"oklchToLinearInto",{enumerable:true,get:function(){return chunkEPG4VVQB_cjs.f}});Object.defineProperty(exports,"oklchToRgbChannels",{enumerable:true,get:function(){return chunkEPG4VVQB_cjs.g}});Object.defineProperty(exports,"oklchToRgbChannelsInto",{enumerable:true,get:function(){return chunkEPG4VVQB_cjs.h}});exports.Colordx=u;exports.colordx=dr;exports.extend=kr;exports.getFormat=Cr;exports.nearest=fr;exports.random=xr;//# sourceMappingURL=index.cjs.map | ||
| 'use strict';var chunkZ5MM7DU5_cjs=require('./chunk-Z5MM7DU5.cjs'),chunk3D3MFLZZ_cjs=require('./chunk-3D3MFLZZ.cjs'),chunk44FDTAPT_cjs=require('./chunk-44FDTAPT.cjs');require('./chunk-EDNIB75Q.cjs');var chunkX5FCFNQN_cjs=require('./chunk-X5FCFNQN.cjs'),chunk3V4MONNR_cjs=require('./chunk-3V4MONNR.cjs'),chunkYISEJCI6_cjs=require('./chunk-YISEJCI6.cjs');var V=l=>({h:chunkYISEJCI6_cjs.c(l.h),s:chunkYISEJCI6_cjs.a(l.s,0,100),l:chunkYISEJCI6_cjs.a(l.l,0,100),alpha:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(l.alpha,3),0,1)}),O={h:0,s:0,l:0,alpha:0},R=({r:l,g:r,b:o,alpha:t})=>{let n=l/255,e=r/255,s=o/255,a=Math.max(n,e,s),b=Math.min(n,e,s),C=(a+b)/2,d=0,x=0;if(a!==b){let _=a-b;switch(x=C>.5?_/(2-a-b):_/(a+b),a){case n:d=((e-s)/_+(e<s?6:0))/6;break;case e:d=((s-n)/_+2)/6;break;case s:d=((n-e)/_+4)/6;break}}let y=d*360;return O.h=y>=0&&y<360?y:(y%360+360)%360,O.s=chunkYISEJCI6_cjs.a(x*100,0,100),O.l=chunkYISEJCI6_cjs.a(C*100,0,100),O.alpha=chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(t,3),0,1),O};var N=(l,r,o)=>(o<0&&(o+=1),o>1&&(o-=1),o<1/6?l+(r-l)*6*o:o<1/2?r:o<2/3?l+(r-l)*(2/3-o)*6:l),k=({h:l,s:r,l:o,alpha:t})=>{let n=r/100,e=o/100,s=e<.5?e*(1+n):e+n-e*n,a=2*e-s,b=(l%360+360)%360/360;return {r:N(a,s,b+1/3)*255,g:N(a,s,b)*255,b:N(a,s,b-1/3)*255,alpha:t}},X=l=>{if(!chunkYISEJCI6_cjs.h(l)||!chunkYISEJCI6_cjs.i(l,["h","s","l"]))return null;let{h:r,s:o,l:t,alpha:n=1}=l;return !chunkYISEJCI6_cjs.f(r)||!chunkYISEJCI6_cjs.f(o)||!chunkYISEJCI6_cjs.f(t)||!chunkYISEJCI6_cjs.f(n)?null:k(V({h:chunkYISEJCI6_cjs.g(r),s:chunkYISEJCI6_cjs.g(o),l:chunkYISEJCI6_cjs.g(t),alpha:chunkYISEJCI6_cjs.g(n)}))},pr=new RegExp(`^hsla?\\(\\s*(?<h>${chunkYISEJCI6_cjs.k})(?<hu>deg|rad|grad|turn)?\\s*(?:,\\s*(?<s_c>${chunkYISEJCI6_cjs.j})%\\s*,\\s*(?<l_c>${chunkYISEJCI6_cjs.j})%(?:\\s*,\\s*(?<al_c>${chunkYISEJCI6_cjs.j})(?<alp_c>%?)?\\s*)?|\\s+(?<s_s>${chunkYISEJCI6_cjs.k})(?<sp_s>%?)\\s+(?<l_s>${chunkYISEJCI6_cjs.k})(?<lp_s>%?)(?:\\s*/\\s*(?<al_s>${chunkYISEJCI6_cjs.k})(?<alp_s>%?)?\\s*)?)\\)$`,"i"),J=l=>{if(typeof l!="string")return null;let r=pr.exec(l.trim())?.groups;if(!r)return null;let o=r.s_c!==void 0;if(o&&/^none$/i.test(r.h))return null;let t=r.hu?.toLowerCase()??"deg",n=chunkYISEJCI6_cjs.l(r.h)*(chunkYISEJCI6_cjs.d[t]??1),e=chunkYISEJCI6_cjs.l(r.s_c??r.s_s),s=chunkYISEJCI6_cjs.l(r.l_c??r.l_s),a=r.al_c??r.al_s,b=!!(r.alp_c??r.alp_s);if(o&&a!==void 0&&/^none$/i.test(a))return null;let C=a===void 0?1:chunkYISEJCI6_cjs.l(a)/(b?100:1);return k(V({h:n,s:e,l:s,alpha:C}))};var Q=({l,c:r,h:o,alpha:t})=>({l,a:r*Math.cos(o*Math.PI/180),b:r*Math.sin(o*Math.PI/180),alpha:t}),W=l=>{let{l:r,a:o,b:t,alpha:n}=chunk44FDTAPT_cjs.b(l),e=Math.sqrt(o*o+t*t),s=Math.atan2(t,o)*180/Math.PI;return {l:r,c:e,h:e<4e-6?0:chunkYISEJCI6_cjs.c(s),alpha:n}},A=l=>chunk44FDTAPT_cjs.d(Q(l)),Y=l=>chunk44FDTAPT_cjs.c(Q(l)),Z=l=>{if(!chunkYISEJCI6_cjs.h(l)||l.colorSpace==="lch"||!chunkYISEJCI6_cjs.i(l,["l","c","h"]))return null;let{l:r,c:o,h:t,alpha:n=1}=l;return !chunkYISEJCI6_cjs.f(r)||!chunkYISEJCI6_cjs.f(o)||!chunkYISEJCI6_cjs.f(t)||!chunkYISEJCI6_cjs.f(n)||chunkYISEJCI6_cjs.g(r)>1?null:Y({l:chunkYISEJCI6_cjs.g(r),c:Math.max(0,chunkYISEJCI6_cjs.g(o)),h:chunkYISEJCI6_cjs.c(chunkYISEJCI6_cjs.g(t)),alpha:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.g(n),0,1)})},Cr=new RegExp(`^oklch\\(\\s*(?<l>${chunkYISEJCI6_cjs.k})(?<lp>%?)\\s+(?<c>${chunkYISEJCI6_cjs.k})(?<cp>%?)\\s+(?<h>${chunkYISEJCI6_cjs.k})(?<hu>deg|rad|grad|turn)?\\s*(?:/\\s*(?<al>${chunkYISEJCI6_cjs.k})(?<alp>%?)\\s*)?\\)$`,"i"),rr=l=>{if(typeof l!="string")return null;let r=Cr.exec(l.trim())?.groups;if(!r)return null;let o=r.lp?chunkYISEJCI6_cjs.l(r.l)/100:chunkYISEJCI6_cjs.l(r.l),t=Math.max(0,r.cp?chunkYISEJCI6_cjs.l(r.c)*.004:chunkYISEJCI6_cjs.l(r.c)),n=r.hu?.toLowerCase()??"deg",e=chunkYISEJCI6_cjs.l(r.h)*(chunkYISEJCI6_cjs.d[n]??1),s=r.al===void 0?1:chunkYISEJCI6_cjs.l(r.al)/(r.alp?100:1);return Y({l:o,c:t,h:chunkYISEJCI6_cjs.c(e),alpha:chunkYISEJCI6_cjs.a(s,0,1)})};var or=[[chunkZ5MM7DU5_cjs.a,"hex"],[chunk3V4MONNR_cjs.c,"rgb"],[J,"hsl"],[rr,"oklch"],[chunk44FDTAPT_cjs.h,"oklab"]],tr=[[chunk3V4MONNR_cjs.b,"rgb"],[X,"hsl"],[chunk44FDTAPT_cjs.g,"oklab"],[Z,"oklch"]],lr=or.map(([l])=>l),nr=tr.map(([l])=>l),er=[...lr,...nr],L=[...er],F=[],sr=l=>{if(l==="transparent")return {r:0,g:0,b:0,alpha:0};let r=typeof l=="string"?lr:nr;for(let o of r){let t=o(l);if(t)return t}for(let o=er.length;o<L.length;o++){let t=L[o](l);if(t)return t}return null},dr=l=>{if(l==="transparent")return "name";let r=typeof l=="string"?or:tr;for(let[o,t]of r)if(o(l))return t;for(let[o,t]of F)if(o(l))return t};var ar=Symbol(),g=class l{_rgb;_valid;constructor(r,o){if(r===ar)this._valid=true,this._rgb=o;else if(r instanceof l)this._valid=r._valid,this._rgb=r._rgb;else {let t=sr(r);this._valid=t!==null,this._rgb=t??{r:0,g:0,b:0,alpha:1};}}static _make(r){return new l(ar,r)}static _makeFromOklab({l:r,a:o,b:t,alpha:n}){let[e,s,a]=chunk44FDTAPT_cjs.f(r,o,t);return l._make({r:chunkX5FCFNQN_cjs.b(e)*255,g:chunkX5FCFNQN_cjs.b(s)*255,b:chunkX5FCFNQN_cjs.b(a)*255,alpha:n})}isValid(){return this._valid}toRgb(){let{r,g:o,b:t,alpha:n}=this._rgb;return {r:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(r),0,255),g:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(o),0,255),b:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(t),0,255),alpha:n}}_rawRgb(){return this._rgb}toRgbString(){let{r,g:o,b:t,alpha:n}=this._rgb,e=chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(r),0,255),s=chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(o),0,255),a=chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(t),0,255);return n<1?`rgb(${e} ${s} ${a} / ${n})`:`rgb(${e} ${s} ${a})`}toHex(){return chunkZ5MM7DU5_cjs.b(this._rgb)}toNumber(){let{r,g:o,b:t}=this._rgb;return chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(r),0,255)<<16|chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(o),0,255)<<8|chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(t),0,255)}toHsl(r=2){let{h:o,s:t,l:n,alpha:e}=R(this._rgb),s=chunkYISEJCI6_cjs.b(o,r);return {h:s>=360?0:s,s:chunkYISEJCI6_cjs.b(t,r),l:chunkYISEJCI6_cjs.b(n,r),alpha:e}}toHslString(r=2){let{h:o,s:t,l:n,alpha:e}=this.toHsl(r);return e<1?`hsl(${o} ${t}% ${n}% / ${e})`:`hsl(${o} ${t}% ${n}%)`}toOklab(){let{l:r,a:o,b:t,alpha:n}=chunk44FDTAPT_cjs.b(this._rgb);return {l:chunkYISEJCI6_cjs.b(r,4),a:chunkYISEJCI6_cjs.b(o,4),b:chunkYISEJCI6_cjs.b(t,4),alpha:n}}toOklabString(){let{l:r,a:o,b:t,alpha:n}=this.toOklab();return n<1?`oklab(${r} ${o} ${t} / ${n})`:`oklab(${r} ${o} ${t})`}toOklch(){let{l:r,c:o,h:t,alpha:n}=W(this._rgb);return {l:chunkYISEJCI6_cjs.b(r,4),c:chunkYISEJCI6_cjs.b(o,4),h:chunkYISEJCI6_cjs.b(t,2),alpha:n}}toOklchString(){let{l:r,c:o,h:t,alpha:n}=this.toOklch(),e=o===0?"none":t;return n<1?`oklch(${r} ${o} ${e} / ${n})`:`oklch(${r} ${o} ${e})`}brightness(){let{r,g:o,b:t}=this._rgb;return chunkYISEJCI6_cjs.b((r*299+o*587+t*114)/255e3,2)}isDark(){return this.brightness()<.5}isLight(){return this.brightness()>=.5}alpha(r){return r===void 0?this._rgb.alpha:l._make({...this._rgb,alpha:chunkYISEJCI6_cjs.b(chunkYISEJCI6_cjs.a(r,0,1),3)})}hue(r){let{h:o,s:t,l:n,alpha:e}=R(this._rgb);if(r===void 0){let s=chunkYISEJCI6_cjs.b(o,2);return s>=360?0:s}return l._make(k({h:r,s:t,l:n,alpha:e}))}lightness(r){let o=this.toOklch();return r===void 0?o.l:l._make(A({...o,l:chunkYISEJCI6_cjs.a(r,0,1)}))}chroma(r){let o=this.toOklch();return r===void 0?o.c:l._make(A({...o,c:chunkYISEJCI6_cjs.a(r,0,.4)}))}lighten(r=.1,o){let{h:t,s:n,l:e,alpha:s}=R(this._rgb),a=o?.relative?e*(1+r):e+r*100;return l._make(k({h:t,s:n,l:chunkYISEJCI6_cjs.a(a,0,100),alpha:s}))}darken(r=.1,o){return this.lighten(-r,o)}saturate(r=.1,o){let{h:t,s:n,l:e,alpha:s}=R(this._rgb),a=o?.relative?n*(1+r):n+r*100;return l._make(k({h:t,s:chunkYISEJCI6_cjs.a(a,0,100),l:e,alpha:s}))}desaturate(r=.1,o){return this.saturate(-r,o)}grayscale(){return this.desaturate(1)}invert(){let{r,g:o,b:t,alpha:n}=this._rgb;return l._make({r:255-r,g:255-o,b:255-t,alpha:n})}rotate(r=15){return this.hue(this.hue()+r)}isEqual(r){let o=new l(r).toRgb(),t=this.toRgb();return t.r===o.r&&t.g===o.g&&t.b===o.b&&t.alpha===o.alpha}toString(){return this.toHex()}clampSrgb(){let{r,g:o,b:t,alpha:n}=this._rgb;return r>=0&&r<=255&&o>=0&&o<=255&&t>=0&&t<=255?this:l._make({r:chunkYISEJCI6_cjs.a(r,0,255),g:chunkYISEJCI6_cjs.a(o,0,255),b:chunkYISEJCI6_cjs.a(t,0,255),alpha:n})}mapSrgb(){let{r,g:o,b:t,alpha:n}=this._rgb;if(r>=0&&r<=255&&o>=0&&o<=255&&t>=0&&t<=255)return this;let[e,s,a]=chunk44FDTAPT_cjs.a(chunkX5FCFNQN_cjs.a(r/255),chunkX5FCFNQN_cjs.a(o/255),chunkX5FCFNQN_cjs.a(t/255)),b=e>1-1e-7?1:e<1e-7?0:e,C=chunk3D3MFLZZ_cjs.b({l:b,a:s,b:a,alpha:n});return C!==null?l._makeFromOklab(C):this}static toGamutSrgb},fr=l=>new g(l),kr=l=>{l.forEach(r=>r(g,L,F));},xr=(l,r)=>{if(r.length===0)throw new Error("nearest: candidates array must not be empty");let{l:o,a:t,b:n}=new g(l).toOklab(),e=1/0,s=r[0];for(let a of r){let{l:b,a:C,b:d}=new g(a).toOklab(),x=(b-o)**2+(C-t)**2+(d-n)**2;x<e&&(e=x,s=a);}return s},_r=()=>new g({r:Math.round(Math.random()*255),g:Math.round(Math.random()*255),b:Math.round(Math.random()*255),alpha:1});g.toGamutSrgb=l=>{let r=chunk3D3MFLZZ_cjs.b(l);return r!==null?g._makeFromOklab(r):new g(l)};Object.defineProperty(exports,"inGamutSrgb",{enumerable:true,get:function(){return chunk3D3MFLZZ_cjs.a}});Object.defineProperty(exports,"oklchToLinear",{enumerable:true,get:function(){return chunk3D3MFLZZ_cjs.e}});Object.defineProperty(exports,"oklchToLinearAndSrgb",{enumerable:true,get:function(){return chunk3D3MFLZZ_cjs.i}});Object.defineProperty(exports,"oklchToLinearAndSrgbInto",{enumerable:true,get:function(){return chunk3D3MFLZZ_cjs.j}});Object.defineProperty(exports,"oklchToLinearInto",{enumerable:true,get:function(){return chunk3D3MFLZZ_cjs.f}});Object.defineProperty(exports,"oklchToRgbChannels",{enumerable:true,get:function(){return chunk3D3MFLZZ_cjs.g}});Object.defineProperty(exports,"oklchToRgbChannelsInto",{enumerable:true,get:function(){return chunk3D3MFLZZ_cjs.h}});exports.Colordx=g;exports.colordx=fr;exports.extend=kr;exports.getFormat=dr;exports.nearest=xr;exports.random=_r;//# sourceMappingURL=index.cjs.map | ||
| //# sourceMappingURL=index.cjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/colorModels/hsl.ts","../src/colorModels/oklch.ts","../src/parse.ts","../src/colordx.ts"],"names":["clampHsl","hsl","normalizeHue","clamp","round","_hslBuf","rgbToHslRaw","r","g","b","alpha","rn","gn","bn","max","min","l","h","s","d","hDeg","_hueToRgb","p","q","t","hslToRgb","sn","ln","hue","parseHslObject","input","isObject","hasKeys","isAnyNumber","sanitize","N","HSL_RE","parseHslString","m","unit","ANGLE_UNITS","rawA","isPercent","oklchToOklab","c","rgbToOklch","rgb","ol","oa","ob","rgbToOklab","C","H","oklchToRgb","oklch","oklabToRgb","oklchToRgbUnclamped","oklabToRgbUnclamped","parseOklchObject","OKLCH_RE","val","v","parseOklchString","L","stringFormatParsers","parseHex","parseRgbString","parseOklabString","objectFormatParsers","parseRgbObject","parseOklabObject","builtinStringParsers","builtinObjectParsers","defaultParsers","parsers","pluginFormatParsers","parse","builtins","parser","result","i","getFormat","typed","format","_SENTINEL","Colordx","_Colordx","_direct","parsed","a","lr","lg","lb","oklabToLinear","srgbFromLinear","ri","gi","bi","rgbToHex","precision","hr","value","amount","options","newL","newS","color","other","self","lRaw","bv","linearSrgbToOklab","srgbToLinear","mapped","toGamutSrgbRaw","colordx","extend","plugins","plugin","nearest","candidates","l1","a1","b1","minDist","candidate","l2","a2","b2","dist","random"],"mappings":"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","file":"index.cjs","sourcesContent":["import { ANGLE_UNITS, clamp, hasKeys, isAnyNumber, isObject, normalizeHue, round, sanitize } from '../helpers.js';\nimport type { HslColor, RgbColor } from '../types.js';\n\nexport const clampHsl = (hsl: HslColor): HslColor => ({\n h: normalizeHue(hsl.h),\n s: clamp(hsl.s, 0, 100),\n l: clamp(hsl.l, 0, 100),\n alpha: clamp(round(hsl.alpha, 3), 0, 1),\n});\n\n// Shared write buffer for rgbToHslRaw — callers must destructure immediately, never store the reference.\nconst _hslBuf: HslColor = { h: 0, s: 0, l: 0, alpha: 0 };\n\nexport const rgbToHslRaw = ({ r, g, b, alpha }: 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 const hDeg = h * 360;\n _hslBuf.h = hDeg >= 0 && hDeg < 360 ? hDeg : ((hDeg % 360) + 360) % 360;\n _hslBuf.s = clamp(s * 100, 0, 100);\n _hslBuf.l = clamp(l * 100, 0, 100);\n _hslBuf.alpha = clamp(round(alpha, 3), 0, 1);\n return _hslBuf;\n};\n\nexport const rgbToHsl = (rgb: RgbColor): HslColor => {\n const { h, s, l, alpha } = rgbToHslRaw(rgb);\n const hr = round(h, 2);\n // round() can push a value just below 360 to 360.00 due to floating-point; clamp back to 0.\n return { h: hr >= 360 ? 0 : hr, s: round(s, 2), l: round(l, 2), alpha };\n};\n\nconst _hueToRgb = (p: number, q: number, t: number): 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\nexport const hslToRgb = ({ h, s, l, alpha }: 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) + 360) % 360) / 360;\n return {\n r: _hueToRgb(p, q, hue + 1 / 3) * 255,\n g: _hueToRgb(p, q, hue) * 255,\n b: _hueToRgb(p, q, hue - 1 / 3) * 255,\n alpha,\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, alpha = 1 } = input as { h: unknown; s: unknown; l: unknown; alpha?: unknown };\n if (!isAnyNumber(h) || !isAnyNumber(s) || !isAnyNumber(l) || !isAnyNumber(alpha)) return null;\n return hslToRgb(clampHsl({ h: sanitize(h), s: sanitize(s), l: sanitize(l), alpha: sanitize(alpha) }));\n};\n\nconst N = '[+-]?\\\\d*\\\\.?\\\\d+';\nconst HSL_RE = new RegExp(\n `^hsla?\\\\(\\\\s*(${N})(deg|rad|grad|turn)?\\\\s*(?:` +\n `,\\\\s*(${N})%\\\\s*,\\\\s*(${N})%(?:\\\\s*,\\\\s*(${N})(%?)?\\\\s*)?` +\n `|` +\n `\\\\s+(${N})(%?)\\\\s+(${N})(%?)(?:\\\\s*/\\\\s*(${N})(%?)?\\\\s*)?` +\n `)\\\\)$`,\n 'i'\n);\n\nexport const parseHslString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = HSL_RE.exec(input.trim());\n if (!m) return null;\n const unit = m[2]?.toLowerCase() ?? 'deg';\n const h = Number(m[1]) * (ANGLE_UNITS[unit] ?? 1);\n const s = Number(m[3] ?? m[7]);\n const l = Number(m[4] ?? m[9]);\n const rawA = m[5] ?? m[11];\n const isPercent = !!(m[6] ?? m[12]);\n const alpha = rawA === undefined ? 1 : Number(rawA) / (isPercent ? 100 : 1);\n return hslToRgb(clampHsl({ h, s, l, alpha }));\n};\n","import { ANGLE_UNITS, clamp, hasKeys, isAnyNumber, isObject, normalizeHue, sanitize } from '../helpers.js';\nimport type { OklabColor, OklchColor, RgbColor } from '../types.js';\nimport { oklabToRgb, oklabToRgbUnclamped, rgbToOklab } from './oklab.js';\n\nconst oklchToOklab = ({ l, c, h, alpha }: OklchColor): OklabColor => ({\n l,\n a: c * Math.cos((h * Math.PI) / 180),\n b: c * Math.sin((h * Math.PI) / 180),\n alpha,\n});\n\nexport const rgbToOklch = (rgb: RgbColor): OklchColor => {\n const { l: ol, a: oa, b: ob, alpha } = rgbToOklab(rgb);\n const C = Math.sqrt(oa * oa + ob * ob);\n const H = (Math.atan2(ob, oa) * 180) / Math.PI;\n // Achromatic threshold on OKLCH scale (0–~0.4): proportionally equivalent to LCH's 0.0015 threshold.\n return { l: ol, c: C, h: C < 0.000004 ? 0 : normalizeHue(H), alpha };\n};\n\nexport const oklchToRgb = (oklch: OklchColor): RgbColor => oklabToRgb(oklchToOklab(oklch));\nconst oklchToRgbUnclamped = (oklch: OklchColor): RgbColor => oklabToRgbUnclamped(oklchToOklab(oklch));\n\nexport const parseOklchObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n // Objects with colorSpace: 'lch' are CIE LCH, not OKLCH — let parseLchObject handle them.\n if ((input as { colorSpace?: unknown }).colorSpace === 'lch') return null;\n if (!hasKeys(input, ['l', 'c', 'h'])) return null;\n const { l, c, h, alpha = 1 } = input as { l: unknown; c: unknown; h: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(c) || !isAnyNumber(h) || !isAnyNumber(alpha)) return null;\n if (sanitize(l) > 1) return null; // OKLCH L is always [0, 1]; reject CIE LCH values passed without colorSpace branding\n return oklchToRgbUnclamped({\n l: sanitize(l),\n c: Math.max(0, sanitize(c)),\n h: normalizeHue(sanitize(h)),\n alpha: clamp(sanitize(alpha), 0, 1),\n });\n};\n\nconst OKLCH_RE =\n /^oklch\\(\\s*(none|[+-]?\\d*\\.?\\d+)(%?)\\s+(none|[+-]?\\d*\\.?\\d+)(%?)\\s+(none|[+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*(?:\\/\\s*(none|[+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nconst val = (v: string): number => (v.toLowerCase() === 'none' ? 0 : Number(v));\n\nexport const parseOklchString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = OKLCH_RE.exec(input.trim());\n if (!m) return null;\n const L = m[2] ? val(m[1]!) / 100 : val(m[1]!);\n const C = Math.max(0, m[4] ? val(m[3]!) * 0.004 : val(m[3]!)); // CSS Color 4: 100% = 0.4, so 1% = 0.004\n const unit = m[6]?.toLowerCase() ?? 'deg';\n const H = val(m[5]!) * (ANGLE_UNITS[unit] ?? 1);\n const alpha = m[7] === undefined ? 1 : val(m[7]) / (m[8] ? 100 : 1);\n return oklchToRgbUnclamped({\n l: L,\n c: C,\n h: normalizeHue(H),\n alpha: clamp(alpha, 0, 1),\n });\n};\n","import { parseHex } from './colorModels/hex.js';\nimport { parseHslObject, parseHslString } from './colorModels/hsl.js';\nimport { parseOklabObject, parseOklabString } from './colorModels/oklab.js';\nimport { parseOklchObject, parseOklchString } from './colorModels/oklch.js';\nimport { parseRgbObject, parseRgbString } from './colorModels/rgb.js';\nimport type { AnyColor, ColorFormat, ColorParser, RgbColor } from './types.js';\n\nconst stringFormatParsers: [ColorParser, ColorFormat][] = [\n [parseHex, 'hex'],\n [parseRgbString, 'rgb'],\n [parseHslString, 'hsl'],\n [parseOklchString, 'oklch'],\n [parseOklabString, 'oklab'],\n];\n\nconst objectFormatParsers: [ColorParser, ColorFormat][] = [\n [parseRgbObject, 'rgb'],\n [parseHslObject, 'hsl'],\n [parseOklabObject, 'oklab'],\n [parseOklchObject, 'oklch'],\n];\n\nconst builtinStringParsers: ColorParser[] = stringFormatParsers.map(([p]) => p);\nconst builtinObjectParsers: ColorParser[] = objectFormatParsers.map(([p]) => p);\n\nexport const defaultParsers: ColorParser[] = [...builtinStringParsers, ...builtinObjectParsers];\nexport const parsers: ColorParser[] = [...defaultParsers];\nexport const pluginFormatParsers: [ColorParser, ColorFormat][] = [];\n\nexport const parse = (input: AnyColor): RgbColor | null => {\n if (input === 'transparent') return { r: 0, g: 0, b: 0, alpha: 0 };\n const builtins = typeof input === 'string' ? builtinStringParsers : builtinObjectParsers;\n for (const parser of builtins) {\n const result = parser(input);\n if (result) return result;\n }\n for (let i = defaultParsers.length; i < parsers.length; i++) {\n const result = parsers[i]!(input);\n if (result) return result;\n }\n return null;\n};\n\nexport const getFormat = (input: AnyColor): ColorFormat | undefined => {\n if (input === 'transparent') return 'name';\n const typed = typeof input === 'string' ? stringFormatParsers : objectFormatParsers;\n for (const [parser, format] of typed) {\n if (parser(input)) return format;\n }\n for (const [parser, format] of pluginFormatParsers) {\n if (parser(input)) return format;\n }\n return undefined;\n};\n","import { rgbToHex } from './colorModels/hex.js';\nimport { hslToRgb, rgbToHslRaw } from './colorModels/hsl.js';\nimport { linearSrgbToOklab, oklabToLinear, rgbToOklab } from './colorModels/oklab.js';\nimport { oklchToRgb, rgbToOklch } from './colorModels/oklch.js';\nimport { toGamutSrgbRaw } from './gamut.js';\nimport { clamp, round } from './helpers.js';\nimport { parse, parsers, pluginFormatParsers } from './parse.js';\nimport { srgbFromLinear, srgbToLinear } from './transfer.js';\nimport type { AnyColor, ColorFormat, ColorParser, HslColor, OklabColor, OklchColor, RgbColor } from './types.js';\n\nconst _SENTINEL: unique symbol = Symbol();\n\nexport class Colordx {\n private readonly _rgb: RgbColor;\n private readonly _valid: boolean;\n\n constructor(input: AnyColor | Colordx | typeof _SENTINEL, _direct?: RgbColor) {\n if (input === _SENTINEL) {\n this._valid = true;\n this._rgb = _direct!;\n } else if (input instanceof Colordx) {\n this._valid = input._valid;\n this._rgb = input._rgb;\n } else {\n const parsed = parse(input);\n this._valid = parsed !== null;\n this._rgb = parsed ?? { r: 0, g: 0, b: 0, alpha: 1 };\n }\n }\n\n private static _make(rgb: RgbColor): Colordx {\n return new Colordx(_SENTINEL, rgb);\n }\n\n /**\n * Construct a Colordx from OKLab values, storing unclamped gamma-encoded sRGB internally.\n * Unlike new Colordx(oklabObject), this does NOT clamp channels to [0, 1] before gamma encoding,\n * so wide-gamut P3/Rec2020 colors are preserved accurately for toP3() / toRec2020() output.\n * sRGB output methods (toRgb, toHex, etc.) clamp to [0, 255] before returning.\n */\n static _makeFromOklab({ l, a, b, alpha }: OklabColor): Colordx {\n const [lr, lg, lb] = oklabToLinear(l, a, b);\n return Colordx._make({\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n });\n }\n\n isValid(): boolean {\n return this._valid;\n }\n\n toRgb(): RgbColor {\n const { r, g, b, alpha } = this._rgb;\n return { r: clamp(round(r), 0, 255), g: clamp(round(g), 0, 255), b: clamp(round(b), 0, 255), alpha };\n }\n\n /** Returns the internal unrounded RGB. Intended for plugin use where deferred rounding matters. */\n _rawRgb(): RgbColor {\n return this._rgb;\n }\n\n toRgbString(): string {\n const { r, g, b, alpha } = this._rgb;\n const ri = clamp(round(r), 0, 255),\n gi = clamp(round(g), 0, 255),\n bi = clamp(round(b), 0, 255);\n return alpha < 1 ? `rgba(${ri}, ${gi}, ${bi}, ${alpha})` : `rgb(${ri}, ${gi}, ${bi})`;\n }\n\n toHex(): string {\n return rgbToHex(this._rgb);\n }\n\n /** Returns a 24-bit RGB integer (0x000000–0xFFFFFF). Alpha is not included. */\n toNumber(): number {\n const { r, g, b } = this._rgb;\n return (clamp(round(r), 0, 255) << 16) | (clamp(round(g), 0, 255) << 8) | clamp(round(b), 0, 255);\n }\n\n toHsl(precision = 2): HslColor {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const hr = round(h, precision);\n return { h: hr >= 360 ? 0 : hr, s: round(s, precision), l: round(l, precision), alpha };\n }\n\n toHslString(precision = 2): string {\n const { h, s, l, alpha } = this.toHsl(precision);\n return alpha < 1 ? `hsla(${h}, ${s}%, ${l}%, ${alpha})` : `hsl(${h}, ${s}%, ${l}%)`;\n }\n\n toOklab(): OklabColor {\n const { l, a, b, alpha } = rgbToOklab(this._rgb);\n return { l: round(l, 4), a: round(a, 4), b: round(b, 4), alpha };\n }\n\n toOklabString(): string {\n const { l, a, b, alpha } = this.toOklab();\n return alpha < 1 ? `oklab(${l} ${a} ${b} / ${alpha})` : `oklab(${l} ${a} ${b})`;\n }\n\n toOklch(): OklchColor {\n const { l, c, h, alpha } = rgbToOklch(this._rgb);\n return { l: round(l, 4), c: round(c, 4), h: round(h, 2), alpha };\n }\n\n toOklchString(): string {\n const { l, c, h, alpha } = this.toOklch();\n const H = c === 0 ? 'none' : h;\n return alpha < 1 ? `oklch(${l} ${c} ${H} / ${alpha})` : `oklch(${l} ${c} ${H})`;\n }\n\n brightness(): number {\n const { r, g, b } = this._rgb;\n return round((r * 299 + g * 587 + b * 114) / 255000, 2);\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.alpha;\n return Colordx._make({ ...this._rgb, alpha: round(clamp(value, 0, 1), 3) });\n }\n\n hue(): number;\n hue(value: number): Colordx;\n hue(value?: number): number | Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n if (value === undefined) {\n const hr = round(h, 2);\n return hr >= 360 ? 0 : hr;\n }\n return Colordx._make(hslToRgb({ h: value, s, l, alpha }));\n }\n\n lightness(): number;\n lightness(value: number): Colordx;\n lightness(value?: number): number | Colordx {\n const oklch = this.toOklch();\n if (value === undefined) return oklch.l;\n return Colordx._make(oklchToRgb({ ...oklch, l: clamp(value, 0, 1) }));\n }\n\n chroma(): number;\n chroma(value: number): Colordx;\n chroma(value?: number): number | Colordx {\n const oklch = this.toOklch();\n if (value === undefined) return oklch.c;\n return Colordx._make(oklchToRgb({ ...oklch, c: clamp(value, 0, 0.4) }));\n }\n\n lighten(amount = 0.1, options?: { relative?: boolean }): Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const newL = options?.relative ? l * (1 + amount) : l + amount * 100;\n return Colordx._make(hslToRgb({ h, s, l: clamp(newL, 0, 100), alpha }));\n }\n\n darken(amount = 0.1, options?: { relative?: boolean }): Colordx {\n return this.lighten(-amount, options);\n }\n\n saturate(amount = 0.1, options?: { relative?: boolean }): Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const newS = options?.relative ? s * (1 + amount) : s + amount * 100;\n return Colordx._make(hslToRgb({ h, s: clamp(newS, 0, 100), l, alpha }));\n }\n\n desaturate(amount = 0.1, options?: { relative?: boolean }): Colordx {\n return this.saturate(-amount, options);\n }\n\n grayscale(): Colordx {\n return this.desaturate(1);\n }\n\n invert(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n return Colordx._make({ r: 255 - r, g: 255 - g, b: 255 - b, alpha });\n }\n\n rotate(amount = 15): Colordx {\n return this.hue(this.hue() + amount);\n }\n\n isEqual(color: AnyColor): boolean {\n const other = new Colordx(color).toRgb();\n const self = this.toRgb();\n return self.r === other.r && self.g === other.g && self.b === other.b && self.alpha === other.alpha;\n }\n\n toString(): string {\n return this.toHex();\n }\n\n /**\n * Clips this color into the sRGB gamut by clamping out-of-range channels to [0, 255].\n * Matches the naive-clip strategy browsers use when rendering out-of-gamut `oklch()` / `oklab()`.\n * Hue and lightness may shift noticeably for colors far outside sRGB.\n * Returns `this` when already in gamut.\n */\n clampSrgb(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) return this;\n return Colordx._make({\n r: clamp(r, 0, 255),\n g: clamp(g, 0, 255),\n b: clamp(b, 0, 255),\n alpha,\n });\n }\n\n /**\n * Maps this color into the sRGB gamut using the CSS Color 4 gamut mapping algorithm\n * (chroma-reduction binary search). Preserves lightness and hue; sacrifices chroma.\n * Useful when hue stability matters — design tokens, palettes, color pickers.\n * Returns `this` when already in gamut.\n */\n mapSrgb(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) return this;\n const [lRaw, a, bv] = linearSrgbToOklab(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n // The gamma-encoded round-trip drifts L by ~1e-9 at boundaries; snap so that inputs with\n // exact L=0 or L=1 hit the same white/black shortcut the static gamut map uses.\n const l = lRaw > 1 - 1e-7 ? 1 : lRaw < 1e-7 ? 0 : lRaw;\n const mapped = toGamutSrgbRaw({ l, a, b: bv, alpha });\n return mapped !== null ? Colordx._makeFromOklab(mapped) : this;\n }\n\n /**\n * Maps an out-of-sRGB-gamut color into sRGB using the CSS Color 4 gamut mapping algorithm.\n * Colors already in gamut are returned as-is. sRGB inputs (hex, rgb, hsl, etc.) are passed through.\n */\n static toGamutSrgb: (input: AnyColor) => Colordx;\n}\n\nexport type Plugin = (\n ColordxClass: typeof Colordx,\n parsers: ColorParser[],\n formatParsers: [ColorParser, ColorFormat][]\n) => void;\n\nexport const colordx = (input: AnyColor | Colordx): Colordx => new Colordx(input);\n\nexport const extend = (plugins: Plugin[]): void => {\n plugins.forEach((plugin) => plugin(Colordx, parsers, pluginFormatParsers));\n};\n\nexport const nearest = <T extends AnyColor>(color: AnyColor, candidates: T[]): T => {\n if (candidates.length === 0) throw new Error('nearest: candidates array must not be empty');\n const { l: l1, a: a1, b: b1 } = new Colordx(color).toOklab();\n let minDist = Infinity;\n let result = candidates[0] as T;\n for (const candidate of candidates) {\n const { l: l2, a: a2, b: b2 } = new Colordx(candidate).toOklab();\n const dist = (l2 - l1) ** 2 + (a2 - a1) ** 2 + (b2 - b1) ** 2;\n if (dist < minDist) {\n minDist = dist;\n result = candidate;\n }\n }\n return result;\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 alpha: 1,\n });\n\nColordx.toGamutSrgb = (input: AnyColor): Colordx => {\n const mapped = toGamutSrgbRaw(input);\n return mapped !== null ? Colordx._makeFromOklab(mapped) : new Colordx(input);\n};\n"]} | ||
| {"version":3,"sources":["../src/colorModels/hsl.ts","../src/colorModels/oklch.ts","../src/parse.ts","../src/colordx.ts"],"names":["clampHsl","hsl","normalizeHue","clamp","round","_hslBuf","rgbToHslRaw","r","g","b","alpha","rn","gn","bn","max","min","l","h","s","d","hDeg","_hueToRgb","p","q","t","hslToRgb","sn","ln","hue","parseHslObject","input","isObject","hasKeys","isAnyNumber","sanitize","HSL_RE","NUM_OR_NONE","NUM","parseHslString","isComma","unit","parseNum","ANGLE_UNITS","rawA","isPercent","oklchToOklab","c","rgbToOklch","rgb","ol","oa","ob","rgbToOklab","C","H","oklchToRgb","oklch","oklabToRgb","oklchToRgbUnclamped","oklabToRgbUnclamped","parseOklchObject","OKLCH_RE","parseOklchString","L","stringFormatParsers","parseHex","parseRgbString","parseOklabString","objectFormatParsers","parseRgbObject","parseOklabObject","builtinStringParsers","builtinObjectParsers","defaultParsers","parsers","pluginFormatParsers","parse","builtins","parser","result","i","getFormat","typed","format","_SENTINEL","Colordx","_Colordx","_direct","parsed","a","lr","lg","lb","oklabToLinear","srgbFromLinear","ri","gi","bi","rgbToHex","precision","hr","value","amount","options","newL","newS","color","other","self","lRaw","bv","linearSrgbToOklab","srgbToLinear","mapped","toGamutSrgbRaw","colordx","extend","plugins","plugin","nearest","candidates","l1","a1","b1","minDist","candidate","l2","a2","b2","dist","random"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n ANGLE_UNITS,\n NUM,\n NUM_OR_NONE,\n clamp,\n hasKeys,\n isAnyNumber,\n isObject,\n normalizeHue,\n parseNum,\n round,\n sanitize,\n} from '../helpers.js';\nimport type { HslColor, RgbColor } from '../types.js';\n\nexport const clampHsl = (hsl: HslColor): HslColor => ({\n h: normalizeHue(hsl.h),\n s: clamp(hsl.s, 0, 100),\n l: clamp(hsl.l, 0, 100),\n alpha: clamp(round(hsl.alpha, 3), 0, 1),\n});\n\n// Shared write buffer for rgbToHslRaw — callers must destructure immediately, never store the reference.\nconst _hslBuf: HslColor = { h: 0, s: 0, l: 0, alpha: 0 };\n\nexport const rgbToHslRaw = ({ r, g, b, alpha }: 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 const hDeg = h * 360;\n _hslBuf.h = hDeg >= 0 && hDeg < 360 ? hDeg : ((hDeg % 360) + 360) % 360;\n _hslBuf.s = clamp(s * 100, 0, 100);\n _hslBuf.l = clamp(l * 100, 0, 100);\n _hslBuf.alpha = clamp(round(alpha, 3), 0, 1);\n return _hslBuf;\n};\n\nexport const rgbToHsl = (rgb: RgbColor): HslColor => {\n const { h, s, l, alpha } = rgbToHslRaw(rgb);\n const hr = round(h, 2);\n // round() can push a value just below 360 to 360.00 due to floating-point; clamp back to 0.\n return { h: hr >= 360 ? 0 : hr, s: round(s, 2), l: round(l, 2), alpha };\n};\n\nconst _hueToRgb = (p: number, q: number, t: number): 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\nexport const hslToRgb = ({ h, s, l, alpha }: 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) + 360) % 360) / 360;\n return {\n r: _hueToRgb(p, q, hue + 1 / 3) * 255,\n g: _hueToRgb(p, q, hue) * 255,\n b: _hueToRgb(p, q, hue - 1 / 3) * 255,\n alpha,\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, alpha = 1 } = input as { h: unknown; s: unknown; l: unknown; alpha?: unknown };\n if (!isAnyNumber(h) || !isAnyNumber(s) || !isAnyNumber(l) || !isAnyNumber(alpha)) return null;\n return hslToRgb(clampHsl({ h: sanitize(h), s: sanitize(s), l: sanitize(l), alpha: sanitize(alpha) }));\n};\n\n// Legacy comma form requires `%` on s/l and disallows `none`. Modern space form\n// allows optional `%` and the CSS Color 4 `none` keyword on any channel.\n// Named groups: `_c` = comma/legacy branch, `_s` = space/modern branch.\nconst HSL_RE = new RegExp(\n `^hsla?\\\\(\\\\s*(?<h>${NUM_OR_NONE})(?<hu>deg|rad|grad|turn)?\\\\s*(?:` +\n `,\\\\s*(?<s_c>${NUM})%\\\\s*,\\\\s*(?<l_c>${NUM})%` +\n `(?:\\\\s*,\\\\s*(?<al_c>${NUM})(?<alp_c>%?)?\\\\s*)?` +\n `|` +\n `\\\\s+(?<s_s>${NUM_OR_NONE})(?<sp_s>%?)\\\\s+(?<l_s>${NUM_OR_NONE})(?<lp_s>%?)` +\n `(?:\\\\s*/\\\\s*(?<al_s>${NUM_OR_NONE})(?<alp_s>%?)?\\\\s*)?` +\n `)\\\\)$`,\n 'i'\n);\n\nexport const parseHslString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = HSL_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const isComma = g.s_c !== undefined;\n if (isComma && /^none$/i.test(g.h!)) return null; // legacy syntax has no `none`\n const unit = g.hu?.toLowerCase() ?? 'deg';\n const h = parseNum(g.h!) * (ANGLE_UNITS[unit] ?? 1);\n const s = parseNum((g.s_c ?? g.s_s)!);\n const l = parseNum((g.l_c ?? g.l_s)!);\n const rawA = g.al_c ?? g.al_s;\n const isPercent = !!(g.alp_c ?? g.alp_s);\n if (isComma && rawA !== undefined && /^none$/i.test(rawA)) return null;\n const alpha = rawA === undefined ? 1 : parseNum(rawA) / (isPercent ? 100 : 1);\n return hslToRgb(clampHsl({ h, s, l, alpha }));\n};\n","import {\n ANGLE_UNITS,\n NUM_OR_NONE,\n clamp,\n hasKeys,\n isAnyNumber,\n isObject,\n normalizeHue,\n parseNum,\n sanitize,\n} from '../helpers.js';\nimport type { OklabColor, OklchColor, RgbColor } from '../types.js';\nimport { oklabToRgb, oklabToRgbUnclamped, rgbToOklab } from './oklab.js';\n\nconst oklchToOklab = ({ l, c, h, alpha }: OklchColor): OklabColor => ({\n l,\n a: c * Math.cos((h * Math.PI) / 180),\n b: c * Math.sin((h * Math.PI) / 180),\n alpha,\n});\n\nexport const rgbToOklch = (rgb: RgbColor): OklchColor => {\n const { l: ol, a: oa, b: ob, alpha } = rgbToOklab(rgb);\n const C = Math.sqrt(oa * oa + ob * ob);\n const H = (Math.atan2(ob, oa) * 180) / Math.PI;\n // Achromatic threshold on OKLCH scale (0–~0.4): proportionally equivalent to LCH's 0.0015 threshold.\n return { l: ol, c: C, h: C < 0.000004 ? 0 : normalizeHue(H), alpha };\n};\n\nexport const oklchToRgb = (oklch: OklchColor): RgbColor => oklabToRgb(oklchToOklab(oklch));\nconst oklchToRgbUnclamped = (oklch: OklchColor): RgbColor => oklabToRgbUnclamped(oklchToOklab(oklch));\n\nexport const parseOklchObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n // Objects with colorSpace: 'lch' are CIE LCH, not OKLCH — let parseLchObject handle them.\n if ((input as { colorSpace?: unknown }).colorSpace === 'lch') return null;\n if (!hasKeys(input, ['l', 'c', 'h'])) return null;\n const { l, c, h, alpha = 1 } = input as { l: unknown; c: unknown; h: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(c) || !isAnyNumber(h) || !isAnyNumber(alpha)) return null;\n if (sanitize(l) > 1) return null; // OKLCH L is always [0, 1]; reject CIE LCH values passed without colorSpace branding\n return oklchToRgbUnclamped({\n l: sanitize(l),\n c: Math.max(0, sanitize(c)),\n h: normalizeHue(sanitize(h)),\n alpha: clamp(sanitize(alpha), 0, 1),\n });\n};\n\nconst OKLCH_RE = new RegExp(\n `^oklch\\\\(\\\\s*(?<l>${NUM_OR_NONE})(?<lp>%?)\\\\s+(?<c>${NUM_OR_NONE})(?<cp>%?)` +\n `\\\\s+(?<h>${NUM_OR_NONE})(?<hu>deg|rad|grad|turn)?` +\n `\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseOklchString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = OKLCH_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const L = g.lp ? parseNum(g.l!) / 100 : parseNum(g.l!); // 100% = 1\n const C = Math.max(0, g.cp ? parseNum(g.c!) * 0.004 : parseNum(g.c!)); // 100% = 0.4\n const unit = g.hu?.toLowerCase() ?? 'deg';\n const H = parseNum(g.h!) * (ANGLE_UNITS[unit] ?? 1);\n const alpha = g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1);\n return oklchToRgbUnclamped({\n l: L,\n c: C,\n h: normalizeHue(H),\n alpha: clamp(alpha, 0, 1),\n });\n};\n","import { parseHex } from './colorModels/hex.js';\nimport { parseHslObject, parseHslString } from './colorModels/hsl.js';\nimport { parseOklabObject, parseOklabString } from './colorModels/oklab.js';\nimport { parseOklchObject, parseOklchString } from './colorModels/oklch.js';\nimport { parseRgbObject, parseRgbString } from './colorModels/rgb.js';\nimport type { AnyColor, ColorFormat, ColorParser, RgbColor } from './types.js';\n\nconst stringFormatParsers: [ColorParser, ColorFormat][] = [\n [parseHex, 'hex'],\n [parseRgbString, 'rgb'],\n [parseHslString, 'hsl'],\n [parseOklchString, 'oklch'],\n [parseOklabString, 'oklab'],\n];\n\nconst objectFormatParsers: [ColorParser, ColorFormat][] = [\n [parseRgbObject, 'rgb'],\n [parseHslObject, 'hsl'],\n [parseOklabObject, 'oklab'],\n [parseOklchObject, 'oklch'],\n];\n\nconst builtinStringParsers: ColorParser[] = stringFormatParsers.map(([p]) => p);\nconst builtinObjectParsers: ColorParser[] = objectFormatParsers.map(([p]) => p);\n\nexport const defaultParsers: ColorParser[] = [...builtinStringParsers, ...builtinObjectParsers];\nexport const parsers: ColorParser[] = [...defaultParsers];\nexport const pluginFormatParsers: [ColorParser, ColorFormat][] = [];\n\nexport const parse = (input: AnyColor): RgbColor | null => {\n if (input === 'transparent') return { r: 0, g: 0, b: 0, alpha: 0 };\n const builtins = typeof input === 'string' ? builtinStringParsers : builtinObjectParsers;\n for (const parser of builtins) {\n const result = parser(input);\n if (result) return result;\n }\n for (let i = defaultParsers.length; i < parsers.length; i++) {\n const result = parsers[i]!(input);\n if (result) return result;\n }\n return null;\n};\n\nexport const getFormat = (input: AnyColor): ColorFormat | undefined => {\n if (input === 'transparent') return 'name';\n const typed = typeof input === 'string' ? stringFormatParsers : objectFormatParsers;\n for (const [parser, format] of typed) {\n if (parser(input)) return format;\n }\n for (const [parser, format] of pluginFormatParsers) {\n if (parser(input)) return format;\n }\n return undefined;\n};\n","import { rgbToHex } from './colorModels/hex.js';\nimport { hslToRgb, rgbToHslRaw } from './colorModels/hsl.js';\nimport { linearSrgbToOklab, oklabToLinear, rgbToOklab } from './colorModels/oklab.js';\nimport { oklchToRgb, rgbToOklch } from './colorModels/oklch.js';\nimport { toGamutSrgbRaw } from './gamut.js';\nimport { clamp, round } from './helpers.js';\nimport { parse, parsers, pluginFormatParsers } from './parse.js';\nimport { srgbFromLinear, srgbToLinear } from './transfer.js';\nimport type { AnyColor, ColorFormat, ColorParser, HslColor, OklabColor, OklchColor, RgbColor } from './types.js';\n\nconst _SENTINEL: unique symbol = Symbol();\n\nexport class Colordx {\n private readonly _rgb: RgbColor;\n private readonly _valid: boolean;\n\n constructor(input: AnyColor | Colordx | typeof _SENTINEL, _direct?: RgbColor) {\n if (input === _SENTINEL) {\n this._valid = true;\n this._rgb = _direct!;\n } else if (input instanceof Colordx) {\n this._valid = input._valid;\n this._rgb = input._rgb;\n } else {\n const parsed = parse(input);\n this._valid = parsed !== null;\n this._rgb = parsed ?? { r: 0, g: 0, b: 0, alpha: 1 };\n }\n }\n\n private static _make(rgb: RgbColor): Colordx {\n return new Colordx(_SENTINEL, rgb);\n }\n\n /**\n * Construct a Colordx from OKLab values, storing unclamped gamma-encoded sRGB internally.\n * Unlike new Colordx(oklabObject), this does NOT clamp channels to [0, 1] before gamma encoding,\n * so wide-gamut P3/Rec2020 colors are preserved accurately for toP3() / toRec2020() output.\n * sRGB output methods (toRgb, toHex, etc.) clamp to [0, 255] before returning.\n */\n static _makeFromOklab({ l, a, b, alpha }: OklabColor): Colordx {\n const [lr, lg, lb] = oklabToLinear(l, a, b);\n return Colordx._make({\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n });\n }\n\n isValid(): boolean {\n return this._valid;\n }\n\n toRgb(): RgbColor {\n const { r, g, b, alpha } = this._rgb;\n return { r: clamp(round(r), 0, 255), g: clamp(round(g), 0, 255), b: clamp(round(b), 0, 255), alpha };\n }\n\n /** Returns the internal unrounded RGB. Intended for plugin use where deferred rounding matters. */\n _rawRgb(): RgbColor {\n return this._rgb;\n }\n\n toRgbString(): string {\n const { r, g, b, alpha } = this._rgb;\n const ri = clamp(round(r), 0, 255),\n gi = clamp(round(g), 0, 255),\n bi = clamp(round(b), 0, 255);\n return alpha < 1 ? `rgb(${ri} ${gi} ${bi} / ${alpha})` : `rgb(${ri} ${gi} ${bi})`;\n }\n\n toHex(): string {\n return rgbToHex(this._rgb);\n }\n\n /** Returns a 24-bit RGB integer (0x000000–0xFFFFFF). Alpha is not included. */\n toNumber(): number {\n const { r, g, b } = this._rgb;\n return (clamp(round(r), 0, 255) << 16) | (clamp(round(g), 0, 255) << 8) | clamp(round(b), 0, 255);\n }\n\n toHsl(precision = 2): HslColor {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const hr = round(h, precision);\n return { h: hr >= 360 ? 0 : hr, s: round(s, precision), l: round(l, precision), alpha };\n }\n\n toHslString(precision = 2): string {\n const { h, s, l, alpha } = this.toHsl(precision);\n return alpha < 1 ? `hsl(${h} ${s}% ${l}% / ${alpha})` : `hsl(${h} ${s}% ${l}%)`;\n }\n\n toOklab(): OklabColor {\n const { l, a, b, alpha } = rgbToOklab(this._rgb);\n return { l: round(l, 4), a: round(a, 4), b: round(b, 4), alpha };\n }\n\n toOklabString(): string {\n const { l, a, b, alpha } = this.toOklab();\n return alpha < 1 ? `oklab(${l} ${a} ${b} / ${alpha})` : `oklab(${l} ${a} ${b})`;\n }\n\n toOklch(): OklchColor {\n const { l, c, h, alpha } = rgbToOklch(this._rgb);\n return { l: round(l, 4), c: round(c, 4), h: round(h, 2), alpha };\n }\n\n toOklchString(): string {\n const { l, c, h, alpha } = this.toOklch();\n const H = c === 0 ? 'none' : h;\n return alpha < 1 ? `oklch(${l} ${c} ${H} / ${alpha})` : `oklch(${l} ${c} ${H})`;\n }\n\n brightness(): number {\n const { r, g, b } = this._rgb;\n return round((r * 299 + g * 587 + b * 114) / 255000, 2);\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.alpha;\n return Colordx._make({ ...this._rgb, alpha: round(clamp(value, 0, 1), 3) });\n }\n\n hue(): number;\n hue(value: number): Colordx;\n hue(value?: number): number | Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n if (value === undefined) {\n const hr = round(h, 2);\n return hr >= 360 ? 0 : hr;\n }\n return Colordx._make(hslToRgb({ h: value, s, l, alpha }));\n }\n\n lightness(): number;\n lightness(value: number): Colordx;\n lightness(value?: number): number | Colordx {\n const oklch = this.toOklch();\n if (value === undefined) return oklch.l;\n return Colordx._make(oklchToRgb({ ...oklch, l: clamp(value, 0, 1) }));\n }\n\n chroma(): number;\n chroma(value: number): Colordx;\n chroma(value?: number): number | Colordx {\n const oklch = this.toOklch();\n if (value === undefined) return oklch.c;\n return Colordx._make(oklchToRgb({ ...oklch, c: clamp(value, 0, 0.4) }));\n }\n\n lighten(amount = 0.1, options?: { relative?: boolean }): Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const newL = options?.relative ? l * (1 + amount) : l + amount * 100;\n return Colordx._make(hslToRgb({ h, s, l: clamp(newL, 0, 100), alpha }));\n }\n\n darken(amount = 0.1, options?: { relative?: boolean }): Colordx {\n return this.lighten(-amount, options);\n }\n\n saturate(amount = 0.1, options?: { relative?: boolean }): Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const newS = options?.relative ? s * (1 + amount) : s + amount * 100;\n return Colordx._make(hslToRgb({ h, s: clamp(newS, 0, 100), l, alpha }));\n }\n\n desaturate(amount = 0.1, options?: { relative?: boolean }): Colordx {\n return this.saturate(-amount, options);\n }\n\n grayscale(): Colordx {\n return this.desaturate(1);\n }\n\n invert(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n return Colordx._make({ r: 255 - r, g: 255 - g, b: 255 - b, alpha });\n }\n\n rotate(amount = 15): Colordx {\n return this.hue(this.hue() + amount);\n }\n\n isEqual(color: AnyColor): boolean {\n const other = new Colordx(color).toRgb();\n const self = this.toRgb();\n return self.r === other.r && self.g === other.g && self.b === other.b && self.alpha === other.alpha;\n }\n\n toString(): string {\n return this.toHex();\n }\n\n /**\n * Clips this color into the sRGB gamut by clamping out-of-range channels to [0, 255].\n * Matches the naive-clip strategy browsers use when rendering out-of-gamut `oklch()` / `oklab()`.\n * Hue and lightness may shift noticeably for colors far outside sRGB.\n * Returns `this` when already in gamut.\n */\n clampSrgb(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) return this;\n return Colordx._make({\n r: clamp(r, 0, 255),\n g: clamp(g, 0, 255),\n b: clamp(b, 0, 255),\n alpha,\n });\n }\n\n /**\n * Maps this color into the sRGB gamut using the CSS Color 4 gamut mapping algorithm\n * (chroma-reduction binary search). Preserves lightness and hue; sacrifices chroma.\n * Useful when hue stability matters — design tokens, palettes, color pickers.\n * Returns `this` when already in gamut.\n */\n mapSrgb(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) return this;\n const [lRaw, a, bv] = linearSrgbToOklab(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n // The gamma-encoded round-trip drifts L by ~1e-9 at boundaries; snap so that inputs with\n // exact L=0 or L=1 hit the same white/black shortcut the static gamut map uses.\n const l = lRaw > 1 - 1e-7 ? 1 : lRaw < 1e-7 ? 0 : lRaw;\n const mapped = toGamutSrgbRaw({ l, a, b: bv, alpha });\n return mapped !== null ? Colordx._makeFromOklab(mapped) : this;\n }\n\n /**\n * Maps an out-of-sRGB-gamut color into sRGB using the CSS Color 4 gamut mapping algorithm.\n * Colors already in gamut are returned as-is. sRGB inputs (hex, rgb, hsl, etc.) are passed through.\n */\n static toGamutSrgb: (input: AnyColor) => Colordx;\n}\n\nexport type Plugin = (\n ColordxClass: typeof Colordx,\n parsers: ColorParser[],\n formatParsers: [ColorParser, ColorFormat][]\n) => void;\n\nexport const colordx = (input: AnyColor | Colordx): Colordx => new Colordx(input);\n\nexport const extend = (plugins: Plugin[]): void => {\n plugins.forEach((plugin) => plugin(Colordx, parsers, pluginFormatParsers));\n};\n\nexport const nearest = <T extends AnyColor>(color: AnyColor, candidates: T[]): T => {\n if (candidates.length === 0) throw new Error('nearest: candidates array must not be empty');\n const { l: l1, a: a1, b: b1 } = new Colordx(color).toOklab();\n let minDist = Infinity;\n let result = candidates[0] as T;\n for (const candidate of candidates) {\n const { l: l2, a: a2, b: b2 } = new Colordx(candidate).toOklab();\n const dist = (l2 - l1) ** 2 + (a2 - a1) ** 2 + (b2 - b1) ** 2;\n if (dist < minDist) {\n minDist = dist;\n result = candidate;\n }\n }\n return result;\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 alpha: 1,\n });\n\nColordx.toGamutSrgb = (input: AnyColor): Colordx => {\n const mapped = toGamutSrgbRaw(input);\n return mapped !== null ? Colordx._makeFromOklab(mapped) : new Colordx(input);\n};\n"]} |
+1
-1
@@ -1,2 +0,2 @@ | ||
| import {a,b as b$3}from'./chunk-QP4SFM6Z.mjs';import {b as b$5}from'./chunk-CW7VAOXH.mjs';export{a as inGamutSrgb,e as oklchToLinear,i as oklchToLinearAndSrgb,j as oklchToLinearAndSrgbInto,f as oklchToLinearInto,g as oklchToRgbChannels,h as oklchToRgbChannelsInto}from'./chunk-CW7VAOXH.mjs';import {h,g,c as c$2,f as f$2,b as b$4,a as a$2,d as d$1}from'./chunk-MUHBYE5R.mjs';import'./chunk-HFDTK2ZP.mjs';import {b as b$2,a as a$3}from'./chunk-FXCFKFXK.mjs';import {c,b}from'./chunk-OD65R6MQ.mjs';import {d,a as a$1,c as c$1,h as h$1,i,f as f$1,g as g$1,b as b$1}from'./chunk-JFPP44S3.mjs';var B=n=>({h:c$1(n.h),s:a$1(n.s,0,100),l:a$1(n.l,0,100),alpha:a$1(b$1(n.alpha,3),0,1)}),R={h:0,s:0,l:0,alpha:0},y=({r:n,g:r,b:o,alpha:t})=>{let l=n/255,e=r/255,s=o/255,b=Math.max(l,e,s),c=Math.min(l,e,s),m=(b+c)/2,C=0,x=0;if(b!==c){let O=b-c;switch(x=m>.5?O/(2-b-c):O/(b+c),b){case l:C=((e-s)/O+(e<s?6:0))/6;break;case e:C=((s-l)/O+2)/6;break;case s:C=((l-e)/O+4)/6;break}}let _=C*360;return R.h=_>=0&&_<360?_:(_%360+360)%360,R.s=a$1(x*100,0,100),R.l=a$1(m*100,0,100),R.alpha=a$1(b$1(t,3),0,1),R};var A=(n,r,o)=>(o<0&&(o+=1),o>1&&(o-=1),o<1/6?n+(r-n)*6*o:o<1/2?r:o<2/3?n+(r-n)*(2/3-o)*6:n),k=({h:n,s:r,l:o,alpha:t})=>{let l=r/100,e=o/100,s=e<.5?e*(1+l):e+l-e*l,b=2*e-s,c=(n%360+360)%360/360;return {r:A(b,s,c+1/3)*255,g:A(b,s,c)*255,b:A(b,s,c-1/3)*255,alpha:t}},V=n=>{if(!h$1(n)||!i(n,["h","s","l"]))return null;let{h:r,s:o,l:t,alpha:l=1}=n;return !f$1(r)||!f$1(o)||!f$1(t)||!f$1(l)?null:k(B({h:g$1(r),s:g$1(o),l:g$1(t),alpha:g$1(l)}))},p="[+-]?\\d*\\.?\\d+",mr=new RegExp(`^hsla?\\(\\s*(${p})(deg|rad|grad|turn)?\\s*(?:,\\s*(${p})%\\s*,\\s*(${p})%(?:\\s*,\\s*(${p})(%?)?\\s*)?|\\s+(${p})(%?)\\s+(${p})(%?)(?:\\s*/\\s*(${p})(%?)?\\s*)?)\\)$`,"i"),X=n=>{if(typeof n!="string")return null;let r=mr.exec(n.trim());if(!r)return null;let o=r[2]?.toLowerCase()??"deg",t=Number(r[1])*(d[o]??1),l=Number(r[3]??r[7]),e=Number(r[4]??r[9]),s=r[5]??r[11],b=!!(r[6]??r[12]),c=s===void 0?1:Number(s)/(b?100:1);return k(B({h:t,s:l,l:e,alpha:c}))};var J=({l:n,c:r,h:o,alpha:t})=>({l:n,a:r*Math.cos(o*Math.PI/180),b:r*Math.sin(o*Math.PI/180),alpha:t}),Q=n=>{let{l:r,a:o,b:t,alpha:l}=b$4(n),e=Math.sqrt(o*o+t*t),s=Math.atan2(t,o)*180/Math.PI;return {l:r,c:e,h:e<4e-6?0:c$1(s),alpha:l}},F=n=>d$1(J(n)),W=n=>c$2(J(n)),Y=n=>{if(!h$1(n)||n.colorSpace==="lch"||!i(n,["l","c","h"]))return null;let{l:r,c:o,h:t,alpha:l=1}=n;return !f$1(r)||!f$1(o)||!f$1(t)||!f$1(l)||g$1(r)>1?null:W({l:g$1(r),c:Math.max(0,g$1(o)),h:c$1(g$1(t)),alpha:a$1(g$1(l),0,1)})},pr=/^oklch\(\s*(none|[+-]?\d*\.?\d+)(%?)\s+(none|[+-]?\d*\.?\d+)(%?)\s+(none|[+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*(?:\/\s*(none|[+-]?\d*\.?\d+)(%)?\s*)?\)$/i,f=n=>n.toLowerCase()==="none"?0:Number(n),Z=n=>{if(typeof n!="string")return null;let r=pr.exec(n.trim());if(!r)return null;let o=r[2]?f(r[1])/100:f(r[1]),t=Math.max(0,r[4]?f(r[3])*.004:f(r[3])),l=r[6]?.toLowerCase()??"deg",e=f(r[5])*(d[l]??1),s=r[7]===void 0?1:f(r[7])/(r[8]?100:1);return W({l:o,c:t,h:c$1(e),alpha:a$1(s,0,1)})};var rr=[[a,"hex"],[c,"rgb"],[X,"hsl"],[Z,"oklch"],[h,"oklab"]],or=[[b,"rgb"],[V,"hsl"],[g,"oklab"],[Y,"oklch"]],tr=rr.map(([n])=>n),nr=or.map(([n])=>n),lr=[...tr,...nr],L=[...lr],M=[],er=n=>{if(n==="transparent")return {r:0,g:0,b:0,alpha:0};let r=typeof n=="string"?tr:nr;for(let o of r){let t=o(n);if(t)return t}for(let o=lr.length;o<L.length;o++){let t=L[o](n);if(t)return t}return null},Cr=n=>{if(n==="transparent")return "name";let r=typeof n=="string"?rr:or;for(let[o,t]of r)if(o(n))return t;for(let[o,t]of M)if(o(n))return t};var sr=Symbol(),u=class n{_rgb;_valid;constructor(r,o){if(r===sr)this._valid=true,this._rgb=o;else if(r instanceof n)this._valid=r._valid,this._rgb=r._rgb;else {let t=er(r);this._valid=t!==null,this._rgb=t??{r:0,g:0,b:0,alpha:1};}}static _make(r){return new n(sr,r)}static _makeFromOklab({l:r,a:o,b:t,alpha:l}){let[e,s,b]=f$2(r,o,t);return n._make({r:b$2(e)*255,g:b$2(s)*255,b:b$2(b)*255,alpha:l})}isValid(){return this._valid}toRgb(){let{r,g:o,b:t,alpha:l}=this._rgb;return {r:a$1(b$1(r),0,255),g:a$1(b$1(o),0,255),b:a$1(b$1(t),0,255),alpha:l}}_rawRgb(){return this._rgb}toRgbString(){let{r,g:o,b:t,alpha:l}=this._rgb,e=a$1(b$1(r),0,255),s=a$1(b$1(o),0,255),b=a$1(b$1(t),0,255);return l<1?`rgba(${e}, ${s}, ${b}, ${l})`:`rgb(${e}, ${s}, ${b})`}toHex(){return b$3(this._rgb)}toNumber(){let{r,g:o,b:t}=this._rgb;return a$1(b$1(r),0,255)<<16|a$1(b$1(o),0,255)<<8|a$1(b$1(t),0,255)}toHsl(r=2){let{h:o,s:t,l,alpha:e}=y(this._rgb),s=b$1(o,r);return {h:s>=360?0:s,s:b$1(t,r),l:b$1(l,r),alpha:e}}toHslString(r=2){let{h:o,s:t,l,alpha:e}=this.toHsl(r);return e<1?`hsla(${o}, ${t}%, ${l}%, ${e})`:`hsl(${o}, ${t}%, ${l}%)`}toOklab(){let{l:r,a:o,b:t,alpha:l}=b$4(this._rgb);return {l:b$1(r,4),a:b$1(o,4),b:b$1(t,4),alpha:l}}toOklabString(){let{l:r,a:o,b:t,alpha:l}=this.toOklab();return l<1?`oklab(${r} ${o} ${t} / ${l})`:`oklab(${r} ${o} ${t})`}toOklch(){let{l:r,c:o,h:t,alpha:l}=Q(this._rgb);return {l:b$1(r,4),c:b$1(o,4),h:b$1(t,2),alpha:l}}toOklchString(){let{l:r,c:o,h:t,alpha:l}=this.toOklch(),e=o===0?"none":t;return l<1?`oklch(${r} ${o} ${e} / ${l})`:`oklch(${r} ${o} ${e})`}brightness(){let{r,g:o,b:t}=this._rgb;return b$1((r*299+o*587+t*114)/255e3,2)}isDark(){return this.brightness()<.5}isLight(){return this.brightness()>=.5}alpha(r){return r===void 0?this._rgb.alpha:n._make({...this._rgb,alpha:b$1(a$1(r,0,1),3)})}hue(r){let{h:o,s:t,l,alpha:e}=y(this._rgb);if(r===void 0){let s=b$1(o,2);return s>=360?0:s}return n._make(k({h:r,s:t,l,alpha:e}))}lightness(r){let o=this.toOklch();return r===void 0?o.l:n._make(F({...o,l:a$1(r,0,1)}))}chroma(r){let o=this.toOklch();return r===void 0?o.c:n._make(F({...o,c:a$1(r,0,.4)}))}lighten(r=.1,o){let{h:t,s:l,l:e,alpha:s}=y(this._rgb),b=o?.relative?e*(1+r):e+r*100;return n._make(k({h:t,s:l,l:a$1(b,0,100),alpha:s}))}darken(r=.1,o){return this.lighten(-r,o)}saturate(r=.1,o){let{h:t,s:l,l:e,alpha:s}=y(this._rgb),b=o?.relative?l*(1+r):l+r*100;return n._make(k({h:t,s:a$1(b,0,100),l:e,alpha:s}))}desaturate(r=.1,o){return this.saturate(-r,o)}grayscale(){return this.desaturate(1)}invert(){let{r,g:o,b:t,alpha:l}=this._rgb;return n._make({r:255-r,g:255-o,b:255-t,alpha:l})}rotate(r=15){return this.hue(this.hue()+r)}isEqual(r){let o=new n(r).toRgb(),t=this.toRgb();return t.r===o.r&&t.g===o.g&&t.b===o.b&&t.alpha===o.alpha}toString(){return this.toHex()}clampSrgb(){let{r,g:o,b:t,alpha:l}=this._rgb;return r>=0&&r<=255&&o>=0&&o<=255&&t>=0&&t<=255?this:n._make({r:a$1(r,0,255),g:a$1(o,0,255),b:a$1(t,0,255),alpha:l})}mapSrgb(){let{r,g:o,b:t,alpha:l}=this._rgb;if(r>=0&&r<=255&&o>=0&&o<=255&&t>=0&&t<=255)return this;let[e,s,b]=a$2(a$3(r/255),a$3(o/255),a$3(t/255)),c=e>1-1e-7?1:e<1e-7?0:e,m=b$5({l:c,a:s,b,alpha:l});return m!==null?n._makeFromOklab(m):this}static toGamutSrgb},dr=n=>new u(n),kr=n=>{n.forEach(r=>r(u,L,M));},fr=(n,r)=>{if(r.length===0)throw new Error("nearest: candidates array must not be empty");let{l:o,a:t,b:l}=new u(n).toOklab(),e=1/0,s=r[0];for(let b of r){let{l:c,a:m,b:C}=new u(b).toOklab(),x=(c-o)**2+(m-t)**2+(C-l)**2;x<e&&(e=x,s=b);}return s},xr=()=>new u({r:Math.round(Math.random()*255),g:Math.round(Math.random()*255),b:Math.round(Math.random()*255),alpha:1});u.toGamutSrgb=n=>{let r=b$5(n);return r!==null?u._makeFromOklab(r):new u(n)};export{u as Colordx,dr as colordx,kr as extend,Cr as getFormat,fr as nearest,xr as random};//# sourceMappingURL=index.mjs.map | ||
| import {a,b as b$3}from'./chunk-4JCO6H3F.mjs';import {b as b$5}from'./chunk-AOK3BIZI.mjs';export{a as inGamutSrgb,e as oklchToLinear,i as oklchToLinearAndSrgb,j as oklchToLinearAndSrgbInto,f as oklchToLinearInto,g as oklchToRgbChannels,h as oklchToRgbChannelsInto}from'./chunk-AOK3BIZI.mjs';import {h,g as g$1,c as c$2,f as f$1,b as b$4,a as a$2,d as d$1}from'./chunk-OS5JUSWI.mjs';import'./chunk-OXYX6VNO.mjs';import {b as b$2,a as a$3}from'./chunk-FXCFKFXK.mjs';import {c,b}from'./chunk-Q3O3QQ4H.mjs';import {l,d,a as a$1,c as c$1,h as h$1,i,f,g as g$2,k as k$1,j,b as b$1}from'./chunk-IOXRZECH.mjs';var V=l=>({h:c$1(l.h),s:a$1(l.s,0,100),l:a$1(l.l,0,100),alpha:a$1(b$1(l.alpha,3),0,1)}),O={h:0,s:0,l:0,alpha:0},R=({r:l,g:r,b:o,alpha:t})=>{let n=l/255,e=r/255,s=o/255,a=Math.max(n,e,s),b=Math.min(n,e,s),C=(a+b)/2,d=0,x=0;if(a!==b){let _=a-b;switch(x=C>.5?_/(2-a-b):_/(a+b),a){case n:d=((e-s)/_+(e<s?6:0))/6;break;case e:d=((s-n)/_+2)/6;break;case s:d=((n-e)/_+4)/6;break}}let y=d*360;return O.h=y>=0&&y<360?y:(y%360+360)%360,O.s=a$1(x*100,0,100),O.l=a$1(C*100,0,100),O.alpha=a$1(b$1(t,3),0,1),O};var N=(l,r,o)=>(o<0&&(o+=1),o>1&&(o-=1),o<1/6?l+(r-l)*6*o:o<1/2?r:o<2/3?l+(r-l)*(2/3-o)*6:l),k=({h:l,s:r,l:o,alpha:t})=>{let n=r/100,e=o/100,s=e<.5?e*(1+n):e+n-e*n,a=2*e-s,b=(l%360+360)%360/360;return {r:N(a,s,b+1/3)*255,g:N(a,s,b)*255,b:N(a,s,b-1/3)*255,alpha:t}},X=l=>{if(!h$1(l)||!i(l,["h","s","l"]))return null;let{h:r,s:o,l:t,alpha:n=1}=l;return !f(r)||!f(o)||!f(t)||!f(n)?null:k(V({h:g$2(r),s:g$2(o),l:g$2(t),alpha:g$2(n)}))},pr=new RegExp(`^hsla?\\(\\s*(?<h>${k$1})(?<hu>deg|rad|grad|turn)?\\s*(?:,\\s*(?<s_c>${j})%\\s*,\\s*(?<l_c>${j})%(?:\\s*,\\s*(?<al_c>${j})(?<alp_c>%?)?\\s*)?|\\s+(?<s_s>${k$1})(?<sp_s>%?)\\s+(?<l_s>${k$1})(?<lp_s>%?)(?:\\s*/\\s*(?<al_s>${k$1})(?<alp_s>%?)?\\s*)?)\\)$`,"i"),J=l$1=>{if(typeof l$1!="string")return null;let r=pr.exec(l$1.trim())?.groups;if(!r)return null;let o=r.s_c!==void 0;if(o&&/^none$/i.test(r.h))return null;let t=r.hu?.toLowerCase()??"deg",n=l(r.h)*(d[t]??1),e=l(r.s_c??r.s_s),s=l(r.l_c??r.l_s),a=r.al_c??r.al_s,b=!!(r.alp_c??r.alp_s);if(o&&a!==void 0&&/^none$/i.test(a))return null;let C=a===void 0?1:l(a)/(b?100:1);return k(V({h:n,s:e,l:s,alpha:C}))};var Q=({l,c:r,h:o,alpha:t})=>({l,a:r*Math.cos(o*Math.PI/180),b:r*Math.sin(o*Math.PI/180),alpha:t}),W=l=>{let{l:r,a:o,b:t,alpha:n}=b$4(l),e=Math.sqrt(o*o+t*t),s=Math.atan2(t,o)*180/Math.PI;return {l:r,c:e,h:e<4e-6?0:c$1(s),alpha:n}},A=l=>d$1(Q(l)),Y=l=>c$2(Q(l)),Z=l=>{if(!h$1(l)||l.colorSpace==="lch"||!i(l,["l","c","h"]))return null;let{l:r,c:o,h:t,alpha:n=1}=l;return !f(r)||!f(o)||!f(t)||!f(n)||g$2(r)>1?null:Y({l:g$2(r),c:Math.max(0,g$2(o)),h:c$1(g$2(t)),alpha:a$1(g$2(n),0,1)})},Cr=new RegExp(`^oklch\\(\\s*(?<l>${k$1})(?<lp>%?)\\s+(?<c>${k$1})(?<cp>%?)\\s+(?<h>${k$1})(?<hu>deg|rad|grad|turn)?\\s*(?:/\\s*(?<al>${k$1})(?<alp>%?)\\s*)?\\)$`,"i"),rr=l$1=>{if(typeof l$1!="string")return null;let r=Cr.exec(l$1.trim())?.groups;if(!r)return null;let o=r.lp?l(r.l)/100:l(r.l),t=Math.max(0,r.cp?l(r.c)*.004:l(r.c)),n=r.hu?.toLowerCase()??"deg",e=l(r.h)*(d[n]??1),s=r.al===void 0?1:l(r.al)/(r.alp?100:1);return Y({l:o,c:t,h:c$1(e),alpha:a$1(s,0,1)})};var or=[[a,"hex"],[c,"rgb"],[J,"hsl"],[rr,"oklch"],[h,"oklab"]],tr=[[b,"rgb"],[X,"hsl"],[g$1,"oklab"],[Z,"oklch"]],lr=or.map(([l])=>l),nr=tr.map(([l])=>l),er=[...lr,...nr],L=[...er],F=[],sr=l=>{if(l==="transparent")return {r:0,g:0,b:0,alpha:0};let r=typeof l=="string"?lr:nr;for(let o of r){let t=o(l);if(t)return t}for(let o=er.length;o<L.length;o++){let t=L[o](l);if(t)return t}return null},dr=l=>{if(l==="transparent")return "name";let r=typeof l=="string"?or:tr;for(let[o,t]of r)if(o(l))return t;for(let[o,t]of F)if(o(l))return t};var ar=Symbol(),g=class l{_rgb;_valid;constructor(r,o){if(r===ar)this._valid=true,this._rgb=o;else if(r instanceof l)this._valid=r._valid,this._rgb=r._rgb;else {let t=sr(r);this._valid=t!==null,this._rgb=t??{r:0,g:0,b:0,alpha:1};}}static _make(r){return new l(ar,r)}static _makeFromOklab({l:r,a:o,b:t,alpha:n}){let[e,s,a]=f$1(r,o,t);return l._make({r:b$2(e)*255,g:b$2(s)*255,b:b$2(a)*255,alpha:n})}isValid(){return this._valid}toRgb(){let{r,g:o,b:t,alpha:n}=this._rgb;return {r:a$1(b$1(r),0,255),g:a$1(b$1(o),0,255),b:a$1(b$1(t),0,255),alpha:n}}_rawRgb(){return this._rgb}toRgbString(){let{r,g:o,b:t,alpha:n}=this._rgb,e=a$1(b$1(r),0,255),s=a$1(b$1(o),0,255),a=a$1(b$1(t),0,255);return n<1?`rgb(${e} ${s} ${a} / ${n})`:`rgb(${e} ${s} ${a})`}toHex(){return b$3(this._rgb)}toNumber(){let{r,g:o,b:t}=this._rgb;return a$1(b$1(r),0,255)<<16|a$1(b$1(o),0,255)<<8|a$1(b$1(t),0,255)}toHsl(r=2){let{h:o,s:t,l:n,alpha:e}=R(this._rgb),s=b$1(o,r);return {h:s>=360?0:s,s:b$1(t,r),l:b$1(n,r),alpha:e}}toHslString(r=2){let{h:o,s:t,l:n,alpha:e}=this.toHsl(r);return e<1?`hsl(${o} ${t}% ${n}% / ${e})`:`hsl(${o} ${t}% ${n}%)`}toOklab(){let{l:r,a:o,b:t,alpha:n}=b$4(this._rgb);return {l:b$1(r,4),a:b$1(o,4),b:b$1(t,4),alpha:n}}toOklabString(){let{l:r,a:o,b:t,alpha:n}=this.toOklab();return n<1?`oklab(${r} ${o} ${t} / ${n})`:`oklab(${r} ${o} ${t})`}toOklch(){let{l:r,c:o,h:t,alpha:n}=W(this._rgb);return {l:b$1(r,4),c:b$1(o,4),h:b$1(t,2),alpha:n}}toOklchString(){let{l:r,c:o,h:t,alpha:n}=this.toOklch(),e=o===0?"none":t;return n<1?`oklch(${r} ${o} ${e} / ${n})`:`oklch(${r} ${o} ${e})`}brightness(){let{r,g:o,b:t}=this._rgb;return b$1((r*299+o*587+t*114)/255e3,2)}isDark(){return this.brightness()<.5}isLight(){return this.brightness()>=.5}alpha(r){return r===void 0?this._rgb.alpha:l._make({...this._rgb,alpha:b$1(a$1(r,0,1),3)})}hue(r){let{h:o,s:t,l:n,alpha:e}=R(this._rgb);if(r===void 0){let s=b$1(o,2);return s>=360?0:s}return l._make(k({h:r,s:t,l:n,alpha:e}))}lightness(r){let o=this.toOklch();return r===void 0?o.l:l._make(A({...o,l:a$1(r,0,1)}))}chroma(r){let o=this.toOklch();return r===void 0?o.c:l._make(A({...o,c:a$1(r,0,.4)}))}lighten(r=.1,o){let{h:t,s:n,l:e,alpha:s}=R(this._rgb),a=o?.relative?e*(1+r):e+r*100;return l._make(k({h:t,s:n,l:a$1(a,0,100),alpha:s}))}darken(r=.1,o){return this.lighten(-r,o)}saturate(r=.1,o){let{h:t,s:n,l:e,alpha:s}=R(this._rgb),a=o?.relative?n*(1+r):n+r*100;return l._make(k({h:t,s:a$1(a,0,100),l:e,alpha:s}))}desaturate(r=.1,o){return this.saturate(-r,o)}grayscale(){return this.desaturate(1)}invert(){let{r,g:o,b:t,alpha:n}=this._rgb;return l._make({r:255-r,g:255-o,b:255-t,alpha:n})}rotate(r=15){return this.hue(this.hue()+r)}isEqual(r){let o=new l(r).toRgb(),t=this.toRgb();return t.r===o.r&&t.g===o.g&&t.b===o.b&&t.alpha===o.alpha}toString(){return this.toHex()}clampSrgb(){let{r,g:o,b:t,alpha:n}=this._rgb;return r>=0&&r<=255&&o>=0&&o<=255&&t>=0&&t<=255?this:l._make({r:a$1(r,0,255),g:a$1(o,0,255),b:a$1(t,0,255),alpha:n})}mapSrgb(){let{r,g:o,b:t,alpha:n}=this._rgb;if(r>=0&&r<=255&&o>=0&&o<=255&&t>=0&&t<=255)return this;let[e,s,a]=a$2(a$3(r/255),a$3(o/255),a$3(t/255)),b=e>1-1e-7?1:e<1e-7?0:e,C=b$5({l:b,a:s,b:a,alpha:n});return C!==null?l._makeFromOklab(C):this}static toGamutSrgb},fr=l=>new g(l),kr=l=>{l.forEach(r=>r(g,L,F));},xr=(l,r)=>{if(r.length===0)throw new Error("nearest: candidates array must not be empty");let{l:o,a:t,b:n}=new g(l).toOklab(),e=1/0,s=r[0];for(let a of r){let{l:b,a:C,b:d}=new g(a).toOklab(),x=(b-o)**2+(C-t)**2+(d-n)**2;x<e&&(e=x,s=a);}return s},_r=()=>new g({r:Math.round(Math.random()*255),g:Math.round(Math.random()*255),b:Math.round(Math.random()*255),alpha:1});g.toGamutSrgb=l=>{let r=b$5(l);return r!==null?g._makeFromOklab(r):new g(l)};export{g as Colordx,fr as colordx,kr as extend,dr as getFormat,xr as nearest,_r as random};//# sourceMappingURL=index.mjs.map | ||
| //# sourceMappingURL=index.mjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/colorModels/hsl.ts","../src/colorModels/oklch.ts","../src/parse.ts","../src/colordx.ts"],"names":["clampHsl","hsl","normalizeHue","clamp","round","_hslBuf","rgbToHslRaw","r","g","b","alpha","rn","gn","bn","max","min","l","h","s","d","hDeg","_hueToRgb","p","q","t","hslToRgb","sn","ln","hue","parseHslObject","input","isObject","hasKeys","isAnyNumber","sanitize","N","HSL_RE","parseHslString","m","unit","ANGLE_UNITS","rawA","isPercent","oklchToOklab","c","rgbToOklch","rgb","ol","oa","ob","rgbToOklab","C","H","oklchToRgb","oklch","oklabToRgb","oklchToRgbUnclamped","oklabToRgbUnclamped","parseOklchObject","OKLCH_RE","val","v","parseOklchString","L","stringFormatParsers","parseHex","parseRgbString","parseOklabString","objectFormatParsers","parseRgbObject","parseOklabObject","builtinStringParsers","builtinObjectParsers","defaultParsers","parsers","pluginFormatParsers","parse","builtins","parser","result","i","getFormat","typed","format","_SENTINEL","Colordx","_Colordx","_direct","parsed","a","lr","lg","lb","oklabToLinear","srgbFromLinear","ri","gi","bi","rgbToHex","precision","hr","value","amount","options","newL","newS","color","other","self","lRaw","bv","linearSrgbToOklab","srgbToLinear","mapped","toGamutSrgbRaw","colordx","extend","plugins","plugin","nearest","candidates","l1","a1","b1","minDist","candidate","l2","a2","b2","dist","random"],"mappings":"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","file":"index.mjs","sourcesContent":["import { ANGLE_UNITS, clamp, hasKeys, isAnyNumber, isObject, normalizeHue, round, sanitize } from '../helpers.js';\nimport type { HslColor, RgbColor } from '../types.js';\n\nexport const clampHsl = (hsl: HslColor): HslColor => ({\n h: normalizeHue(hsl.h),\n s: clamp(hsl.s, 0, 100),\n l: clamp(hsl.l, 0, 100),\n alpha: clamp(round(hsl.alpha, 3), 0, 1),\n});\n\n// Shared write buffer for rgbToHslRaw — callers must destructure immediately, never store the reference.\nconst _hslBuf: HslColor = { h: 0, s: 0, l: 0, alpha: 0 };\n\nexport const rgbToHslRaw = ({ r, g, b, alpha }: 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 const hDeg = h * 360;\n _hslBuf.h = hDeg >= 0 && hDeg < 360 ? hDeg : ((hDeg % 360) + 360) % 360;\n _hslBuf.s = clamp(s * 100, 0, 100);\n _hslBuf.l = clamp(l * 100, 0, 100);\n _hslBuf.alpha = clamp(round(alpha, 3), 0, 1);\n return _hslBuf;\n};\n\nexport const rgbToHsl = (rgb: RgbColor): HslColor => {\n const { h, s, l, alpha } = rgbToHslRaw(rgb);\n const hr = round(h, 2);\n // round() can push a value just below 360 to 360.00 due to floating-point; clamp back to 0.\n return { h: hr >= 360 ? 0 : hr, s: round(s, 2), l: round(l, 2), alpha };\n};\n\nconst _hueToRgb = (p: number, q: number, t: number): 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\nexport const hslToRgb = ({ h, s, l, alpha }: 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) + 360) % 360) / 360;\n return {\n r: _hueToRgb(p, q, hue + 1 / 3) * 255,\n g: _hueToRgb(p, q, hue) * 255,\n b: _hueToRgb(p, q, hue - 1 / 3) * 255,\n alpha,\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, alpha = 1 } = input as { h: unknown; s: unknown; l: unknown; alpha?: unknown };\n if (!isAnyNumber(h) || !isAnyNumber(s) || !isAnyNumber(l) || !isAnyNumber(alpha)) return null;\n return hslToRgb(clampHsl({ h: sanitize(h), s: sanitize(s), l: sanitize(l), alpha: sanitize(alpha) }));\n};\n\nconst N = '[+-]?\\\\d*\\\\.?\\\\d+';\nconst HSL_RE = new RegExp(\n `^hsla?\\\\(\\\\s*(${N})(deg|rad|grad|turn)?\\\\s*(?:` +\n `,\\\\s*(${N})%\\\\s*,\\\\s*(${N})%(?:\\\\s*,\\\\s*(${N})(%?)?\\\\s*)?` +\n `|` +\n `\\\\s+(${N})(%?)\\\\s+(${N})(%?)(?:\\\\s*/\\\\s*(${N})(%?)?\\\\s*)?` +\n `)\\\\)$`,\n 'i'\n);\n\nexport const parseHslString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = HSL_RE.exec(input.trim());\n if (!m) return null;\n const unit = m[2]?.toLowerCase() ?? 'deg';\n const h = Number(m[1]) * (ANGLE_UNITS[unit] ?? 1);\n const s = Number(m[3] ?? m[7]);\n const l = Number(m[4] ?? m[9]);\n const rawA = m[5] ?? m[11];\n const isPercent = !!(m[6] ?? m[12]);\n const alpha = rawA === undefined ? 1 : Number(rawA) / (isPercent ? 100 : 1);\n return hslToRgb(clampHsl({ h, s, l, alpha }));\n};\n","import { ANGLE_UNITS, clamp, hasKeys, isAnyNumber, isObject, normalizeHue, sanitize } from '../helpers.js';\nimport type { OklabColor, OklchColor, RgbColor } from '../types.js';\nimport { oklabToRgb, oklabToRgbUnclamped, rgbToOklab } from './oklab.js';\n\nconst oklchToOklab = ({ l, c, h, alpha }: OklchColor): OklabColor => ({\n l,\n a: c * Math.cos((h * Math.PI) / 180),\n b: c * Math.sin((h * Math.PI) / 180),\n alpha,\n});\n\nexport const rgbToOklch = (rgb: RgbColor): OklchColor => {\n const { l: ol, a: oa, b: ob, alpha } = rgbToOklab(rgb);\n const C = Math.sqrt(oa * oa + ob * ob);\n const H = (Math.atan2(ob, oa) * 180) / Math.PI;\n // Achromatic threshold on OKLCH scale (0–~0.4): proportionally equivalent to LCH's 0.0015 threshold.\n return { l: ol, c: C, h: C < 0.000004 ? 0 : normalizeHue(H), alpha };\n};\n\nexport const oklchToRgb = (oklch: OklchColor): RgbColor => oklabToRgb(oklchToOklab(oklch));\nconst oklchToRgbUnclamped = (oklch: OklchColor): RgbColor => oklabToRgbUnclamped(oklchToOklab(oklch));\n\nexport const parseOklchObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n // Objects with colorSpace: 'lch' are CIE LCH, not OKLCH — let parseLchObject handle them.\n if ((input as { colorSpace?: unknown }).colorSpace === 'lch') return null;\n if (!hasKeys(input, ['l', 'c', 'h'])) return null;\n const { l, c, h, alpha = 1 } = input as { l: unknown; c: unknown; h: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(c) || !isAnyNumber(h) || !isAnyNumber(alpha)) return null;\n if (sanitize(l) > 1) return null; // OKLCH L is always [0, 1]; reject CIE LCH values passed without colorSpace branding\n return oklchToRgbUnclamped({\n l: sanitize(l),\n c: Math.max(0, sanitize(c)),\n h: normalizeHue(sanitize(h)),\n alpha: clamp(sanitize(alpha), 0, 1),\n });\n};\n\nconst OKLCH_RE =\n /^oklch\\(\\s*(none|[+-]?\\d*\\.?\\d+)(%?)\\s+(none|[+-]?\\d*\\.?\\d+)(%?)\\s+(none|[+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*(?:\\/\\s*(none|[+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nconst val = (v: string): number => (v.toLowerCase() === 'none' ? 0 : Number(v));\n\nexport const parseOklchString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = OKLCH_RE.exec(input.trim());\n if (!m) return null;\n const L = m[2] ? val(m[1]!) / 100 : val(m[1]!);\n const C = Math.max(0, m[4] ? val(m[3]!) * 0.004 : val(m[3]!)); // CSS Color 4: 100% = 0.4, so 1% = 0.004\n const unit = m[6]?.toLowerCase() ?? 'deg';\n const H = val(m[5]!) * (ANGLE_UNITS[unit] ?? 1);\n const alpha = m[7] === undefined ? 1 : val(m[7]) / (m[8] ? 100 : 1);\n return oklchToRgbUnclamped({\n l: L,\n c: C,\n h: normalizeHue(H),\n alpha: clamp(alpha, 0, 1),\n });\n};\n","import { parseHex } from './colorModels/hex.js';\nimport { parseHslObject, parseHslString } from './colorModels/hsl.js';\nimport { parseOklabObject, parseOklabString } from './colorModels/oklab.js';\nimport { parseOklchObject, parseOklchString } from './colorModels/oklch.js';\nimport { parseRgbObject, parseRgbString } from './colorModels/rgb.js';\nimport type { AnyColor, ColorFormat, ColorParser, RgbColor } from './types.js';\n\nconst stringFormatParsers: [ColorParser, ColorFormat][] = [\n [parseHex, 'hex'],\n [parseRgbString, 'rgb'],\n [parseHslString, 'hsl'],\n [parseOklchString, 'oklch'],\n [parseOklabString, 'oklab'],\n];\n\nconst objectFormatParsers: [ColorParser, ColorFormat][] = [\n [parseRgbObject, 'rgb'],\n [parseHslObject, 'hsl'],\n [parseOklabObject, 'oklab'],\n [parseOklchObject, 'oklch'],\n];\n\nconst builtinStringParsers: ColorParser[] = stringFormatParsers.map(([p]) => p);\nconst builtinObjectParsers: ColorParser[] = objectFormatParsers.map(([p]) => p);\n\nexport const defaultParsers: ColorParser[] = [...builtinStringParsers, ...builtinObjectParsers];\nexport const parsers: ColorParser[] = [...defaultParsers];\nexport const pluginFormatParsers: [ColorParser, ColorFormat][] = [];\n\nexport const parse = (input: AnyColor): RgbColor | null => {\n if (input === 'transparent') return { r: 0, g: 0, b: 0, alpha: 0 };\n const builtins = typeof input === 'string' ? builtinStringParsers : builtinObjectParsers;\n for (const parser of builtins) {\n const result = parser(input);\n if (result) return result;\n }\n for (let i = defaultParsers.length; i < parsers.length; i++) {\n const result = parsers[i]!(input);\n if (result) return result;\n }\n return null;\n};\n\nexport const getFormat = (input: AnyColor): ColorFormat | undefined => {\n if (input === 'transparent') return 'name';\n const typed = typeof input === 'string' ? stringFormatParsers : objectFormatParsers;\n for (const [parser, format] of typed) {\n if (parser(input)) return format;\n }\n for (const [parser, format] of pluginFormatParsers) {\n if (parser(input)) return format;\n }\n return undefined;\n};\n","import { rgbToHex } from './colorModels/hex.js';\nimport { hslToRgb, rgbToHslRaw } from './colorModels/hsl.js';\nimport { linearSrgbToOklab, oklabToLinear, rgbToOklab } from './colorModels/oklab.js';\nimport { oklchToRgb, rgbToOklch } from './colorModels/oklch.js';\nimport { toGamutSrgbRaw } from './gamut.js';\nimport { clamp, round } from './helpers.js';\nimport { parse, parsers, pluginFormatParsers } from './parse.js';\nimport { srgbFromLinear, srgbToLinear } from './transfer.js';\nimport type { AnyColor, ColorFormat, ColorParser, HslColor, OklabColor, OklchColor, RgbColor } from './types.js';\n\nconst _SENTINEL: unique symbol = Symbol();\n\nexport class Colordx {\n private readonly _rgb: RgbColor;\n private readonly _valid: boolean;\n\n constructor(input: AnyColor | Colordx | typeof _SENTINEL, _direct?: RgbColor) {\n if (input === _SENTINEL) {\n this._valid = true;\n this._rgb = _direct!;\n } else if (input instanceof Colordx) {\n this._valid = input._valid;\n this._rgb = input._rgb;\n } else {\n const parsed = parse(input);\n this._valid = parsed !== null;\n this._rgb = parsed ?? { r: 0, g: 0, b: 0, alpha: 1 };\n }\n }\n\n private static _make(rgb: RgbColor): Colordx {\n return new Colordx(_SENTINEL, rgb);\n }\n\n /**\n * Construct a Colordx from OKLab values, storing unclamped gamma-encoded sRGB internally.\n * Unlike new Colordx(oklabObject), this does NOT clamp channels to [0, 1] before gamma encoding,\n * so wide-gamut P3/Rec2020 colors are preserved accurately for toP3() / toRec2020() output.\n * sRGB output methods (toRgb, toHex, etc.) clamp to [0, 255] before returning.\n */\n static _makeFromOklab({ l, a, b, alpha }: OklabColor): Colordx {\n const [lr, lg, lb] = oklabToLinear(l, a, b);\n return Colordx._make({\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n });\n }\n\n isValid(): boolean {\n return this._valid;\n }\n\n toRgb(): RgbColor {\n const { r, g, b, alpha } = this._rgb;\n return { r: clamp(round(r), 0, 255), g: clamp(round(g), 0, 255), b: clamp(round(b), 0, 255), alpha };\n }\n\n /** Returns the internal unrounded RGB. Intended for plugin use where deferred rounding matters. */\n _rawRgb(): RgbColor {\n return this._rgb;\n }\n\n toRgbString(): string {\n const { r, g, b, alpha } = this._rgb;\n const ri = clamp(round(r), 0, 255),\n gi = clamp(round(g), 0, 255),\n bi = clamp(round(b), 0, 255);\n return alpha < 1 ? `rgba(${ri}, ${gi}, ${bi}, ${alpha})` : `rgb(${ri}, ${gi}, ${bi})`;\n }\n\n toHex(): string {\n return rgbToHex(this._rgb);\n }\n\n /** Returns a 24-bit RGB integer (0x000000–0xFFFFFF). Alpha is not included. */\n toNumber(): number {\n const { r, g, b } = this._rgb;\n return (clamp(round(r), 0, 255) << 16) | (clamp(round(g), 0, 255) << 8) | clamp(round(b), 0, 255);\n }\n\n toHsl(precision = 2): HslColor {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const hr = round(h, precision);\n return { h: hr >= 360 ? 0 : hr, s: round(s, precision), l: round(l, precision), alpha };\n }\n\n toHslString(precision = 2): string {\n const { h, s, l, alpha } = this.toHsl(precision);\n return alpha < 1 ? `hsla(${h}, ${s}%, ${l}%, ${alpha})` : `hsl(${h}, ${s}%, ${l}%)`;\n }\n\n toOklab(): OklabColor {\n const { l, a, b, alpha } = rgbToOklab(this._rgb);\n return { l: round(l, 4), a: round(a, 4), b: round(b, 4), alpha };\n }\n\n toOklabString(): string {\n const { l, a, b, alpha } = this.toOklab();\n return alpha < 1 ? `oklab(${l} ${a} ${b} / ${alpha})` : `oklab(${l} ${a} ${b})`;\n }\n\n toOklch(): OklchColor {\n const { l, c, h, alpha } = rgbToOklch(this._rgb);\n return { l: round(l, 4), c: round(c, 4), h: round(h, 2), alpha };\n }\n\n toOklchString(): string {\n const { l, c, h, alpha } = this.toOklch();\n const H = c === 0 ? 'none' : h;\n return alpha < 1 ? `oklch(${l} ${c} ${H} / ${alpha})` : `oklch(${l} ${c} ${H})`;\n }\n\n brightness(): number {\n const { r, g, b } = this._rgb;\n return round((r * 299 + g * 587 + b * 114) / 255000, 2);\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.alpha;\n return Colordx._make({ ...this._rgb, alpha: round(clamp(value, 0, 1), 3) });\n }\n\n hue(): number;\n hue(value: number): Colordx;\n hue(value?: number): number | Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n if (value === undefined) {\n const hr = round(h, 2);\n return hr >= 360 ? 0 : hr;\n }\n return Colordx._make(hslToRgb({ h: value, s, l, alpha }));\n }\n\n lightness(): number;\n lightness(value: number): Colordx;\n lightness(value?: number): number | Colordx {\n const oklch = this.toOklch();\n if (value === undefined) return oklch.l;\n return Colordx._make(oklchToRgb({ ...oklch, l: clamp(value, 0, 1) }));\n }\n\n chroma(): number;\n chroma(value: number): Colordx;\n chroma(value?: number): number | Colordx {\n const oklch = this.toOklch();\n if (value === undefined) return oklch.c;\n return Colordx._make(oklchToRgb({ ...oklch, c: clamp(value, 0, 0.4) }));\n }\n\n lighten(amount = 0.1, options?: { relative?: boolean }): Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const newL = options?.relative ? l * (1 + amount) : l + amount * 100;\n return Colordx._make(hslToRgb({ h, s, l: clamp(newL, 0, 100), alpha }));\n }\n\n darken(amount = 0.1, options?: { relative?: boolean }): Colordx {\n return this.lighten(-amount, options);\n }\n\n saturate(amount = 0.1, options?: { relative?: boolean }): Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const newS = options?.relative ? s * (1 + amount) : s + amount * 100;\n return Colordx._make(hslToRgb({ h, s: clamp(newS, 0, 100), l, alpha }));\n }\n\n desaturate(amount = 0.1, options?: { relative?: boolean }): Colordx {\n return this.saturate(-amount, options);\n }\n\n grayscale(): Colordx {\n return this.desaturate(1);\n }\n\n invert(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n return Colordx._make({ r: 255 - r, g: 255 - g, b: 255 - b, alpha });\n }\n\n rotate(amount = 15): Colordx {\n return this.hue(this.hue() + amount);\n }\n\n isEqual(color: AnyColor): boolean {\n const other = new Colordx(color).toRgb();\n const self = this.toRgb();\n return self.r === other.r && self.g === other.g && self.b === other.b && self.alpha === other.alpha;\n }\n\n toString(): string {\n return this.toHex();\n }\n\n /**\n * Clips this color into the sRGB gamut by clamping out-of-range channels to [0, 255].\n * Matches the naive-clip strategy browsers use when rendering out-of-gamut `oklch()` / `oklab()`.\n * Hue and lightness may shift noticeably for colors far outside sRGB.\n * Returns `this` when already in gamut.\n */\n clampSrgb(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) return this;\n return Colordx._make({\n r: clamp(r, 0, 255),\n g: clamp(g, 0, 255),\n b: clamp(b, 0, 255),\n alpha,\n });\n }\n\n /**\n * Maps this color into the sRGB gamut using the CSS Color 4 gamut mapping algorithm\n * (chroma-reduction binary search). Preserves lightness and hue; sacrifices chroma.\n * Useful when hue stability matters — design tokens, palettes, color pickers.\n * Returns `this` when already in gamut.\n */\n mapSrgb(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) return this;\n const [lRaw, a, bv] = linearSrgbToOklab(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n // The gamma-encoded round-trip drifts L by ~1e-9 at boundaries; snap so that inputs with\n // exact L=0 or L=1 hit the same white/black shortcut the static gamut map uses.\n const l = lRaw > 1 - 1e-7 ? 1 : lRaw < 1e-7 ? 0 : lRaw;\n const mapped = toGamutSrgbRaw({ l, a, b: bv, alpha });\n return mapped !== null ? Colordx._makeFromOklab(mapped) : this;\n }\n\n /**\n * Maps an out-of-sRGB-gamut color into sRGB using the CSS Color 4 gamut mapping algorithm.\n * Colors already in gamut are returned as-is. sRGB inputs (hex, rgb, hsl, etc.) are passed through.\n */\n static toGamutSrgb: (input: AnyColor) => Colordx;\n}\n\nexport type Plugin = (\n ColordxClass: typeof Colordx,\n parsers: ColorParser[],\n formatParsers: [ColorParser, ColorFormat][]\n) => void;\n\nexport const colordx = (input: AnyColor | Colordx): Colordx => new Colordx(input);\n\nexport const extend = (plugins: Plugin[]): void => {\n plugins.forEach((plugin) => plugin(Colordx, parsers, pluginFormatParsers));\n};\n\nexport const nearest = <T extends AnyColor>(color: AnyColor, candidates: T[]): T => {\n if (candidates.length === 0) throw new Error('nearest: candidates array must not be empty');\n const { l: l1, a: a1, b: b1 } = new Colordx(color).toOklab();\n let minDist = Infinity;\n let result = candidates[0] as T;\n for (const candidate of candidates) {\n const { l: l2, a: a2, b: b2 } = new Colordx(candidate).toOklab();\n const dist = (l2 - l1) ** 2 + (a2 - a1) ** 2 + (b2 - b1) ** 2;\n if (dist < minDist) {\n minDist = dist;\n result = candidate;\n }\n }\n return result;\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 alpha: 1,\n });\n\nColordx.toGamutSrgb = (input: AnyColor): Colordx => {\n const mapped = toGamutSrgbRaw(input);\n return mapped !== null ? Colordx._makeFromOklab(mapped) : new Colordx(input);\n};\n"]} | ||
| {"version":3,"sources":["../src/colorModels/hsl.ts","../src/colorModels/oklch.ts","../src/parse.ts","../src/colordx.ts"],"names":["clampHsl","hsl","normalizeHue","clamp","round","_hslBuf","rgbToHslRaw","r","g","b","alpha","rn","gn","bn","max","min","l","h","s","d","hDeg","_hueToRgb","p","q","t","hslToRgb","sn","ln","hue","parseHslObject","input","isObject","hasKeys","isAnyNumber","sanitize","HSL_RE","NUM_OR_NONE","NUM","parseHslString","isComma","unit","parseNum","ANGLE_UNITS","rawA","isPercent","oklchToOklab","c","rgbToOklch","rgb","ol","oa","ob","rgbToOklab","C","H","oklchToRgb","oklch","oklabToRgb","oklchToRgbUnclamped","oklabToRgbUnclamped","parseOklchObject","OKLCH_RE","parseOklchString","L","stringFormatParsers","parseHex","parseRgbString","parseOklabString","objectFormatParsers","parseRgbObject","parseOklabObject","builtinStringParsers","builtinObjectParsers","defaultParsers","parsers","pluginFormatParsers","parse","builtins","parser","result","i","getFormat","typed","format","_SENTINEL","Colordx","_Colordx","_direct","parsed","a","lr","lg","lb","oklabToLinear","srgbFromLinear","ri","gi","bi","rgbToHex","precision","hr","value","amount","options","newL","newS","color","other","self","lRaw","bv","linearSrgbToOklab","srgbToLinear","mapped","toGamutSrgbRaw","colordx","extend","plugins","plugin","nearest","candidates","l1","a1","b1","minDist","candidate","l2","a2","b2","dist","random"],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n ANGLE_UNITS,\n NUM,\n NUM_OR_NONE,\n clamp,\n hasKeys,\n isAnyNumber,\n isObject,\n normalizeHue,\n parseNum,\n round,\n sanitize,\n} from '../helpers.js';\nimport type { HslColor, RgbColor } from '../types.js';\n\nexport const clampHsl = (hsl: HslColor): HslColor => ({\n h: normalizeHue(hsl.h),\n s: clamp(hsl.s, 0, 100),\n l: clamp(hsl.l, 0, 100),\n alpha: clamp(round(hsl.alpha, 3), 0, 1),\n});\n\n// Shared write buffer for rgbToHslRaw — callers must destructure immediately, never store the reference.\nconst _hslBuf: HslColor = { h: 0, s: 0, l: 0, alpha: 0 };\n\nexport const rgbToHslRaw = ({ r, g, b, alpha }: 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 const hDeg = h * 360;\n _hslBuf.h = hDeg >= 0 && hDeg < 360 ? hDeg : ((hDeg % 360) + 360) % 360;\n _hslBuf.s = clamp(s * 100, 0, 100);\n _hslBuf.l = clamp(l * 100, 0, 100);\n _hslBuf.alpha = clamp(round(alpha, 3), 0, 1);\n return _hslBuf;\n};\n\nexport const rgbToHsl = (rgb: RgbColor): HslColor => {\n const { h, s, l, alpha } = rgbToHslRaw(rgb);\n const hr = round(h, 2);\n // round() can push a value just below 360 to 360.00 due to floating-point; clamp back to 0.\n return { h: hr >= 360 ? 0 : hr, s: round(s, 2), l: round(l, 2), alpha };\n};\n\nconst _hueToRgb = (p: number, q: number, t: number): 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\nexport const hslToRgb = ({ h, s, l, alpha }: 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) + 360) % 360) / 360;\n return {\n r: _hueToRgb(p, q, hue + 1 / 3) * 255,\n g: _hueToRgb(p, q, hue) * 255,\n b: _hueToRgb(p, q, hue - 1 / 3) * 255,\n alpha,\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, alpha = 1 } = input as { h: unknown; s: unknown; l: unknown; alpha?: unknown };\n if (!isAnyNumber(h) || !isAnyNumber(s) || !isAnyNumber(l) || !isAnyNumber(alpha)) return null;\n return hslToRgb(clampHsl({ h: sanitize(h), s: sanitize(s), l: sanitize(l), alpha: sanitize(alpha) }));\n};\n\n// Legacy comma form requires `%` on s/l and disallows `none`. Modern space form\n// allows optional `%` and the CSS Color 4 `none` keyword on any channel.\n// Named groups: `_c` = comma/legacy branch, `_s` = space/modern branch.\nconst HSL_RE = new RegExp(\n `^hsla?\\\\(\\\\s*(?<h>${NUM_OR_NONE})(?<hu>deg|rad|grad|turn)?\\\\s*(?:` +\n `,\\\\s*(?<s_c>${NUM})%\\\\s*,\\\\s*(?<l_c>${NUM})%` +\n `(?:\\\\s*,\\\\s*(?<al_c>${NUM})(?<alp_c>%?)?\\\\s*)?` +\n `|` +\n `\\\\s+(?<s_s>${NUM_OR_NONE})(?<sp_s>%?)\\\\s+(?<l_s>${NUM_OR_NONE})(?<lp_s>%?)` +\n `(?:\\\\s*/\\\\s*(?<al_s>${NUM_OR_NONE})(?<alp_s>%?)?\\\\s*)?` +\n `)\\\\)$`,\n 'i'\n);\n\nexport const parseHslString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = HSL_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const isComma = g.s_c !== undefined;\n if (isComma && /^none$/i.test(g.h!)) return null; // legacy syntax has no `none`\n const unit = g.hu?.toLowerCase() ?? 'deg';\n const h = parseNum(g.h!) * (ANGLE_UNITS[unit] ?? 1);\n const s = parseNum((g.s_c ?? g.s_s)!);\n const l = parseNum((g.l_c ?? g.l_s)!);\n const rawA = g.al_c ?? g.al_s;\n const isPercent = !!(g.alp_c ?? g.alp_s);\n if (isComma && rawA !== undefined && /^none$/i.test(rawA)) return null;\n const alpha = rawA === undefined ? 1 : parseNum(rawA) / (isPercent ? 100 : 1);\n return hslToRgb(clampHsl({ h, s, l, alpha }));\n};\n","import {\n ANGLE_UNITS,\n NUM_OR_NONE,\n clamp,\n hasKeys,\n isAnyNumber,\n isObject,\n normalizeHue,\n parseNum,\n sanitize,\n} from '../helpers.js';\nimport type { OklabColor, OklchColor, RgbColor } from '../types.js';\nimport { oklabToRgb, oklabToRgbUnclamped, rgbToOklab } from './oklab.js';\n\nconst oklchToOklab = ({ l, c, h, alpha }: OklchColor): OklabColor => ({\n l,\n a: c * Math.cos((h * Math.PI) / 180),\n b: c * Math.sin((h * Math.PI) / 180),\n alpha,\n});\n\nexport const rgbToOklch = (rgb: RgbColor): OklchColor => {\n const { l: ol, a: oa, b: ob, alpha } = rgbToOklab(rgb);\n const C = Math.sqrt(oa * oa + ob * ob);\n const H = (Math.atan2(ob, oa) * 180) / Math.PI;\n // Achromatic threshold on OKLCH scale (0–~0.4): proportionally equivalent to LCH's 0.0015 threshold.\n return { l: ol, c: C, h: C < 0.000004 ? 0 : normalizeHue(H), alpha };\n};\n\nexport const oklchToRgb = (oklch: OklchColor): RgbColor => oklabToRgb(oklchToOklab(oklch));\nconst oklchToRgbUnclamped = (oklch: OklchColor): RgbColor => oklabToRgbUnclamped(oklchToOklab(oklch));\n\nexport const parseOklchObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n // Objects with colorSpace: 'lch' are CIE LCH, not OKLCH — let parseLchObject handle them.\n if ((input as { colorSpace?: unknown }).colorSpace === 'lch') return null;\n if (!hasKeys(input, ['l', 'c', 'h'])) return null;\n const { l, c, h, alpha = 1 } = input as { l: unknown; c: unknown; h: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(c) || !isAnyNumber(h) || !isAnyNumber(alpha)) return null;\n if (sanitize(l) > 1) return null; // OKLCH L is always [0, 1]; reject CIE LCH values passed without colorSpace branding\n return oklchToRgbUnclamped({\n l: sanitize(l),\n c: Math.max(0, sanitize(c)),\n h: normalizeHue(sanitize(h)),\n alpha: clamp(sanitize(alpha), 0, 1),\n });\n};\n\nconst OKLCH_RE = new RegExp(\n `^oklch\\\\(\\\\s*(?<l>${NUM_OR_NONE})(?<lp>%?)\\\\s+(?<c>${NUM_OR_NONE})(?<cp>%?)` +\n `\\\\s+(?<h>${NUM_OR_NONE})(?<hu>deg|rad|grad|turn)?` +\n `\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseOklchString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = OKLCH_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const L = g.lp ? parseNum(g.l!) / 100 : parseNum(g.l!); // 100% = 1\n const C = Math.max(0, g.cp ? parseNum(g.c!) * 0.004 : parseNum(g.c!)); // 100% = 0.4\n const unit = g.hu?.toLowerCase() ?? 'deg';\n const H = parseNum(g.h!) * (ANGLE_UNITS[unit] ?? 1);\n const alpha = g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1);\n return oklchToRgbUnclamped({\n l: L,\n c: C,\n h: normalizeHue(H),\n alpha: clamp(alpha, 0, 1),\n });\n};\n","import { parseHex } from './colorModels/hex.js';\nimport { parseHslObject, parseHslString } from './colorModels/hsl.js';\nimport { parseOklabObject, parseOklabString } from './colorModels/oklab.js';\nimport { parseOklchObject, parseOklchString } from './colorModels/oklch.js';\nimport { parseRgbObject, parseRgbString } from './colorModels/rgb.js';\nimport type { AnyColor, ColorFormat, ColorParser, RgbColor } from './types.js';\n\nconst stringFormatParsers: [ColorParser, ColorFormat][] = [\n [parseHex, 'hex'],\n [parseRgbString, 'rgb'],\n [parseHslString, 'hsl'],\n [parseOklchString, 'oklch'],\n [parseOklabString, 'oklab'],\n];\n\nconst objectFormatParsers: [ColorParser, ColorFormat][] = [\n [parseRgbObject, 'rgb'],\n [parseHslObject, 'hsl'],\n [parseOklabObject, 'oklab'],\n [parseOklchObject, 'oklch'],\n];\n\nconst builtinStringParsers: ColorParser[] = stringFormatParsers.map(([p]) => p);\nconst builtinObjectParsers: ColorParser[] = objectFormatParsers.map(([p]) => p);\n\nexport const defaultParsers: ColorParser[] = [...builtinStringParsers, ...builtinObjectParsers];\nexport const parsers: ColorParser[] = [...defaultParsers];\nexport const pluginFormatParsers: [ColorParser, ColorFormat][] = [];\n\nexport const parse = (input: AnyColor): RgbColor | null => {\n if (input === 'transparent') return { r: 0, g: 0, b: 0, alpha: 0 };\n const builtins = typeof input === 'string' ? builtinStringParsers : builtinObjectParsers;\n for (const parser of builtins) {\n const result = parser(input);\n if (result) return result;\n }\n for (let i = defaultParsers.length; i < parsers.length; i++) {\n const result = parsers[i]!(input);\n if (result) return result;\n }\n return null;\n};\n\nexport const getFormat = (input: AnyColor): ColorFormat | undefined => {\n if (input === 'transparent') return 'name';\n const typed = typeof input === 'string' ? stringFormatParsers : objectFormatParsers;\n for (const [parser, format] of typed) {\n if (parser(input)) return format;\n }\n for (const [parser, format] of pluginFormatParsers) {\n if (parser(input)) return format;\n }\n return undefined;\n};\n","import { rgbToHex } from './colorModels/hex.js';\nimport { hslToRgb, rgbToHslRaw } from './colorModels/hsl.js';\nimport { linearSrgbToOklab, oklabToLinear, rgbToOklab } from './colorModels/oklab.js';\nimport { oklchToRgb, rgbToOklch } from './colorModels/oklch.js';\nimport { toGamutSrgbRaw } from './gamut.js';\nimport { clamp, round } from './helpers.js';\nimport { parse, parsers, pluginFormatParsers } from './parse.js';\nimport { srgbFromLinear, srgbToLinear } from './transfer.js';\nimport type { AnyColor, ColorFormat, ColorParser, HslColor, OklabColor, OklchColor, RgbColor } from './types.js';\n\nconst _SENTINEL: unique symbol = Symbol();\n\nexport class Colordx {\n private readonly _rgb: RgbColor;\n private readonly _valid: boolean;\n\n constructor(input: AnyColor | Colordx | typeof _SENTINEL, _direct?: RgbColor) {\n if (input === _SENTINEL) {\n this._valid = true;\n this._rgb = _direct!;\n } else if (input instanceof Colordx) {\n this._valid = input._valid;\n this._rgb = input._rgb;\n } else {\n const parsed = parse(input);\n this._valid = parsed !== null;\n this._rgb = parsed ?? { r: 0, g: 0, b: 0, alpha: 1 };\n }\n }\n\n private static _make(rgb: RgbColor): Colordx {\n return new Colordx(_SENTINEL, rgb);\n }\n\n /**\n * Construct a Colordx from OKLab values, storing unclamped gamma-encoded sRGB internally.\n * Unlike new Colordx(oklabObject), this does NOT clamp channels to [0, 1] before gamma encoding,\n * so wide-gamut P3/Rec2020 colors are preserved accurately for toP3() / toRec2020() output.\n * sRGB output methods (toRgb, toHex, etc.) clamp to [0, 255] before returning.\n */\n static _makeFromOklab({ l, a, b, alpha }: OklabColor): Colordx {\n const [lr, lg, lb] = oklabToLinear(l, a, b);\n return Colordx._make({\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n });\n }\n\n isValid(): boolean {\n return this._valid;\n }\n\n toRgb(): RgbColor {\n const { r, g, b, alpha } = this._rgb;\n return { r: clamp(round(r), 0, 255), g: clamp(round(g), 0, 255), b: clamp(round(b), 0, 255), alpha };\n }\n\n /** Returns the internal unrounded RGB. Intended for plugin use where deferred rounding matters. */\n _rawRgb(): RgbColor {\n return this._rgb;\n }\n\n toRgbString(): string {\n const { r, g, b, alpha } = this._rgb;\n const ri = clamp(round(r), 0, 255),\n gi = clamp(round(g), 0, 255),\n bi = clamp(round(b), 0, 255);\n return alpha < 1 ? `rgb(${ri} ${gi} ${bi} / ${alpha})` : `rgb(${ri} ${gi} ${bi})`;\n }\n\n toHex(): string {\n return rgbToHex(this._rgb);\n }\n\n /** Returns a 24-bit RGB integer (0x000000–0xFFFFFF). Alpha is not included. */\n toNumber(): number {\n const { r, g, b } = this._rgb;\n return (clamp(round(r), 0, 255) << 16) | (clamp(round(g), 0, 255) << 8) | clamp(round(b), 0, 255);\n }\n\n toHsl(precision = 2): HslColor {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const hr = round(h, precision);\n return { h: hr >= 360 ? 0 : hr, s: round(s, precision), l: round(l, precision), alpha };\n }\n\n toHslString(precision = 2): string {\n const { h, s, l, alpha } = this.toHsl(precision);\n return alpha < 1 ? `hsl(${h} ${s}% ${l}% / ${alpha})` : `hsl(${h} ${s}% ${l}%)`;\n }\n\n toOklab(): OklabColor {\n const { l, a, b, alpha } = rgbToOklab(this._rgb);\n return { l: round(l, 4), a: round(a, 4), b: round(b, 4), alpha };\n }\n\n toOklabString(): string {\n const { l, a, b, alpha } = this.toOklab();\n return alpha < 1 ? `oklab(${l} ${a} ${b} / ${alpha})` : `oklab(${l} ${a} ${b})`;\n }\n\n toOklch(): OklchColor {\n const { l, c, h, alpha } = rgbToOklch(this._rgb);\n return { l: round(l, 4), c: round(c, 4), h: round(h, 2), alpha };\n }\n\n toOklchString(): string {\n const { l, c, h, alpha } = this.toOklch();\n const H = c === 0 ? 'none' : h;\n return alpha < 1 ? `oklch(${l} ${c} ${H} / ${alpha})` : `oklch(${l} ${c} ${H})`;\n }\n\n brightness(): number {\n const { r, g, b } = this._rgb;\n return round((r * 299 + g * 587 + b * 114) / 255000, 2);\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.alpha;\n return Colordx._make({ ...this._rgb, alpha: round(clamp(value, 0, 1), 3) });\n }\n\n hue(): number;\n hue(value: number): Colordx;\n hue(value?: number): number | Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n if (value === undefined) {\n const hr = round(h, 2);\n return hr >= 360 ? 0 : hr;\n }\n return Colordx._make(hslToRgb({ h: value, s, l, alpha }));\n }\n\n lightness(): number;\n lightness(value: number): Colordx;\n lightness(value?: number): number | Colordx {\n const oklch = this.toOklch();\n if (value === undefined) return oklch.l;\n return Colordx._make(oklchToRgb({ ...oklch, l: clamp(value, 0, 1) }));\n }\n\n chroma(): number;\n chroma(value: number): Colordx;\n chroma(value?: number): number | Colordx {\n const oklch = this.toOklch();\n if (value === undefined) return oklch.c;\n return Colordx._make(oklchToRgb({ ...oklch, c: clamp(value, 0, 0.4) }));\n }\n\n lighten(amount = 0.1, options?: { relative?: boolean }): Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const newL = options?.relative ? l * (1 + amount) : l + amount * 100;\n return Colordx._make(hslToRgb({ h, s, l: clamp(newL, 0, 100), alpha }));\n }\n\n darken(amount = 0.1, options?: { relative?: boolean }): Colordx {\n return this.lighten(-amount, options);\n }\n\n saturate(amount = 0.1, options?: { relative?: boolean }): Colordx {\n const { h, s, l, alpha } = rgbToHslRaw(this._rgb);\n const newS = options?.relative ? s * (1 + amount) : s + amount * 100;\n return Colordx._make(hslToRgb({ h, s: clamp(newS, 0, 100), l, alpha }));\n }\n\n desaturate(amount = 0.1, options?: { relative?: boolean }): Colordx {\n return this.saturate(-amount, options);\n }\n\n grayscale(): Colordx {\n return this.desaturate(1);\n }\n\n invert(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n return Colordx._make({ r: 255 - r, g: 255 - g, b: 255 - b, alpha });\n }\n\n rotate(amount = 15): Colordx {\n return this.hue(this.hue() + amount);\n }\n\n isEqual(color: AnyColor): boolean {\n const other = new Colordx(color).toRgb();\n const self = this.toRgb();\n return self.r === other.r && self.g === other.g && self.b === other.b && self.alpha === other.alpha;\n }\n\n toString(): string {\n return this.toHex();\n }\n\n /**\n * Clips this color into the sRGB gamut by clamping out-of-range channels to [0, 255].\n * Matches the naive-clip strategy browsers use when rendering out-of-gamut `oklch()` / `oklab()`.\n * Hue and lightness may shift noticeably for colors far outside sRGB.\n * Returns `this` when already in gamut.\n */\n clampSrgb(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) return this;\n return Colordx._make({\n r: clamp(r, 0, 255),\n g: clamp(g, 0, 255),\n b: clamp(b, 0, 255),\n alpha,\n });\n }\n\n /**\n * Maps this color into the sRGB gamut using the CSS Color 4 gamut mapping algorithm\n * (chroma-reduction binary search). Preserves lightness and hue; sacrifices chroma.\n * Useful when hue stability matters — design tokens, palettes, color pickers.\n * Returns `this` when already in gamut.\n */\n mapSrgb(): Colordx {\n const { r, g, b, alpha } = this._rgb;\n if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) return this;\n const [lRaw, a, bv] = linearSrgbToOklab(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n // The gamma-encoded round-trip drifts L by ~1e-9 at boundaries; snap so that inputs with\n // exact L=0 or L=1 hit the same white/black shortcut the static gamut map uses.\n const l = lRaw > 1 - 1e-7 ? 1 : lRaw < 1e-7 ? 0 : lRaw;\n const mapped = toGamutSrgbRaw({ l, a, b: bv, alpha });\n return mapped !== null ? Colordx._makeFromOklab(mapped) : this;\n }\n\n /**\n * Maps an out-of-sRGB-gamut color into sRGB using the CSS Color 4 gamut mapping algorithm.\n * Colors already in gamut are returned as-is. sRGB inputs (hex, rgb, hsl, etc.) are passed through.\n */\n static toGamutSrgb: (input: AnyColor) => Colordx;\n}\n\nexport type Plugin = (\n ColordxClass: typeof Colordx,\n parsers: ColorParser[],\n formatParsers: [ColorParser, ColorFormat][]\n) => void;\n\nexport const colordx = (input: AnyColor | Colordx): Colordx => new Colordx(input);\n\nexport const extend = (plugins: Plugin[]): void => {\n plugins.forEach((plugin) => plugin(Colordx, parsers, pluginFormatParsers));\n};\n\nexport const nearest = <T extends AnyColor>(color: AnyColor, candidates: T[]): T => {\n if (candidates.length === 0) throw new Error('nearest: candidates array must not be empty');\n const { l: l1, a: a1, b: b1 } = new Colordx(color).toOklab();\n let minDist = Infinity;\n let result = candidates[0] as T;\n for (const candidate of candidates) {\n const { l: l2, a: a2, b: b2 } = new Colordx(candidate).toOklab();\n const dist = (l2 - l1) ** 2 + (a2 - a1) ** 2 + (b2 - b1) ** 2;\n if (dist < minDist) {\n minDist = dist;\n result = candidate;\n }\n }\n return result;\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 alpha: 1,\n });\n\nColordx.toGamutSrgb = (input: AnyColor): Colordx => {\n const mapped = toGamutSrgbRaw(input);\n return mapped !== null ? Colordx._makeFromOklab(mapped) : new Colordx(input);\n};\n"]} |
@@ -1,2 +0,2 @@ | ||
| 'use strict';var chunkX5FCFNQN_cjs=require('../chunk-X5FCFNQN.cjs'),chunkEXPXWBLP_cjs=require('../chunk-EXPXWBLP.cjs');var f={Rsco:.2126729,Gsco:.7151522,Bsco:.072175},a={normBG:.56,normTXT:.57,revBG:.65,revTXT:.62,scale:1.14,loClip:.1,offset:.027,blkThrs:.022,blkClmp:1.414,deltaYmin:5e-4};function A(e,t,n){let o=l=>(l/255)**2.4,r=f.Rsco*o(e)+f.Gsco*o(t)+f.Bsco*o(n);return r>a.blkThrs?r:r+(a.blkThrs-r)**a.blkClmp}function p(e,t){let n=A(e.r,e.g,e.b),o=A(t.r,t.g,t.b);if(Math.abs(o-n)<a.deltaYmin)return 0;if(o>n){let r=(o**a.normBG-n**a.normTXT)*a.scale;return r<a.loClip?0:(r-a.offset)*100}else {let r=(o**a.revBG-n**a.revTXT)*a.scale;return r>-0.1?0:(r+a.offset)*100}}var h=e=>{e.prototype.luminance=function(){let{r:t,g:n,b:o}=this._rawRgb();return chunkEXPXWBLP_cjs.b(.2126*chunkX5FCFNQN_cjs.a(t/255)+.7152*chunkX5FCFNQN_cjs.a(n/255)+.0722*chunkX5FCFNQN_cjs.a(o/255),4)},e.prototype.contrast=function(t="#fff"){let n=new e(t),o=n._rawRgb(),r=this._rawRgb(),s=(r.alpha<1?new e({r:r.alpha*r.r+(1-r.alpha)*o.r,g:r.alpha*r.g+(1-r.alpha)*o.g,b:r.alpha*r.b+(1-r.alpha)*o.b,alpha:1}):this).luminance(),c=n.luminance(),i=Math.max(s,c),m=Math.min(s,c);return chunkEXPXWBLP_cjs.b((i+.05)/(m+.05),2)},e.prototype.apcaContrast=function(t="#fff"){let n=new e(t).toRgb(),o=this.toRgb(),r=o.alpha<1?{r:o.alpha*o.r+(1-o.alpha)*n.r,g:o.alpha*o.g+(1-o.alpha)*n.g,b:o.alpha*o.b+(1-o.alpha)*n.b}:o;return Math.round(p(r,n)*10)/10},e.prototype.isReadableApca=function(t="#fff",n={}){let{size:o="normal"}=n,r=Math.abs(this.apcaContrast(t));return o==="large"?r>=60:r>=75},e.prototype.readableScore=function(t="#fff"){let n=this.contrast(t);return n>=7?"AAA":n>=4.5?"AA":n>=3?"AA large":"fail"},e.prototype.isReadable=function(t="#fff",n={}){let{level:o="AA",size:r="normal"}=n,l=this.contrast(t);return o==="AAA"?r==="large"?l>=4.5:l>=7:r==="large"?l>=3:l>=4.5},e.prototype.minReadable=function(t="#fff"){let n=new e(t).luminance(),o=(n+.05)/.05,r=1.05/(n+.05),l=o>=r,s=i=>l?i.darken(.01):i.lighten(.01);if(this.contrast(t)>=4.5)return this;let c=s(this);for(let i=1;i<100&&!(c.contrast(t)>=4.5);i++)c=s(c);return c};},y=h;module.exports=y;//# sourceMappingURL=a11y.cjs.map | ||
| 'use strict';var chunkX5FCFNQN_cjs=require('../chunk-X5FCFNQN.cjs'),chunkYISEJCI6_cjs=require('../chunk-YISEJCI6.cjs');var f={Rsco:.2126729,Gsco:.7151522,Bsco:.072175},a={normBG:.56,normTXT:.57,revBG:.65,revTXT:.62,scale:1.14,loClip:.1,offset:.027,blkThrs:.022,blkClmp:1.414,deltaYmin:5e-4};function A(e,t,n){let o=l=>(l/255)**2.4,r=f.Rsco*o(e)+f.Gsco*o(t)+f.Bsco*o(n);return r>a.blkThrs?r:r+(a.blkThrs-r)**a.blkClmp}function p(e,t){let n=A(e.r,e.g,e.b),o=A(t.r,t.g,t.b);if(Math.abs(o-n)<a.deltaYmin)return 0;if(o>n){let r=(o**a.normBG-n**a.normTXT)*a.scale;return r<a.loClip?0:(r-a.offset)*100}else {let r=(o**a.revBG-n**a.revTXT)*a.scale;return r>-0.1?0:(r+a.offset)*100}}var h=e=>{e.prototype.luminance=function(){let{r:t,g:n,b:o}=this._rawRgb();return chunkYISEJCI6_cjs.b(.2126*chunkX5FCFNQN_cjs.a(t/255)+.7152*chunkX5FCFNQN_cjs.a(n/255)+.0722*chunkX5FCFNQN_cjs.a(o/255),4)},e.prototype.contrast=function(t="#fff"){let n=new e(t),o=n._rawRgb(),r=this._rawRgb(),s=(r.alpha<1?new e({r:r.alpha*r.r+(1-r.alpha)*o.r,g:r.alpha*r.g+(1-r.alpha)*o.g,b:r.alpha*r.b+(1-r.alpha)*o.b,alpha:1}):this).luminance(),c=n.luminance(),i=Math.max(s,c),m=Math.min(s,c);return chunkYISEJCI6_cjs.b((i+.05)/(m+.05),2)},e.prototype.apcaContrast=function(t="#fff"){let n=new e(t).toRgb(),o=this.toRgb(),r=o.alpha<1?{r:o.alpha*o.r+(1-o.alpha)*n.r,g:o.alpha*o.g+(1-o.alpha)*n.g,b:o.alpha*o.b+(1-o.alpha)*n.b}:o;return Math.round(p(r,n)*10)/10},e.prototype.isReadableApca=function(t="#fff",n={}){let{size:o="normal"}=n,r=Math.abs(this.apcaContrast(t));return o==="large"?r>=60:r>=75},e.prototype.readableScore=function(t="#fff"){let n=this.contrast(t);return n>=7?"AAA":n>=4.5?"AA":n>=3?"AA large":"fail"},e.prototype.isReadable=function(t="#fff",n={}){let{level:o="AA",size:r="normal"}=n,l=this.contrast(t);return o==="AAA"?r==="large"?l>=4.5:l>=7:r==="large"?l>=3:l>=4.5},e.prototype.minReadable=function(t="#fff"){let n=new e(t).luminance(),o=(n+.05)/.05,r=1.05/(n+.05),l=o>=r,s=i=>l?i.darken(.01):i.lighten(.01);if(this.contrast(t)>=4.5)return this;let c=s(this);for(let i=1;i<100&&!(c.contrast(t)>=4.5);i++)c=s(c);return c};},y=h;module.exports=y;//# sourceMappingURL=a11y.cjs.map | ||
| //# sourceMappingURL=a11y.cjs.map |
@@ -1,2 +0,2 @@ | ||
| import {a as a$1}from'../chunk-FXCFKFXK.mjs';import {b}from'../chunk-JFPP44S3.mjs';var f={Rsco:.2126729,Gsco:.7151522,Bsco:.072175},a={normBG:.56,normTXT:.57,revBG:.65,revTXT:.62,scale:1.14,loClip:.1,offset:.027,blkThrs:.022,blkClmp:1.414,deltaYmin:5e-4};function A(e,t,n){let o=l=>(l/255)**2.4,r=f.Rsco*o(e)+f.Gsco*o(t)+f.Bsco*o(n);return r>a.blkThrs?r:r+(a.blkThrs-r)**a.blkClmp}function p(e,t){let n=A(e.r,e.g,e.b),o=A(t.r,t.g,t.b);if(Math.abs(o-n)<a.deltaYmin)return 0;if(o>n){let r=(o**a.normBG-n**a.normTXT)*a.scale;return r<a.loClip?0:(r-a.offset)*100}else {let r=(o**a.revBG-n**a.revTXT)*a.scale;return r>-0.1?0:(r+a.offset)*100}}var h=e=>{e.prototype.luminance=function(){let{r:t,g:n,b:o}=this._rawRgb();return b(.2126*a$1(t/255)+.7152*a$1(n/255)+.0722*a$1(o/255),4)},e.prototype.contrast=function(t="#fff"){let n=new e(t),o=n._rawRgb(),r=this._rawRgb(),s=(r.alpha<1?new e({r:r.alpha*r.r+(1-r.alpha)*o.r,g:r.alpha*r.g+(1-r.alpha)*o.g,b:r.alpha*r.b+(1-r.alpha)*o.b,alpha:1}):this).luminance(),c=n.luminance(),i=Math.max(s,c),m=Math.min(s,c);return b((i+.05)/(m+.05),2)},e.prototype.apcaContrast=function(t="#fff"){let n=new e(t).toRgb(),o=this.toRgb(),r=o.alpha<1?{r:o.alpha*o.r+(1-o.alpha)*n.r,g:o.alpha*o.g+(1-o.alpha)*n.g,b:o.alpha*o.b+(1-o.alpha)*n.b}:o;return Math.round(p(r,n)*10)/10},e.prototype.isReadableApca=function(t="#fff",n={}){let{size:o="normal"}=n,r=Math.abs(this.apcaContrast(t));return o==="large"?r>=60:r>=75},e.prototype.readableScore=function(t="#fff"){let n=this.contrast(t);return n>=7?"AAA":n>=4.5?"AA":n>=3?"AA large":"fail"},e.prototype.isReadable=function(t="#fff",n={}){let{level:o="AA",size:r="normal"}=n,l=this.contrast(t);return o==="AAA"?r==="large"?l>=4.5:l>=7:r==="large"?l>=3:l>=4.5},e.prototype.minReadable=function(t="#fff"){let n=new e(t).luminance(),o=(n+.05)/.05,r=1.05/(n+.05),l=o>=r,s=i=>l?i.darken(.01):i.lighten(.01);if(this.contrast(t)>=4.5)return this;let c=s(this);for(let i=1;i<100&&!(c.contrast(t)>=4.5);i++)c=s(c);return c};},y=h;export{y as default};//# sourceMappingURL=a11y.mjs.map | ||
| import {a as a$1}from'../chunk-FXCFKFXK.mjs';import {b}from'../chunk-IOXRZECH.mjs';var f={Rsco:.2126729,Gsco:.7151522,Bsco:.072175},a={normBG:.56,normTXT:.57,revBG:.65,revTXT:.62,scale:1.14,loClip:.1,offset:.027,blkThrs:.022,blkClmp:1.414,deltaYmin:5e-4};function A(e,t,n){let o=l=>(l/255)**2.4,r=f.Rsco*o(e)+f.Gsco*o(t)+f.Bsco*o(n);return r>a.blkThrs?r:r+(a.blkThrs-r)**a.blkClmp}function p(e,t){let n=A(e.r,e.g,e.b),o=A(t.r,t.g,t.b);if(Math.abs(o-n)<a.deltaYmin)return 0;if(o>n){let r=(o**a.normBG-n**a.normTXT)*a.scale;return r<a.loClip?0:(r-a.offset)*100}else {let r=(o**a.revBG-n**a.revTXT)*a.scale;return r>-0.1?0:(r+a.offset)*100}}var h=e=>{e.prototype.luminance=function(){let{r:t,g:n,b:o}=this._rawRgb();return b(.2126*a$1(t/255)+.7152*a$1(n/255)+.0722*a$1(o/255),4)},e.prototype.contrast=function(t="#fff"){let n=new e(t),o=n._rawRgb(),r=this._rawRgb(),s=(r.alpha<1?new e({r:r.alpha*r.r+(1-r.alpha)*o.r,g:r.alpha*r.g+(1-r.alpha)*o.g,b:r.alpha*r.b+(1-r.alpha)*o.b,alpha:1}):this).luminance(),c=n.luminance(),i=Math.max(s,c),m=Math.min(s,c);return b((i+.05)/(m+.05),2)},e.prototype.apcaContrast=function(t="#fff"){let n=new e(t).toRgb(),o=this.toRgb(),r=o.alpha<1?{r:o.alpha*o.r+(1-o.alpha)*n.r,g:o.alpha*o.g+(1-o.alpha)*n.g,b:o.alpha*o.b+(1-o.alpha)*n.b}:o;return Math.round(p(r,n)*10)/10},e.prototype.isReadableApca=function(t="#fff",n={}){let{size:o="normal"}=n,r=Math.abs(this.apcaContrast(t));return o==="large"?r>=60:r>=75},e.prototype.readableScore=function(t="#fff"){let n=this.contrast(t);return n>=7?"AAA":n>=4.5?"AA":n>=3?"AA large":"fail"},e.prototype.isReadable=function(t="#fff",n={}){let{level:o="AA",size:r="normal"}=n,l=this.contrast(t);return o==="AAA"?r==="large"?l>=4.5:l>=7:r==="large"?l>=3:l>=4.5},e.prototype.minReadable=function(t="#fff"){let n=new e(t).luminance(),o=(n+.05)/.05,r=1.05/(n+.05),l=o>=r,s=i=>l?i.darken(.01):i.lighten(.01);if(this.contrast(t)>=4.5)return this;let c=s(this);for(let i=1;i<100&&!(c.contrast(t)>=4.5);i++)c=s(c);return c};},y=h;export{y as default};//# sourceMappingURL=a11y.mjs.map | ||
| //# sourceMappingURL=a11y.mjs.map |
@@ -1,2 +0,2 @@ | ||
| 'use strict';var chunkGYCEEHZT_cjs=require('../chunk-GYCEEHZT.cjs'),chunkEXPXWBLP_cjs=require('../chunk-EXPXWBLP.cjs');var g=r=>({c:chunkEXPXWBLP_cjs.a(r.c,0,100),m:chunkEXPXWBLP_cjs.a(r.m,0,100),y:chunkEXPXWBLP_cjs.a(r.y,0,100),k:chunkEXPXWBLP_cjs.a(r.k,0,100),alpha:chunkEXPXWBLP_cjs.a(r.alpha,0,1)}),f=({r,g:o,b:t,alpha:e})=>{let n=1-Math.max(r/255,o/255,t/255);if(n===1)return {c:0,m:0,y:0,k:chunkEXPXWBLP_cjs.b(100*n),alpha:e};let m=(1-r/255-n)/(1-n),k=(1-o/255-n)/(1-n),u=(1-t/255-n)/(1-n);return {c:chunkEXPXWBLP_cjs.b(100*m,2),m:chunkEXPXWBLP_cjs.b(100*k,2),y:chunkEXPXWBLP_cjs.b(100*u,2),k:chunkEXPXWBLP_cjs.b(100*n,2),alpha:e}},b=({c:r,m:o,y:t,k:e,alpha:n})=>chunkGYCEEHZT_cjs.a({r:255*(1-r/100)*(1-e/100),g:255*(1-o/100)*(1-e/100),b:255*(1-t/100)*(1-e/100),alpha:n}),i=r=>{if(!chunkEXPXWBLP_cjs.h(r)||!chunkEXPXWBLP_cjs.i(r,["c","m","y","k"]))return null;let{c:o,m:t,y:e,k:n,alpha:m=1}=r;return !chunkEXPXWBLP_cjs.f(o)||!chunkEXPXWBLP_cjs.f(t)||!chunkEXPXWBLP_cjs.f(e)||!chunkEXPXWBLP_cjs.f(n)||!chunkEXPXWBLP_cjs.f(m)?null:b(g({c:chunkEXPXWBLP_cjs.g(o),m:chunkEXPXWBLP_cjs.g(t),y:chunkEXPXWBLP_cjs.g(e),k:chunkEXPXWBLP_cjs.g(n),alpha:chunkEXPXWBLP_cjs.g(m)}))},h=/^device-cmyk\(\s*([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(%?)\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,p=r=>{if(typeof r!="string")return null;let o=h.exec(r.trim());if(!o)return null;let t=(e,n)=>Number(e)*(n?1:100);return b(g({c:t(o[1],o[2]),m:t(o[3],o[4]),y:t(o[5],o[6]),k:t(o[7],o[8]),alpha:o[9]===void 0?1:Number(o[9])/(o[10]?100:1)}))};var $=(r,o,t)=>{r.prototype.toCmyk=function(){return f(this._rawRgb())},r.prototype.toCmykString=function(){let{c:e,m:n,y:m,k,alpha:u}=this.toCmyk();return u<1?`device-cmyk(${e}% ${n}% ${m}% ${k}% / ${u})`:`device-cmyk(${e}% ${n}% ${m}% ${k}%)`},o.push(i,p),t.push([i,"cmyk"],[p,"cmyk"]);},S=$;module.exports=S;//# sourceMappingURL=cmyk.cjs.map | ||
| 'use strict';var chunk3V4MONNR_cjs=require('../chunk-3V4MONNR.cjs'),chunkYISEJCI6_cjs=require('../chunk-YISEJCI6.cjs');var b=r=>({c:chunkYISEJCI6_cjs.a(r.c,0,100),m:chunkYISEJCI6_cjs.a(r.m,0,100),y:chunkYISEJCI6_cjs.a(r.y,0,100),k:chunkYISEJCI6_cjs.a(r.k,0,100),alpha:chunkYISEJCI6_cjs.a(r.alpha,0,1)}),h=({r,g:o,b:t,alpha:m})=>{let n=1-Math.max(r/255,o/255,t/255);if(n===1)return {c:0,m:0,y:0,k:chunkYISEJCI6_cjs.b(100*n),alpha:m};let e=(1-r/255-n)/(1-n),k=(1-o/255-n)/(1-n),u=(1-t/255-n)/(1-n);return {c:chunkYISEJCI6_cjs.b(100*e,2),m:chunkYISEJCI6_cjs.b(100*k,2),y:chunkYISEJCI6_cjs.b(100*u,2),k:chunkYISEJCI6_cjs.b(100*n,2),alpha:m}},d=({c:r,m:o,y:t,k:m,alpha:n})=>chunk3V4MONNR_cjs.a({r:255*(1-r/100)*(1-m/100),g:255*(1-o/100)*(1-m/100),b:255*(1-t/100)*(1-m/100),alpha:n}),a=r=>{if(!chunkYISEJCI6_cjs.h(r)||!chunkYISEJCI6_cjs.i(r,["c","m","y","k"]))return null;let{c:o,m:t,y:m,k:n,alpha:e=1}=r;return !chunkYISEJCI6_cjs.f(o)||!chunkYISEJCI6_cjs.f(t)||!chunkYISEJCI6_cjs.f(m)||!chunkYISEJCI6_cjs.f(n)||!chunkYISEJCI6_cjs.f(e)?null:d(b({c:chunkYISEJCI6_cjs.g(o),m:chunkYISEJCI6_cjs.g(t),y:chunkYISEJCI6_cjs.g(m),k:chunkYISEJCI6_cjs.g(n),alpha:chunkYISEJCI6_cjs.g(e)}))},R=new RegExp(`^device-cmyk\\(\\s*(?<c>${chunkYISEJCI6_cjs.k})(?<cp>%?)\\s+(?<m>${chunkYISEJCI6_cjs.k})(?<mp>%?)\\s+(?<y>${chunkYISEJCI6_cjs.k})(?<yp>%?)\\s+(?<k>${chunkYISEJCI6_cjs.k})(?<kp>%?)\\s*(?:/\\s*(?<al>${chunkYISEJCI6_cjs.k})(?<alp>%?)\\s*)?\\)$`,"i"),C=r=>{if(typeof r!="string")return null;let o=R.exec(r.trim())?.groups;if(!o)return null;let t=(m,n)=>chunkYISEJCI6_cjs.l(m)*(n?1:100);return d(b({c:t(o.c,o.cp),m:t(o.m,o.mp),y:t(o.y,o.yp),k:t(o.k,o.kp),alpha:o.al===void 0?1:chunkYISEJCI6_cjs.l(o.al)/(o.alp?100:1)}))};var x=(r,o,t)=>{r.prototype.toCmyk=function(){return h(this._rawRgb())},r.prototype.toCmykString=function(){let{c:m,m:n,y:e,k,alpha:u}=this.toCmyk();return u<1?`device-cmyk(${m}% ${n}% ${e}% ${k}% / ${u})`:`device-cmyk(${m}% ${n}% ${e}% ${k}%)`},o.push(a,C),t.push([a,"cmyk"],[C,"cmyk"]);},S=x;module.exports=S;//# sourceMappingURL=cmyk.cjs.map | ||
| //# sourceMappingURL=cmyk.cjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/colorModels/cmyk.ts","../../src/plugins/cmyk.ts"],"names":["clampCmyk","cmyk","clamp","rgbToCmyk","g","b","alpha","k","round","c","m","y","cmykToRgb","clampRgb","parseCmykObject","input","isObject","hasKeys","isAnyNumber","sanitize","CMYK_RE","parseCmykString","toPercent","val","pct","ColordxClass","parsers","formatParsers","cmyk_default"],"mappings":"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","file":"cmyk.cjs","sourcesContent":["import { clamp, hasKeys, isAnyNumber, isObject, round, sanitize } from '../helpers.js';\nimport type { CmykColor, RgbColor } from '../types.js';\nimport { clampRgb } from './rgb.js';\n\nconst clampCmyk = (cmyk: CmykColor): CmykColor => ({\n c: clamp(cmyk.c, 0, 100),\n m: clamp(cmyk.m, 0, 100),\n y: clamp(cmyk.y, 0, 100),\n k: clamp(cmyk.k, 0, 100),\n alpha: clamp(cmyk.alpha, 0, 1),\n});\n\nexport const rgbToCmyk = ({ r, g, b, alpha }: RgbColor): CmykColor => {\n const k = 1 - Math.max(r / 255, g / 255, b / 255);\n if (k === 1) return { c: 0, m: 0, y: 0, k: round(100 * k), alpha };\n const c = (1 - r / 255 - k) / (1 - k);\n const m = (1 - g / 255 - k) / (1 - k);\n const y = (1 - b / 255 - k) / (1 - k);\n return {\n c: round(100 * c, 2),\n m: round(100 * m, 2),\n y: round(100 * y, 2),\n k: round(100 * k, 2),\n alpha,\n };\n};\n\nexport const cmykToRgb = ({ c, m, y, k, alpha }: CmykColor): RgbColor =>\n clampRgb({\n r: 255 * (1 - c / 100) * (1 - k / 100),\n g: 255 * (1 - m / 100) * (1 - k / 100),\n b: 255 * (1 - y / 100) * (1 - k / 100),\n alpha,\n });\n\nexport const parseCmykObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['c', 'm', 'y', 'k'])) return null;\n const { c, m, y, k, alpha = 1 } = input as { c: unknown; m: unknown; y: unknown; k: unknown; alpha?: unknown };\n if (!isAnyNumber(c) || !isAnyNumber(m) || !isAnyNumber(y) || !isAnyNumber(k) || !isAnyNumber(alpha)) return null;\n return cmykToRgb(\n clampCmyk({\n c: sanitize(c),\n m: sanitize(m),\n y: sanitize(y),\n k: sanitize(k),\n alpha: sanitize(alpha),\n })\n );\n};\n\nconst CMYK_RE =\n /^device-cmyk\\(\\s*([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(%?)\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nexport const parseCmykString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = CMYK_RE.exec(input.trim());\n if (!m) return null;\n const toPercent = (val: string, pct: string) => Number(val) * (pct ? 1 : 100);\n return cmykToRgb(\n clampCmyk({\n c: toPercent(m[1]!, m[2]!),\n m: toPercent(m[3]!, m[4]!),\n y: toPercent(m[5]!, m[6]!),\n k: toPercent(m[7]!, m[8]!),\n alpha: m[9] === undefined ? 1 : Number(m[9]) / (m[10] ? 100 : 1),\n })\n );\n};\n","import { parseCmykObject, parseCmykString, rgbToCmyk } from '../colorModels/cmyk.js';\nimport type { Plugin } from '../colordx.js';\nimport type { CmykColor } from '../types.js';\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toCmyk(): CmykColor;\n toCmykString(): string;\n }\n}\n\nconst cmyk: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toCmyk = function () {\n return rgbToCmyk(this._rawRgb());\n };\n ColordxClass.prototype.toCmykString = function () {\n const { c, m, y, k, alpha } = this.toCmyk();\n return alpha < 1 ? `device-cmyk(${c}% ${m}% ${y}% ${k}% / ${alpha})` : `device-cmyk(${c}% ${m}% ${y}% ${k}%)`;\n };\n parsers.push(parseCmykObject, parseCmykString);\n formatParsers.push([parseCmykObject, 'cmyk'], [parseCmykString, 'cmyk']);\n};\n\nexport default cmyk;\n"]} | ||
| {"version":3,"sources":["../../src/colorModels/cmyk.ts","../../src/plugins/cmyk.ts"],"names":["clampCmyk","cmyk","clamp","rgbToCmyk","g","b","alpha","k","round","c","m","y","cmykToRgb","clampRgb","parseCmykObject","input","isObject","hasKeys","isAnyNumber","sanitize","CMYK_RE","NUM_OR_NONE","parseCmykString","toPercent","v","pct","parseNum","ColordxClass","parsers","formatParsers","cmyk_default"],"mappings":"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","file":"cmyk.cjs","sourcesContent":["import { NUM_OR_NONE, clamp, hasKeys, isAnyNumber, isObject, parseNum, round, sanitize } from '../helpers.js';\nimport type { CmykColor, RgbColor } from '../types.js';\nimport { clampRgb } from './rgb.js';\n\nconst clampCmyk = (cmyk: CmykColor): CmykColor => ({\n c: clamp(cmyk.c, 0, 100),\n m: clamp(cmyk.m, 0, 100),\n y: clamp(cmyk.y, 0, 100),\n k: clamp(cmyk.k, 0, 100),\n alpha: clamp(cmyk.alpha, 0, 1),\n});\n\nexport const rgbToCmyk = ({ r, g, b, alpha }: RgbColor): CmykColor => {\n const k = 1 - Math.max(r / 255, g / 255, b / 255);\n if (k === 1) return { c: 0, m: 0, y: 0, k: round(100 * k), alpha };\n const c = (1 - r / 255 - k) / (1 - k);\n const m = (1 - g / 255 - k) / (1 - k);\n const y = (1 - b / 255 - k) / (1 - k);\n return {\n c: round(100 * c, 2),\n m: round(100 * m, 2),\n y: round(100 * y, 2),\n k: round(100 * k, 2),\n alpha,\n };\n};\n\nexport const cmykToRgb = ({ c, m, y, k, alpha }: CmykColor): RgbColor =>\n clampRgb({\n r: 255 * (1 - c / 100) * (1 - k / 100),\n g: 255 * (1 - m / 100) * (1 - k / 100),\n b: 255 * (1 - y / 100) * (1 - k / 100),\n alpha,\n });\n\nexport const parseCmykObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['c', 'm', 'y', 'k'])) return null;\n const { c, m, y, k, alpha = 1 } = input as { c: unknown; m: unknown; y: unknown; k: unknown; alpha?: unknown };\n if (!isAnyNumber(c) || !isAnyNumber(m) || !isAnyNumber(y) || !isAnyNumber(k) || !isAnyNumber(alpha)) return null;\n return cmykToRgb(\n clampCmyk({\n c: sanitize(c),\n m: sanitize(m),\n y: sanitize(y),\n k: sanitize(k),\n alpha: sanitize(alpha),\n })\n );\n};\n\nconst CMYK_RE = new RegExp(\n `^device-cmyk\\\\(\\\\s*(?<c>${NUM_OR_NONE})(?<cp>%?)\\\\s+(?<m>${NUM_OR_NONE})(?<mp>%?)` +\n `\\\\s+(?<y>${NUM_OR_NONE})(?<yp>%?)\\\\s+(?<k>${NUM_OR_NONE})(?<kp>%?)` +\n `\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseCmykString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = CMYK_RE.exec(input.trim())?.groups;\n if (!g) return null;\n // Numbers are treated as 0-1 fractions, percentages as 0-100; normalize both to the internal 0-100 range.\n const toPercent = (v: string, pct: string) => parseNum(v) * (pct ? 1 : 100);\n return cmykToRgb(\n clampCmyk({\n c: toPercent(g.c!, g.cp!),\n m: toPercent(g.m!, g.mp!),\n y: toPercent(g.y!, g.yp!),\n k: toPercent(g.k!, g.kp!),\n alpha: g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1),\n })\n );\n};\n","import { parseCmykObject, parseCmykString, rgbToCmyk } from '../colorModels/cmyk.js';\nimport type { Plugin } from '../colordx.js';\nimport type { CmykColor } from '../types.js';\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toCmyk(): CmykColor;\n toCmykString(): string;\n }\n}\n\nconst cmyk: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toCmyk = function () {\n return rgbToCmyk(this._rawRgb());\n };\n ColordxClass.prototype.toCmykString = function () {\n const { c, m, y, k, alpha } = this.toCmyk();\n return alpha < 1 ? `device-cmyk(${c}% ${m}% ${y}% ${k}% / ${alpha})` : `device-cmyk(${c}% ${m}% ${y}% ${k}%)`;\n };\n parsers.push(parseCmykObject, parseCmykString);\n formatParsers.push([parseCmykObject, 'cmyk'], [parseCmykString, 'cmyk']);\n};\n\nexport default cmyk;\n"]} |
@@ -1,2 +0,2 @@ | ||
| import {a}from'../chunk-OD65R6MQ.mjs';import {b as b$1,h as h$1,i as i$1,f as f$1,g as g$1,a as a$1}from'../chunk-JFPP44S3.mjs';var g=r=>({c:a$1(r.c,0,100),m:a$1(r.m,0,100),y:a$1(r.y,0,100),k:a$1(r.k,0,100),alpha:a$1(r.alpha,0,1)}),f=({r,g:o,b:t,alpha:e})=>{let n=1-Math.max(r/255,o/255,t/255);if(n===1)return {c:0,m:0,y:0,k:b$1(100*n),alpha:e};let m=(1-r/255-n)/(1-n),k=(1-o/255-n)/(1-n),u=(1-t/255-n)/(1-n);return {c:b$1(100*m,2),m:b$1(100*k,2),y:b$1(100*u,2),k:b$1(100*n,2),alpha:e}},b=({c:r,m:o,y:t,k:e,alpha:n})=>a({r:255*(1-r/100)*(1-e/100),g:255*(1-o/100)*(1-e/100),b:255*(1-t/100)*(1-e/100),alpha:n}),i=r=>{if(!h$1(r)||!i$1(r,["c","m","y","k"]))return null;let{c:o,m:t,y:e,k:n,alpha:m=1}=r;return !f$1(o)||!f$1(t)||!f$1(e)||!f$1(n)||!f$1(m)?null:b(g({c:g$1(o),m:g$1(t),y:g$1(e),k:g$1(n),alpha:g$1(m)}))},h=/^device-cmyk\(\s*([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(%?)\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,p=r=>{if(typeof r!="string")return null;let o=h.exec(r.trim());if(!o)return null;let t=(e,n)=>Number(e)*(n?1:100);return b(g({c:t(o[1],o[2]),m:t(o[3],o[4]),y:t(o[5],o[6]),k:t(o[7],o[8]),alpha:o[9]===void 0?1:Number(o[9])/(o[10]?100:1)}))};var $=(r,o,t)=>{r.prototype.toCmyk=function(){return f(this._rawRgb())},r.prototype.toCmykString=function(){let{c:e,m:n,y:m,k,alpha:u}=this.toCmyk();return u<1?`device-cmyk(${e}% ${n}% ${m}% ${k}% / ${u})`:`device-cmyk(${e}% ${n}% ${m}% ${k}%)`},o.push(i,p),t.push([i,"cmyk"],[p,"cmyk"]);},S=$;export{S as default};//# sourceMappingURL=cmyk.mjs.map | ||
| import {a as a$1}from'../chunk-Q3O3QQ4H.mjs';import {b as b$1,h as h$1,i,f,g,l,a as a$2,k}from'../chunk-IOXRZECH.mjs';var b=r=>({c:a$2(r.c,0,100),m:a$2(r.m,0,100),y:a$2(r.y,0,100),k:a$2(r.k,0,100),alpha:a$2(r.alpha,0,1)}),h=({r,g:o,b:t,alpha:m})=>{let n=1-Math.max(r/255,o/255,t/255);if(n===1)return {c:0,m:0,y:0,k:b$1(100*n),alpha:m};let e=(1-r/255-n)/(1-n),k=(1-o/255-n)/(1-n),u=(1-t/255-n)/(1-n);return {c:b$1(100*e,2),m:b$1(100*k,2),y:b$1(100*u,2),k:b$1(100*n,2),alpha:m}},d=({c:r,m:o,y:t,k:m,alpha:n})=>a$1({r:255*(1-r/100)*(1-m/100),g:255*(1-o/100)*(1-m/100),b:255*(1-t/100)*(1-m/100),alpha:n}),a=r=>{if(!h$1(r)||!i(r,["c","m","y","k"]))return null;let{c:o,m:t,y:m,k:n,alpha:e=1}=r;return !f(o)||!f(t)||!f(m)||!f(n)||!f(e)?null:d(b({c:g(o),m:g(t),y:g(m),k:g(n),alpha:g(e)}))},R=new RegExp(`^device-cmyk\\(\\s*(?<c>${k})(?<cp>%?)\\s+(?<m>${k})(?<mp>%?)\\s+(?<y>${k})(?<yp>%?)\\s+(?<k>${k})(?<kp>%?)\\s*(?:/\\s*(?<al>${k})(?<alp>%?)\\s*)?\\)$`,"i"),C=r=>{if(typeof r!="string")return null;let o=R.exec(r.trim())?.groups;if(!o)return null;let t=(m,n)=>l(m)*(n?1:100);return d(b({c:t(o.c,o.cp),m:t(o.m,o.mp),y:t(o.y,o.yp),k:t(o.k,o.kp),alpha:o.al===void 0?1:l(o.al)/(o.alp?100:1)}))};var x=(r,o,t)=>{r.prototype.toCmyk=function(){return h(this._rawRgb())},r.prototype.toCmykString=function(){let{c:m,m:n,y:e,k,alpha:u}=this.toCmyk();return u<1?`device-cmyk(${m}% ${n}% ${e}% ${k}% / ${u})`:`device-cmyk(${m}% ${n}% ${e}% ${k}%)`},o.push(a,C),t.push([a,"cmyk"],[C,"cmyk"]);},S=x;export{S as default};//# sourceMappingURL=cmyk.mjs.map | ||
| //# sourceMappingURL=cmyk.mjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/colorModels/cmyk.ts","../../src/plugins/cmyk.ts"],"names":["clampCmyk","cmyk","clamp","rgbToCmyk","g","b","alpha","k","round","c","m","y","cmykToRgb","clampRgb","parseCmykObject","input","isObject","hasKeys","isAnyNumber","sanitize","CMYK_RE","parseCmykString","toPercent","val","pct","ColordxClass","parsers","formatParsers","cmyk_default"],"mappings":"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","file":"cmyk.mjs","sourcesContent":["import { clamp, hasKeys, isAnyNumber, isObject, round, sanitize } from '../helpers.js';\nimport type { CmykColor, RgbColor } from '../types.js';\nimport { clampRgb } from './rgb.js';\n\nconst clampCmyk = (cmyk: CmykColor): CmykColor => ({\n c: clamp(cmyk.c, 0, 100),\n m: clamp(cmyk.m, 0, 100),\n y: clamp(cmyk.y, 0, 100),\n k: clamp(cmyk.k, 0, 100),\n alpha: clamp(cmyk.alpha, 0, 1),\n});\n\nexport const rgbToCmyk = ({ r, g, b, alpha }: RgbColor): CmykColor => {\n const k = 1 - Math.max(r / 255, g / 255, b / 255);\n if (k === 1) return { c: 0, m: 0, y: 0, k: round(100 * k), alpha };\n const c = (1 - r / 255 - k) / (1 - k);\n const m = (1 - g / 255 - k) / (1 - k);\n const y = (1 - b / 255 - k) / (1 - k);\n return {\n c: round(100 * c, 2),\n m: round(100 * m, 2),\n y: round(100 * y, 2),\n k: round(100 * k, 2),\n alpha,\n };\n};\n\nexport const cmykToRgb = ({ c, m, y, k, alpha }: CmykColor): RgbColor =>\n clampRgb({\n r: 255 * (1 - c / 100) * (1 - k / 100),\n g: 255 * (1 - m / 100) * (1 - k / 100),\n b: 255 * (1 - y / 100) * (1 - k / 100),\n alpha,\n });\n\nexport const parseCmykObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['c', 'm', 'y', 'k'])) return null;\n const { c, m, y, k, alpha = 1 } = input as { c: unknown; m: unknown; y: unknown; k: unknown; alpha?: unknown };\n if (!isAnyNumber(c) || !isAnyNumber(m) || !isAnyNumber(y) || !isAnyNumber(k) || !isAnyNumber(alpha)) return null;\n return cmykToRgb(\n clampCmyk({\n c: sanitize(c),\n m: sanitize(m),\n y: sanitize(y),\n k: sanitize(k),\n alpha: sanitize(alpha),\n })\n );\n};\n\nconst CMYK_RE =\n /^device-cmyk\\(\\s*([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(%?)\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nexport const parseCmykString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = CMYK_RE.exec(input.trim());\n if (!m) return null;\n const toPercent = (val: string, pct: string) => Number(val) * (pct ? 1 : 100);\n return cmykToRgb(\n clampCmyk({\n c: toPercent(m[1]!, m[2]!),\n m: toPercent(m[3]!, m[4]!),\n y: toPercent(m[5]!, m[6]!),\n k: toPercent(m[7]!, m[8]!),\n alpha: m[9] === undefined ? 1 : Number(m[9]) / (m[10] ? 100 : 1),\n })\n );\n};\n","import { parseCmykObject, parseCmykString, rgbToCmyk } from '../colorModels/cmyk.js';\nimport type { Plugin } from '../colordx.js';\nimport type { CmykColor } from '../types.js';\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toCmyk(): CmykColor;\n toCmykString(): string;\n }\n}\n\nconst cmyk: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toCmyk = function () {\n return rgbToCmyk(this._rawRgb());\n };\n ColordxClass.prototype.toCmykString = function () {\n const { c, m, y, k, alpha } = this.toCmyk();\n return alpha < 1 ? `device-cmyk(${c}% ${m}% ${y}% ${k}% / ${alpha})` : `device-cmyk(${c}% ${m}% ${y}% ${k}%)`;\n };\n parsers.push(parseCmykObject, parseCmykString);\n formatParsers.push([parseCmykObject, 'cmyk'], [parseCmykString, 'cmyk']);\n};\n\nexport default cmyk;\n"]} | ||
| {"version":3,"sources":["../../src/colorModels/cmyk.ts","../../src/plugins/cmyk.ts"],"names":["clampCmyk","cmyk","clamp","rgbToCmyk","g","b","alpha","k","round","c","m","y","cmykToRgb","clampRgb","parseCmykObject","input","isObject","hasKeys","isAnyNumber","sanitize","CMYK_RE","NUM_OR_NONE","parseCmykString","toPercent","v","pct","parseNum","ColordxClass","parsers","formatParsers","cmyk_default"],"mappings":"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","file":"cmyk.mjs","sourcesContent":["import { NUM_OR_NONE, clamp, hasKeys, isAnyNumber, isObject, parseNum, round, sanitize } from '../helpers.js';\nimport type { CmykColor, RgbColor } from '../types.js';\nimport { clampRgb } from './rgb.js';\n\nconst clampCmyk = (cmyk: CmykColor): CmykColor => ({\n c: clamp(cmyk.c, 0, 100),\n m: clamp(cmyk.m, 0, 100),\n y: clamp(cmyk.y, 0, 100),\n k: clamp(cmyk.k, 0, 100),\n alpha: clamp(cmyk.alpha, 0, 1),\n});\n\nexport const rgbToCmyk = ({ r, g, b, alpha }: RgbColor): CmykColor => {\n const k = 1 - Math.max(r / 255, g / 255, b / 255);\n if (k === 1) return { c: 0, m: 0, y: 0, k: round(100 * k), alpha };\n const c = (1 - r / 255 - k) / (1 - k);\n const m = (1 - g / 255 - k) / (1 - k);\n const y = (1 - b / 255 - k) / (1 - k);\n return {\n c: round(100 * c, 2),\n m: round(100 * m, 2),\n y: round(100 * y, 2),\n k: round(100 * k, 2),\n alpha,\n };\n};\n\nexport const cmykToRgb = ({ c, m, y, k, alpha }: CmykColor): RgbColor =>\n clampRgb({\n r: 255 * (1 - c / 100) * (1 - k / 100),\n g: 255 * (1 - m / 100) * (1 - k / 100),\n b: 255 * (1 - y / 100) * (1 - k / 100),\n alpha,\n });\n\nexport const parseCmykObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['c', 'm', 'y', 'k'])) return null;\n const { c, m, y, k, alpha = 1 } = input as { c: unknown; m: unknown; y: unknown; k: unknown; alpha?: unknown };\n if (!isAnyNumber(c) || !isAnyNumber(m) || !isAnyNumber(y) || !isAnyNumber(k) || !isAnyNumber(alpha)) return null;\n return cmykToRgb(\n clampCmyk({\n c: sanitize(c),\n m: sanitize(m),\n y: sanitize(y),\n k: sanitize(k),\n alpha: sanitize(alpha),\n })\n );\n};\n\nconst CMYK_RE = new RegExp(\n `^device-cmyk\\\\(\\\\s*(?<c>${NUM_OR_NONE})(?<cp>%?)\\\\s+(?<m>${NUM_OR_NONE})(?<mp>%?)` +\n `\\\\s+(?<y>${NUM_OR_NONE})(?<yp>%?)\\\\s+(?<k>${NUM_OR_NONE})(?<kp>%?)` +\n `\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseCmykString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = CMYK_RE.exec(input.trim())?.groups;\n if (!g) return null;\n // Numbers are treated as 0-1 fractions, percentages as 0-100; normalize both to the internal 0-100 range.\n const toPercent = (v: string, pct: string) => parseNum(v) * (pct ? 1 : 100);\n return cmykToRgb(\n clampCmyk({\n c: toPercent(g.c!, g.cp!),\n m: toPercent(g.m!, g.mp!),\n y: toPercent(g.y!, g.yp!),\n k: toPercent(g.k!, g.kp!),\n alpha: g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1),\n })\n );\n};\n","import { parseCmykObject, parseCmykString, rgbToCmyk } from '../colorModels/cmyk.js';\nimport type { Plugin } from '../colordx.js';\nimport type { CmykColor } from '../types.js';\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toCmyk(): CmykColor;\n toCmykString(): string;\n }\n}\n\nconst cmyk: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toCmyk = function () {\n return rgbToCmyk(this._rawRgb());\n };\n ColordxClass.prototype.toCmykString = function () {\n const { c, m, y, k, alpha } = this.toCmyk();\n return alpha < 1 ? `device-cmyk(${c}% ${m}% ${y}% ${k}% / ${alpha})` : `device-cmyk(${c}% ${m}% ${y}% ${k}%)`;\n };\n parsers.push(parseCmykObject, parseCmykString);\n formatParsers.push([parseCmykObject, 'cmyk'], [parseCmykString, 'cmyk']);\n};\n\nexport default cmyk;\n"]} |
@@ -1,2 +0,2 @@ | ||
| 'use strict';var chunkKP3R2XXN_cjs=require('../chunk-KP3R2XXN.cjs');require('../chunk-GYCEEHZT.cjs'),require('../chunk-EXPXWBLP.cjs');var l=(r,p,h)=>{r.prototype.toHsv=function(){return chunkKP3R2XXN_cjs.b(this._rawRgb())},r.prototype.toHsvString=function(){let{h:s,s:e,v:i,alpha:v}=this.toHsv();return v<1?`hsva(${s}, ${e}%, ${i}%, ${v})`:`hsv(${s}, ${e}%, ${i}%)`},p.push(chunkKP3R2XXN_cjs.d,chunkKP3R2XXN_cjs.e),h.push([chunkKP3R2XXN_cjs.d,"hsv"],[chunkKP3R2XXN_cjs.e,"hsv"]);},c=l;module.exports=c;//# sourceMappingURL=hsv.cjs.map | ||
| 'use strict';var chunkPEAYLEZO_cjs=require('../chunk-PEAYLEZO.cjs');require('../chunk-3V4MONNR.cjs'),require('../chunk-YISEJCI6.cjs');var l=(r,p,h)=>{r.prototype.toHsv=function(){return chunkPEAYLEZO_cjs.b(this._rawRgb())},r.prototype.toHsvString=function(){let{h:s,s:e,v:i,alpha:v}=this.toHsv();return v<1?`hsv(${s} ${e}% ${i}% / ${v})`:`hsv(${s} ${e}% ${i}%)`},p.push(chunkPEAYLEZO_cjs.d,chunkPEAYLEZO_cjs.e),h.push([chunkPEAYLEZO_cjs.d,"hsv"],[chunkPEAYLEZO_cjs.e,"hsv"]);},c=l;module.exports=c;//# sourceMappingURL=hsv.cjs.map | ||
| //# sourceMappingURL=hsv.cjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/plugins/hsv.ts"],"names":["hsv","ColordxClass","parsers","formatParsers","rgbToHsv","h","s","v","alpha","parseHsvString","parseHsvObject","hsv_default"],"mappings":"sIAYA,IAAMA,CAAAA,CAAc,CAACC,CAAAA,CAAcC,CAAAA,CAASC,IAAkB,CAC5DF,CAAAA,CAAa,SAAA,CAAU,KAAA,CAAQ,UAAmC,CAChE,OAAOG,mBAAAA,CAAS,IAAA,CAAK,SAAS,CAChC,CAAA,CAEAH,CAAAA,CAAa,UAAU,WAAA,CAAc,UAAiC,CACpE,GAAM,CAAE,CAAA,CAAAI,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,EAAAC,CAAAA,CAAG,KAAA,CAAAC,CAAM,CAAA,CAAI,KAAK,KAAA,EAAM,CACtC,OAAOA,CAAAA,CAAQ,CAAA,CAAI,CAAA,KAAA,EAAQH,CAAC,CAAA,EAAA,EAAKC,CAAC,CAAA,GAAA,EAAMC,CAAC,CAAA,GAAA,EAAMC,CAAK,IAAM,CAAA,IAAA,EAAOH,CAAC,CAAA,EAAA,EAAKC,CAAC,MAAMC,CAAC,CAAA,EAAA,CACjF,CAAA,CAEAL,CAAAA,CAAQ,KAAKO,mBAAAA,CAAgBC,mBAAc,CAAA,CAC3CP,CAAAA,CAAc,KAAK,CAACM,mBAAAA,CAAgB,KAAK,CAAA,CAAG,CAACC,mBAAAA,CAAgB,KAAK,CAAC,EACrE,EAEOC,CAAAA,CAAQX","file":"hsv.cjs","sourcesContent":["import { parseHsvObject, parseHsvString, rgbToHsv } from '../colorModels/hsv.js';\nimport type { Colordx, Plugin } from '../colordx.js';\nimport type { HsvColor } from '../types.js';\n\n// HSV/HSVA is a non-standard, library-defined format (not part of any CSS spec).\ndeclare module '@colordx/core' {\n interface Colordx {\n toHsv(): HsvColor;\n toHsvString(): string;\n }\n}\n\nconst hsv: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toHsv = function (this: Colordx): HsvColor {\n return rgbToHsv(this._rawRgb());\n };\n\n ColordxClass.prototype.toHsvString = function (this: Colordx): string {\n const { h, s, v, alpha } = this.toHsv();\n return alpha < 1 ? `hsva(${h}, ${s}%, ${v}%, ${alpha})` : `hsv(${h}, ${s}%, ${v}%)`;\n };\n\n parsers.push(parseHsvString, parseHsvObject);\n formatParsers.push([parseHsvString, 'hsv'], [parseHsvObject, 'hsv']);\n};\n\nexport default hsv;\n"]} | ||
| {"version":3,"sources":["../../src/plugins/hsv.ts"],"names":["hsv","ColordxClass","parsers","formatParsers","rgbToHsv","h","s","v","alpha","parseHsvString","parseHsvObject","hsv_default"],"mappings":"sIAYA,IAAMA,CAAAA,CAAc,CAACC,CAAAA,CAAcC,CAAAA,CAASC,IAAkB,CAC5DF,CAAAA,CAAa,SAAA,CAAU,KAAA,CAAQ,UAAmC,CAChE,OAAOG,mBAAAA,CAAS,IAAA,CAAK,SAAS,CAChC,CAAA,CAEAH,CAAAA,CAAa,UAAU,WAAA,CAAc,UAAiC,CACpE,GAAM,CAAE,CAAA,CAAAI,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,EAAAC,CAAAA,CAAG,KAAA,CAAAC,CAAM,CAAA,CAAI,KAAK,KAAA,EAAM,CACtC,OAAOA,CAAAA,CAAQ,CAAA,CAAI,CAAA,IAAA,EAAOH,CAAC,CAAA,CAAA,EAAIC,CAAC,CAAA,EAAA,EAAKC,CAAC,CAAA,IAAA,EAAOC,CAAK,IAAM,CAAA,IAAA,EAAOH,CAAC,CAAA,CAAA,EAAIC,CAAC,KAAKC,CAAC,CAAA,EAAA,CAC7E,CAAA,CAEAL,CAAAA,CAAQ,KAAKO,mBAAAA,CAAgBC,mBAAc,CAAA,CAC3CP,CAAAA,CAAc,KAAK,CAACM,mBAAAA,CAAgB,KAAK,CAAA,CAAG,CAACC,mBAAAA,CAAgB,KAAK,CAAC,EACrE,EAEOC,CAAAA,CAAQX","file":"hsv.cjs","sourcesContent":["import { parseHsvObject, parseHsvString, rgbToHsv } from '../colorModels/hsv.js';\nimport type { Colordx, Plugin } from '../colordx.js';\nimport type { HsvColor } from '../types.js';\n\n// HSV/HSVA is a non-standard, library-defined format (not part of any CSS spec).\ndeclare module '@colordx/core' {\n interface Colordx {\n toHsv(): HsvColor;\n toHsvString(): string;\n }\n}\n\nconst hsv: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toHsv = function (this: Colordx): HsvColor {\n return rgbToHsv(this._rawRgb());\n };\n\n ColordxClass.prototype.toHsvString = function (this: Colordx): string {\n const { h, s, v, alpha } = this.toHsv();\n return alpha < 1 ? `hsv(${h} ${s}% ${v}% / ${alpha})` : `hsv(${h} ${s}% ${v}%)`;\n };\n\n parsers.push(parseHsvString, parseHsvObject);\n formatParsers.push([parseHsvString, 'hsv'], [parseHsvObject, 'hsv']);\n};\n\nexport default hsv;\n"]} |
@@ -1,2 +0,2 @@ | ||
| import {b,d,e}from'../chunk-OYLVEKC4.mjs';import'../chunk-OD65R6MQ.mjs';import'../chunk-JFPP44S3.mjs';var l=(r,p,h)=>{r.prototype.toHsv=function(){return b(this._rawRgb())},r.prototype.toHsvString=function(){let{h:s,s:e,v:i,alpha:v}=this.toHsv();return v<1?`hsva(${s}, ${e}%, ${i}%, ${v})`:`hsv(${s}, ${e}%, ${i}%)`},p.push(d,e),h.push([d,"hsv"],[e,"hsv"]);},c=l;export{c as default};//# sourceMappingURL=hsv.mjs.map | ||
| import {b,d,e}from'../chunk-YCE2ZDOI.mjs';import'../chunk-Q3O3QQ4H.mjs';import'../chunk-IOXRZECH.mjs';var l=(r,p,h)=>{r.prototype.toHsv=function(){return b(this._rawRgb())},r.prototype.toHsvString=function(){let{h:s,s:e,v:i,alpha:v}=this.toHsv();return v<1?`hsv(${s} ${e}% ${i}% / ${v})`:`hsv(${s} ${e}% ${i}%)`},p.push(d,e),h.push([d,"hsv"],[e,"hsv"]);},c=l;export{c as default};//# sourceMappingURL=hsv.mjs.map | ||
| //# sourceMappingURL=hsv.mjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/plugins/hsv.ts"],"names":["hsv","ColordxClass","parsers","formatParsers","rgbToHsv","h","s","v","alpha","parseHsvString","parseHsvObject","hsv_default"],"mappings":"sGAYA,IAAMA,CAAAA,CAAc,CAACC,CAAAA,CAAcC,CAAAA,CAASC,IAAkB,CAC5DF,CAAAA,CAAa,SAAA,CAAU,KAAA,CAAQ,UAAmC,CAChE,OAAOG,CAAAA,CAAS,IAAA,CAAK,SAAS,CAChC,CAAA,CAEAH,CAAAA,CAAa,UAAU,WAAA,CAAc,UAAiC,CACpE,GAAM,CAAE,CAAA,CAAAI,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,EAAAC,CAAAA,CAAG,KAAA,CAAAC,CAAM,CAAA,CAAI,KAAK,KAAA,EAAM,CACtC,OAAOA,CAAAA,CAAQ,CAAA,CAAI,CAAA,KAAA,EAAQH,CAAC,CAAA,EAAA,EAAKC,CAAC,CAAA,GAAA,EAAMC,CAAC,CAAA,GAAA,EAAMC,CAAK,IAAM,CAAA,IAAA,EAAOH,CAAC,CAAA,EAAA,EAAKC,CAAC,MAAMC,CAAC,CAAA,EAAA,CACjF,CAAA,CAEAL,CAAAA,CAAQ,KAAKO,CAAAA,CAAgBC,CAAc,CAAA,CAC3CP,CAAAA,CAAc,KAAK,CAACM,CAAAA,CAAgB,KAAK,CAAA,CAAG,CAACC,CAAAA,CAAgB,KAAK,CAAC,EACrE,EAEOC,CAAAA,CAAQX","file":"hsv.mjs","sourcesContent":["import { parseHsvObject, parseHsvString, rgbToHsv } from '../colorModels/hsv.js';\nimport type { Colordx, Plugin } from '../colordx.js';\nimport type { HsvColor } from '../types.js';\n\n// HSV/HSVA is a non-standard, library-defined format (not part of any CSS spec).\ndeclare module '@colordx/core' {\n interface Colordx {\n toHsv(): HsvColor;\n toHsvString(): string;\n }\n}\n\nconst hsv: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toHsv = function (this: Colordx): HsvColor {\n return rgbToHsv(this._rawRgb());\n };\n\n ColordxClass.prototype.toHsvString = function (this: Colordx): string {\n const { h, s, v, alpha } = this.toHsv();\n return alpha < 1 ? `hsva(${h}, ${s}%, ${v}%, ${alpha})` : `hsv(${h}, ${s}%, ${v}%)`;\n };\n\n parsers.push(parseHsvString, parseHsvObject);\n formatParsers.push([parseHsvString, 'hsv'], [parseHsvObject, 'hsv']);\n};\n\nexport default hsv;\n"]} | ||
| {"version":3,"sources":["../../src/plugins/hsv.ts"],"names":["hsv","ColordxClass","parsers","formatParsers","rgbToHsv","h","s","v","alpha","parseHsvString","parseHsvObject","hsv_default"],"mappings":"sGAYA,IAAMA,CAAAA,CAAc,CAACC,CAAAA,CAAcC,CAAAA,CAASC,IAAkB,CAC5DF,CAAAA,CAAa,SAAA,CAAU,KAAA,CAAQ,UAAmC,CAChE,OAAOG,CAAAA,CAAS,IAAA,CAAK,SAAS,CAChC,CAAA,CAEAH,CAAAA,CAAa,UAAU,WAAA,CAAc,UAAiC,CACpE,GAAM,CAAE,CAAA,CAAAI,CAAAA,CAAG,CAAA,CAAAC,CAAAA,CAAG,EAAAC,CAAAA,CAAG,KAAA,CAAAC,CAAM,CAAA,CAAI,KAAK,KAAA,EAAM,CACtC,OAAOA,CAAAA,CAAQ,CAAA,CAAI,CAAA,IAAA,EAAOH,CAAC,CAAA,CAAA,EAAIC,CAAC,CAAA,EAAA,EAAKC,CAAC,CAAA,IAAA,EAAOC,CAAK,IAAM,CAAA,IAAA,EAAOH,CAAC,CAAA,CAAA,EAAIC,CAAC,KAAKC,CAAC,CAAA,EAAA,CAC7E,CAAA,CAEAL,CAAAA,CAAQ,KAAKO,CAAAA,CAAgBC,CAAc,CAAA,CAC3CP,CAAAA,CAAc,KAAK,CAACM,CAAAA,CAAgB,KAAK,CAAA,CAAG,CAACC,CAAAA,CAAgB,KAAK,CAAC,EACrE,EAEOC,CAAAA,CAAQX","file":"hsv.mjs","sourcesContent":["import { parseHsvObject, parseHsvString, rgbToHsv } from '../colorModels/hsv.js';\nimport type { Colordx, Plugin } from '../colordx.js';\nimport type { HsvColor } from '../types.js';\n\n// HSV/HSVA is a non-standard, library-defined format (not part of any CSS spec).\ndeclare module '@colordx/core' {\n interface Colordx {\n toHsv(): HsvColor;\n toHsvString(): string;\n }\n}\n\nconst hsv: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toHsv = function (this: Colordx): HsvColor {\n return rgbToHsv(this._rawRgb());\n };\n\n ColordxClass.prototype.toHsvString = function (this: Colordx): string {\n const { h, s, v, alpha } = this.toHsv();\n return alpha < 1 ? `hsv(${h} ${s}% ${v}% / ${alpha})` : `hsv(${h} ${s}% ${v}%)`;\n };\n\n parsers.push(parseHsvString, parseHsvObject);\n formatParsers.push([parseHsvString, 'hsv'], [parseHsvObject, 'hsv']);\n};\n\nexport default hsv;\n"]} |
@@ -1,2 +0,2 @@ | ||
| 'use strict';var chunkKP3R2XXN_cjs=require('../chunk-KP3R2XXN.cjs');require('../chunk-GYCEEHZT.cjs');var chunkEXPXWBLP_cjs=require('../chunk-EXPXWBLP.cjs');var i=o=>{let r=chunkEXPXWBLP_cjs.a(o.w,0,1/0),t=chunkEXPXWBLP_cjs.a(o.b,0,1/0),n=r+t;return {h:chunkEXPXWBLP_cjs.c(o.h),w:n>100?r/n*100:r,b:n>100?t/n*100:t,alpha:chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.b(o.alpha,3),0,1)}};var x=o=>{let{h:r}=chunkKP3R2XXN_cjs.a(o);return i({h:r,w:Math.min(o.r,o.g,o.b)/255*100,b:100-Math.max(o.r,o.g,o.b)/255*100,alpha:o.alpha})},y=({h:o,w:r,b:t,alpha:n})=>{let e=t===100?0:100-r/(100-t)*100;return chunkKP3R2XXN_cjs.c({h:o,s:e,v:100-t,alpha:n})},h=o=>{if(!chunkEXPXWBLP_cjs.h(o)||!chunkEXPXWBLP_cjs.i(o,["h","w","b"]))return null;let{h:r,w:t,b:n,alpha:e=1}=o;return !chunkEXPXWBLP_cjs.f(r)||!chunkEXPXWBLP_cjs.f(t)||!chunkEXPXWBLP_cjs.f(n)||!chunkEXPXWBLP_cjs.f(e)?null:y(i({h:chunkEXPXWBLP_cjs.g(r),w:chunkEXPXWBLP_cjs.g(t),b:chunkEXPXWBLP_cjs.g(n),alpha:chunkEXPXWBLP_cjs.g(e)}))},R=/^hwb\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,c=o=>{if(typeof o!="string")return null;let r=R.exec(o.trim());if(!r)return null;let t=r[2]?.toLowerCase()??"deg",n=Number(r[1])*(chunkEXPXWBLP_cjs.d[t]??1),e=r[5]===void 0?1:Number(r[5])/(r[6]?100:1);return y(i({h:n,w:Number(r[3]),b:Number(r[4]),alpha:e}))};var $=(o,r,t)=>{o.prototype.toHwb=function(n=0){let{h:e,w,b:a,alpha:u}=x(this._rawRgb());return {h:chunkEXPXWBLP_cjs.b(e,n),w:chunkEXPXWBLP_cjs.b(w,n),b:chunkEXPXWBLP_cjs.b(a,n),alpha:chunkEXPXWBLP_cjs.b(u,3)}},o.prototype.toHwbString=function(n=0){let{h:e,w,b:a,alpha:u}=this.toHwb(n);return u<1?`hwb(${e} ${w}% ${a}% / ${u})`:`hwb(${e} ${w}% ${a}%)`},r.push(c,h),t.push([c,"hwb"],[h,"hwb"]);},v=$;module.exports=v;//# sourceMappingURL=hwb.cjs.map | ||
| 'use strict';var chunkPEAYLEZO_cjs=require('../chunk-PEAYLEZO.cjs');require('../chunk-3V4MONNR.cjs');var chunkYISEJCI6_cjs=require('../chunk-YISEJCI6.cjs');var c=o=>{let r=chunkYISEJCI6_cjs.a(o.w,0,1/0),t=chunkYISEJCI6_cjs.a(o.b,0,1/0),n=r+t;return {h:chunkYISEJCI6_cjs.c(o.h),w:n>100?r/n*100:r,b:n>100?t/n*100:t,alpha:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.b(o.alpha,3),0,1)}};var R=o=>{let{h:r}=chunkPEAYLEZO_cjs.a(o);return c({h:r,w:Math.min(o.r,o.g,o.b)/255*100,b:100-Math.max(o.r,o.g,o.b)/255*100,alpha:o.alpha})},$=({h:o,w:r,b:t,alpha:n})=>{let e=t===100?0:100-r/(100-t)*100;return chunkPEAYLEZO_cjs.c({h:o,s:e,v:100-t,alpha:n})},m=o=>{if(!chunkYISEJCI6_cjs.h(o)||!chunkYISEJCI6_cjs.i(o,["h","w","b"]))return null;let{h:r,w:t,b:n,alpha:e=1}=o;return !chunkYISEJCI6_cjs.f(r)||!chunkYISEJCI6_cjs.f(t)||!chunkYISEJCI6_cjs.f(n)||!chunkYISEJCI6_cjs.f(e)?null:$(c({h:chunkYISEJCI6_cjs.g(r),w:chunkYISEJCI6_cjs.g(t),b:chunkYISEJCI6_cjs.g(n),alpha:chunkYISEJCI6_cjs.g(e)}))},N=new RegExp(`^hwb\\(\\s*(?<h>${chunkYISEJCI6_cjs.k})(?<hu>deg|rad|grad|turn)?\\s+(?<w>${chunkYISEJCI6_cjs.k})(?<wp>%?)\\s+(?<b>${chunkYISEJCI6_cjs.k})(?<bp>%?)\\s*(?:/\\s*(?<al>${chunkYISEJCI6_cjs.k})(?<alp>%?)\\s*)?\\)$`,"i"),H=o=>{if(typeof o!="string")return null;let r=N.exec(o.trim())?.groups;if(!r)return null;let t=r.hu?.toLowerCase()??"deg",n=chunkYISEJCI6_cjs.l(r.h)*(chunkYISEJCI6_cjs.d[t]??1),e=chunkYISEJCI6_cjs.l(r.w),s=chunkYISEJCI6_cjs.l(r.b),a=r.al===void 0?1:chunkYISEJCI6_cjs.l(r.al)/(r.alp?100:1);return $(c({h:n,w:e,b:s,alpha:a}))};var j=(o,r,t)=>{o.prototype.toHwb=function(n=0){let{h:e,w:s,b:a,alpha:h}=R(this._rawRgb());return {h:chunkYISEJCI6_cjs.b(e,n),w:chunkYISEJCI6_cjs.b(s,n),b:chunkYISEJCI6_cjs.b(a,n),alpha:chunkYISEJCI6_cjs.b(h,3)}},o.prototype.toHwbString=function(n=0){let{h:e,w:s,b:a,alpha:h}=this.toHwb(n);return h<1?`hwb(${e} ${s}% ${a}% / ${h})`:`hwb(${e} ${s}% ${a}%)`},r.push(H,m),t.push([H,"hwb"],[m,"hwb"]);},E=j;module.exports=E;//# sourceMappingURL=hwb.cjs.map | ||
| //# sourceMappingURL=hwb.cjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/colorModels/hwb.ts","../../src/plugins/hwb.ts"],"names":["clampHwb","hwb","w","clamp","b","sum","normalizeHue","round","rgbToHwb","rgb","h","rgbToHsvRaw","hwbToRgb","alpha","s","hsvToRgb","parseHwbObject","input","isObject","hasKeys","isAnyNumber","sanitize","HWB_RE","parseHwbString","m","unit","ANGLE_UNITS","ColordxClass","parsers","formatParsers","precision","hwb_default"],"mappings":"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","file":"hwb.cjs","sourcesContent":["import { ANGLE_UNITS, clamp, hasKeys, isAnyNumber, isObject, normalizeHue, round, sanitize } from '../helpers.js';\nimport type { HwbColor, RgbColor } from '../types.js';\nimport { hsvToRgb, rgbToHsvRaw } from './hsv.js';\n\nexport const clampHwb = (hwb: HwbColor): HwbColor => {\n // Infinity upper bound = reject negatives only; proportional normalization handles w+b > 100 below.\n const w = clamp(hwb.w, 0, Infinity);\n const b = clamp(hwb.b, 0, Infinity);\n const sum = w + b;\n return {\n h: normalizeHue(hwb.h),\n w: sum > 100 ? (w / sum) * 100 : w,\n b: sum > 100 ? (b / sum) * 100 : b,\n alpha: clamp(round(hwb.alpha, 3), 0, 1),\n };\n};\n\nexport const roundHwb = (hwb: HwbColor): HwbColor => ({\n h: round(hwb.h),\n w: round(hwb.w),\n b: round(hwb.b),\n alpha: round(hwb.alpha, 3),\n});\n\nexport const rgbToHwb = (rgb: RgbColor): HwbColor => {\n const { h } = rgbToHsvRaw(rgb);\n return clampHwb({\n h,\n w: (Math.min(rgb.r, rgb.g, rgb.b) / 255) * 100,\n b: 100 - (Math.max(rgb.r, rgb.g, rgb.b) / 255) * 100,\n alpha: rgb.alpha,\n });\n};\n\n// Precondition: w + b must be ≤ 100. Call clampHwb first — direct use with unnormalized values\n// produces negative saturation and incorrect output.\nexport const hwbToRgb = ({ h, w, b, alpha }: HwbColor): RgbColor => {\n const s = b === 100 ? 0 : 100 - (w / (100 - b)) * 100;\n return hsvToRgb({ h, s, v: 100 - b, alpha });\n};\n\nexport const parseHwbObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['h', 'w', 'b'])) return null;\n const { h, w, b, alpha = 1 } = input as { h: unknown; w: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(h) || !isAnyNumber(w) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return hwbToRgb(clampHwb({ h: sanitize(h), w: sanitize(w), b: sanitize(b), alpha: sanitize(alpha) }));\n};\n\nconst HWB_RE =\n /^hwb\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s+([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)%\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nexport const parseHwbString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = HWB_RE.exec(input.trim());\n if (!m) return null;\n const unit = m[2]?.toLowerCase() ?? 'deg';\n const h = Number(m[1]) * (ANGLE_UNITS[unit] ?? 1);\n const alpha = m[5] === undefined ? 1 : Number(m[5]) / (m[6] ? 100 : 1);\n return hwbToRgb(clampHwb({ h, w: Number(m[3]), b: Number(m[4]), alpha }));\n};\n","import { parseHwbObject, parseHwbString, rgbToHwb } from '../colorModels/hwb.js';\nimport type { Colordx, Plugin } from '../colordx.js';\nimport { round } from '../helpers.js';\nimport type { HwbColor } from '../types.js';\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toHwb(precision?: number): HwbColor;\n toHwbString(precision?: number): string;\n }\n}\n\nconst hwb: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toHwb = function (this: Colordx, precision = 0): HwbColor {\n const { h, w, b, alpha } = rgbToHwb(this._rawRgb());\n return { h: round(h, precision), w: round(w, precision), b: round(b, precision), alpha: round(alpha, 3) };\n };\n ColordxClass.prototype.toHwbString = function (this: Colordx, precision = 0): string {\n const { h, w, b, alpha } = this.toHwb(precision);\n return alpha < 1 ? `hwb(${h} ${w}% ${b}% / ${alpha})` : `hwb(${h} ${w}% ${b}%)`;\n };\n parsers.push(parseHwbString, parseHwbObject);\n formatParsers.push([parseHwbString, 'hwb'], [parseHwbObject, 'hwb']);\n};\n\nexport default hwb;\n"]} | ||
| {"version":3,"sources":["../../src/colorModels/hwb.ts","../../src/plugins/hwb.ts"],"names":["clampHwb","hwb","w","clamp","b","sum","normalizeHue","round","rgbToHwb","rgb","h","rgbToHsvRaw","hwbToRgb","alpha","s","hsvToRgb","parseHwbObject","input","isObject","hasKeys","isAnyNumber","sanitize","HWB_RE","NUM_OR_NONE","parseHwbString","g","unit","parseNum","ANGLE_UNITS","ColordxClass","parsers","formatParsers","precision","hwb_default"],"mappings":"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","file":"hwb.cjs","sourcesContent":["import {\n ANGLE_UNITS,\n NUM_OR_NONE,\n clamp,\n hasKeys,\n isAnyNumber,\n isObject,\n normalizeHue,\n parseNum,\n round,\n sanitize,\n} from '../helpers.js';\nimport type { HwbColor, RgbColor } from '../types.js';\nimport { hsvToRgb, rgbToHsvRaw } from './hsv.js';\n\nexport const clampHwb = (hwb: HwbColor): HwbColor => {\n // Infinity upper bound = reject negatives only; proportional normalization handles w+b > 100 below.\n const w = clamp(hwb.w, 0, Infinity);\n const b = clamp(hwb.b, 0, Infinity);\n const sum = w + b;\n return {\n h: normalizeHue(hwb.h),\n w: sum > 100 ? (w / sum) * 100 : w,\n b: sum > 100 ? (b / sum) * 100 : b,\n alpha: clamp(round(hwb.alpha, 3), 0, 1),\n };\n};\n\nexport const roundHwb = (hwb: HwbColor): HwbColor => ({\n h: round(hwb.h),\n w: round(hwb.w),\n b: round(hwb.b),\n alpha: round(hwb.alpha, 3),\n});\n\nexport const rgbToHwb = (rgb: RgbColor): HwbColor => {\n const { h } = rgbToHsvRaw(rgb);\n return clampHwb({\n h,\n w: (Math.min(rgb.r, rgb.g, rgb.b) / 255) * 100,\n b: 100 - (Math.max(rgb.r, rgb.g, rgb.b) / 255) * 100,\n alpha: rgb.alpha,\n });\n};\n\n// Precondition: w + b must be ≤ 100. Call clampHwb first — direct use with unnormalized values\n// produces negative saturation and incorrect output.\nexport const hwbToRgb = ({ h, w, b, alpha }: HwbColor): RgbColor => {\n const s = b === 100 ? 0 : 100 - (w / (100 - b)) * 100;\n return hsvToRgb({ h, s, v: 100 - b, alpha });\n};\n\nexport const parseHwbObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['h', 'w', 'b'])) return null;\n const { h, w, b, alpha = 1 } = input as { h: unknown; w: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(h) || !isAnyNumber(w) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return hwbToRgb(clampHwb({ h: sanitize(h), w: sanitize(w), b: sanitize(b), alpha: sanitize(alpha) }));\n};\n\nconst HWB_RE = new RegExp(\n `^hwb\\\\(\\\\s*(?<h>${NUM_OR_NONE})(?<hu>deg|rad|grad|turn)?\\\\s+` +\n `(?<w>${NUM_OR_NONE})(?<wp>%?)\\\\s+(?<b>${NUM_OR_NONE})(?<bp>%?)` +\n `\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseHwbString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = HWB_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const unit = g.hu?.toLowerCase() ?? 'deg';\n const h = parseNum(g.h!) * (ANGLE_UNITS[unit] ?? 1);\n const w = parseNum(g.w!);\n const b = parseNum(g.b!);\n const alpha = g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1);\n return hwbToRgb(clampHwb({ h, w, b, alpha }));\n};\n","import { parseHwbObject, parseHwbString, rgbToHwb } from '../colorModels/hwb.js';\nimport type { Colordx, Plugin } from '../colordx.js';\nimport { round } from '../helpers.js';\nimport type { HwbColor } from '../types.js';\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toHwb(precision?: number): HwbColor;\n toHwbString(precision?: number): string;\n }\n}\n\nconst hwb: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toHwb = function (this: Colordx, precision = 0): HwbColor {\n const { h, w, b, alpha } = rgbToHwb(this._rawRgb());\n return { h: round(h, precision), w: round(w, precision), b: round(b, precision), alpha: round(alpha, 3) };\n };\n ColordxClass.prototype.toHwbString = function (this: Colordx, precision = 0): string {\n const { h, w, b, alpha } = this.toHwb(precision);\n return alpha < 1 ? `hwb(${h} ${w}% ${b}% / ${alpha})` : `hwb(${h} ${w}% ${b}%)`;\n };\n parsers.push(parseHwbString, parseHwbObject);\n formatParsers.push([parseHwbString, 'hwb'], [parseHwbObject, 'hwb']);\n};\n\nexport default hwb;\n"]} |
@@ -1,2 +0,2 @@ | ||
| import {a,c as c$2}from'../chunk-OYLVEKC4.mjs';import'../chunk-OD65R6MQ.mjs';import {b,d,h as h$1,i as i$1,f,g,a as a$1,c as c$1}from'../chunk-JFPP44S3.mjs';var i=o=>{let r=a$1(o.w,0,1/0),t=a$1(o.b,0,1/0),n=r+t;return {h:c$1(o.h),w:n>100?r/n*100:r,b:n>100?t/n*100:t,alpha:a$1(b(o.alpha,3),0,1)}};var x=o=>{let{h:r}=a(o);return i({h:r,w:Math.min(o.r,o.g,o.b)/255*100,b:100-Math.max(o.r,o.g,o.b)/255*100,alpha:o.alpha})},y=({h:o,w:r,b:t,alpha:n})=>{let e=t===100?0:100-r/(100-t)*100;return c$2({h:o,s:e,v:100-t,alpha:n})},h=o=>{if(!h$1(o)||!i$1(o,["h","w","b"]))return null;let{h:r,w:t,b:n,alpha:e=1}=o;return !f(r)||!f(t)||!f(n)||!f(e)?null:y(i({h:g(r),w:g(t),b:g(n),alpha:g(e)}))},R=/^hwb\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,c=o=>{if(typeof o!="string")return null;let r=R.exec(o.trim());if(!r)return null;let t=r[2]?.toLowerCase()??"deg",n=Number(r[1])*(d[t]??1),e=r[5]===void 0?1:Number(r[5])/(r[6]?100:1);return y(i({h:n,w:Number(r[3]),b:Number(r[4]),alpha:e}))};var $=(o,r,t)=>{o.prototype.toHwb=function(n=0){let{h:e,w,b:a,alpha:u}=x(this._rawRgb());return {h:b(e,n),w:b(w,n),b:b(a,n),alpha:b(u,3)}},o.prototype.toHwbString=function(n=0){let{h:e,w,b:a,alpha:u}=this.toHwb(n);return u<1?`hwb(${e} ${w}% ${a}% / ${u})`:`hwb(${e} ${w}% ${a}%)`},r.push(c,h),t.push([c,"hwb"],[h,"hwb"]);},v=$;export{v as default};//# sourceMappingURL=hwb.mjs.map | ||
| import {a,c as c$2}from'../chunk-YCE2ZDOI.mjs';import'../chunk-Q3O3QQ4H.mjs';import {b,l,d,h,i,f,g,a as a$1,c as c$1,k}from'../chunk-IOXRZECH.mjs';var c=o=>{let r=a$1(o.w,0,1/0),t=a$1(o.b,0,1/0),n=r+t;return {h:c$1(o.h),w:n>100?r/n*100:r,b:n>100?t/n*100:t,alpha:a$1(b(o.alpha,3),0,1)}};var R=o=>{let{h:r}=a(o);return c({h:r,w:Math.min(o.r,o.g,o.b)/255*100,b:100-Math.max(o.r,o.g,o.b)/255*100,alpha:o.alpha})},$=({h:o,w:r,b:t,alpha:n})=>{let e=t===100?0:100-r/(100-t)*100;return c$2({h:o,s:e,v:100-t,alpha:n})},m=o=>{if(!h(o)||!i(o,["h","w","b"]))return null;let{h:r,w:t,b:n,alpha:e=1}=o;return !f(r)||!f(t)||!f(n)||!f(e)?null:$(c({h:g(r),w:g(t),b:g(n),alpha:g(e)}))},N=new RegExp(`^hwb\\(\\s*(?<h>${k})(?<hu>deg|rad|grad|turn)?\\s+(?<w>${k})(?<wp>%?)\\s+(?<b>${k})(?<bp>%?)\\s*(?:/\\s*(?<al>${k})(?<alp>%?)\\s*)?\\)$`,"i"),H=o=>{if(typeof o!="string")return null;let r=N.exec(o.trim())?.groups;if(!r)return null;let t=r.hu?.toLowerCase()??"deg",n=l(r.h)*(d[t]??1),e=l(r.w),s=l(r.b),a=r.al===void 0?1:l(r.al)/(r.alp?100:1);return $(c({h:n,w:e,b:s,alpha:a}))};var j=(o,r,t)=>{o.prototype.toHwb=function(n=0){let{h:e,w:s,b:a,alpha:h}=R(this._rawRgb());return {h:b(e,n),w:b(s,n),b:b(a,n),alpha:b(h,3)}},o.prototype.toHwbString=function(n=0){let{h:e,w:s,b:a,alpha:h}=this.toHwb(n);return h<1?`hwb(${e} ${s}% ${a}% / ${h})`:`hwb(${e} ${s}% ${a}%)`},r.push(H,m),t.push([H,"hwb"],[m,"hwb"]);},E=j;export{E as default};//# sourceMappingURL=hwb.mjs.map | ||
| //# sourceMappingURL=hwb.mjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/colorModels/hwb.ts","../../src/plugins/hwb.ts"],"names":["clampHwb","hwb","w","clamp","b","sum","normalizeHue","round","rgbToHwb","rgb","h","rgbToHsvRaw","hwbToRgb","alpha","s","hsvToRgb","parseHwbObject","input","isObject","hasKeys","isAnyNumber","sanitize","HWB_RE","parseHwbString","m","unit","ANGLE_UNITS","ColordxClass","parsers","formatParsers","precision","hwb_default"],"mappings":"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","file":"hwb.mjs","sourcesContent":["import { ANGLE_UNITS, clamp, hasKeys, isAnyNumber, isObject, normalizeHue, round, sanitize } from '../helpers.js';\nimport type { HwbColor, RgbColor } from '../types.js';\nimport { hsvToRgb, rgbToHsvRaw } from './hsv.js';\n\nexport const clampHwb = (hwb: HwbColor): HwbColor => {\n // Infinity upper bound = reject negatives only; proportional normalization handles w+b > 100 below.\n const w = clamp(hwb.w, 0, Infinity);\n const b = clamp(hwb.b, 0, Infinity);\n const sum = w + b;\n return {\n h: normalizeHue(hwb.h),\n w: sum > 100 ? (w / sum) * 100 : w,\n b: sum > 100 ? (b / sum) * 100 : b,\n alpha: clamp(round(hwb.alpha, 3), 0, 1),\n };\n};\n\nexport const roundHwb = (hwb: HwbColor): HwbColor => ({\n h: round(hwb.h),\n w: round(hwb.w),\n b: round(hwb.b),\n alpha: round(hwb.alpha, 3),\n});\n\nexport const rgbToHwb = (rgb: RgbColor): HwbColor => {\n const { h } = rgbToHsvRaw(rgb);\n return clampHwb({\n h,\n w: (Math.min(rgb.r, rgb.g, rgb.b) / 255) * 100,\n b: 100 - (Math.max(rgb.r, rgb.g, rgb.b) / 255) * 100,\n alpha: rgb.alpha,\n });\n};\n\n// Precondition: w + b must be ≤ 100. Call clampHwb first — direct use with unnormalized values\n// produces negative saturation and incorrect output.\nexport const hwbToRgb = ({ h, w, b, alpha }: HwbColor): RgbColor => {\n const s = b === 100 ? 0 : 100 - (w / (100 - b)) * 100;\n return hsvToRgb({ h, s, v: 100 - b, alpha });\n};\n\nexport const parseHwbObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['h', 'w', 'b'])) return null;\n const { h, w, b, alpha = 1 } = input as { h: unknown; w: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(h) || !isAnyNumber(w) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return hwbToRgb(clampHwb({ h: sanitize(h), w: sanitize(w), b: sanitize(b), alpha: sanitize(alpha) }));\n};\n\nconst HWB_RE =\n /^hwb\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s+([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)%\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nexport const parseHwbString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = HWB_RE.exec(input.trim());\n if (!m) return null;\n const unit = m[2]?.toLowerCase() ?? 'deg';\n const h = Number(m[1]) * (ANGLE_UNITS[unit] ?? 1);\n const alpha = m[5] === undefined ? 1 : Number(m[5]) / (m[6] ? 100 : 1);\n return hwbToRgb(clampHwb({ h, w: Number(m[3]), b: Number(m[4]), alpha }));\n};\n","import { parseHwbObject, parseHwbString, rgbToHwb } from '../colorModels/hwb.js';\nimport type { Colordx, Plugin } from '../colordx.js';\nimport { round } from '../helpers.js';\nimport type { HwbColor } from '../types.js';\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toHwb(precision?: number): HwbColor;\n toHwbString(precision?: number): string;\n }\n}\n\nconst hwb: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toHwb = function (this: Colordx, precision = 0): HwbColor {\n const { h, w, b, alpha } = rgbToHwb(this._rawRgb());\n return { h: round(h, precision), w: round(w, precision), b: round(b, precision), alpha: round(alpha, 3) };\n };\n ColordxClass.prototype.toHwbString = function (this: Colordx, precision = 0): string {\n const { h, w, b, alpha } = this.toHwb(precision);\n return alpha < 1 ? `hwb(${h} ${w}% ${b}% / ${alpha})` : `hwb(${h} ${w}% ${b}%)`;\n };\n parsers.push(parseHwbString, parseHwbObject);\n formatParsers.push([parseHwbString, 'hwb'], [parseHwbObject, 'hwb']);\n};\n\nexport default hwb;\n"]} | ||
| {"version":3,"sources":["../../src/colorModels/hwb.ts","../../src/plugins/hwb.ts"],"names":["clampHwb","hwb","w","clamp","b","sum","normalizeHue","round","rgbToHwb","rgb","h","rgbToHsvRaw","hwbToRgb","alpha","s","hsvToRgb","parseHwbObject","input","isObject","hasKeys","isAnyNumber","sanitize","HWB_RE","NUM_OR_NONE","parseHwbString","g","unit","parseNum","ANGLE_UNITS","ColordxClass","parsers","formatParsers","precision","hwb_default"],"mappings":"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","file":"hwb.mjs","sourcesContent":["import {\n ANGLE_UNITS,\n NUM_OR_NONE,\n clamp,\n hasKeys,\n isAnyNumber,\n isObject,\n normalizeHue,\n parseNum,\n round,\n sanitize,\n} from '../helpers.js';\nimport type { HwbColor, RgbColor } from '../types.js';\nimport { hsvToRgb, rgbToHsvRaw } from './hsv.js';\n\nexport const clampHwb = (hwb: HwbColor): HwbColor => {\n // Infinity upper bound = reject negatives only; proportional normalization handles w+b > 100 below.\n const w = clamp(hwb.w, 0, Infinity);\n const b = clamp(hwb.b, 0, Infinity);\n const sum = w + b;\n return {\n h: normalizeHue(hwb.h),\n w: sum > 100 ? (w / sum) * 100 : w,\n b: sum > 100 ? (b / sum) * 100 : b,\n alpha: clamp(round(hwb.alpha, 3), 0, 1),\n };\n};\n\nexport const roundHwb = (hwb: HwbColor): HwbColor => ({\n h: round(hwb.h),\n w: round(hwb.w),\n b: round(hwb.b),\n alpha: round(hwb.alpha, 3),\n});\n\nexport const rgbToHwb = (rgb: RgbColor): HwbColor => {\n const { h } = rgbToHsvRaw(rgb);\n return clampHwb({\n h,\n w: (Math.min(rgb.r, rgb.g, rgb.b) / 255) * 100,\n b: 100 - (Math.max(rgb.r, rgb.g, rgb.b) / 255) * 100,\n alpha: rgb.alpha,\n });\n};\n\n// Precondition: w + b must be ≤ 100. Call clampHwb first — direct use with unnormalized values\n// produces negative saturation and incorrect output.\nexport const hwbToRgb = ({ h, w, b, alpha }: HwbColor): RgbColor => {\n const s = b === 100 ? 0 : 100 - (w / (100 - b)) * 100;\n return hsvToRgb({ h, s, v: 100 - b, alpha });\n};\n\nexport const parseHwbObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['h', 'w', 'b'])) return null;\n const { h, w, b, alpha = 1 } = input as { h: unknown; w: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(h) || !isAnyNumber(w) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return hwbToRgb(clampHwb({ h: sanitize(h), w: sanitize(w), b: sanitize(b), alpha: sanitize(alpha) }));\n};\n\nconst HWB_RE = new RegExp(\n `^hwb\\\\(\\\\s*(?<h>${NUM_OR_NONE})(?<hu>deg|rad|grad|turn)?\\\\s+` +\n `(?<w>${NUM_OR_NONE})(?<wp>%?)\\\\s+(?<b>${NUM_OR_NONE})(?<bp>%?)` +\n `\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseHwbString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = HWB_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const unit = g.hu?.toLowerCase() ?? 'deg';\n const h = parseNum(g.h!) * (ANGLE_UNITS[unit] ?? 1);\n const w = parseNum(g.w!);\n const b = parseNum(g.b!);\n const alpha = g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1);\n return hwbToRgb(clampHwb({ h, w, b, alpha }));\n};\n","import { parseHwbObject, parseHwbString, rgbToHwb } from '../colorModels/hwb.js';\nimport type { Colordx, Plugin } from '../colordx.js';\nimport { round } from '../helpers.js';\nimport type { HwbColor } from '../types.js';\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toHwb(precision?: number): HwbColor;\n toHwbString(precision?: number): string;\n }\n}\n\nconst hwb: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toHwb = function (this: Colordx, precision = 0): HwbColor {\n const { h, w, b, alpha } = rgbToHwb(this._rawRgb());\n return { h: round(h, precision), w: round(w, precision), b: round(b, precision), alpha: round(alpha, 3) };\n };\n ColordxClass.prototype.toHwbString = function (this: Colordx, precision = 0): string {\n const { h, w, b, alpha } = this.toHwb(precision);\n return alpha < 1 ? `hwb(${h} ${w}% ${b}% / ${alpha})` : `hwb(${h} ${w}% ${b}%)`;\n };\n parsers.push(parseHwbString, parseHwbObject);\n formatParsers.push([parseHwbString, 'hwb'], [parseHwbObject, 'hwb']);\n};\n\nexport default hwb;\n"]} |
@@ -1,2 +0,2 @@ | ||
| 'use strict';var chunkIHOZOJHA_cjs=require('../chunk-IHOZOJHA.cjs');require('../chunk-X5FCFNQN.cjs'),require('../chunk-GYCEEHZT.cjs');var chunkEXPXWBLP_cjs=require('../chunk-EXPXWBLP.cjs');var $=(n,m,z)=>{n.prototype.toLab=function(){let{l:r,a,b:o,alpha:t}=chunkIHOZOJHA_cjs.e(this._rawRgb());return {l:chunkEXPXWBLP_cjs.b(r,2),a:chunkEXPXWBLP_cjs.b(a,2)||0,b:chunkEXPXWBLP_cjs.b(o,2)||0,alpha:t,colorSpace:"lab"}},n.prototype.toLabString=function(){let{l:r,a,b:o,alpha:t}=this.toLab();return t<1?`lab(${r}% ${a} ${o} / ${t})`:`lab(${r}% ${a} ${o})`},n.prototype.toXyz=function(){let{x:r,y:a,z:o,alpha:t}=chunkIHOZOJHA_cjs.a(this._rawRgb());return {x:chunkEXPXWBLP_cjs.b(r,2),y:chunkEXPXWBLP_cjs.b(a,2),z:chunkEXPXWBLP_cjs.b(o,2),alpha:t}},n.prototype.toXyzString=function(){let{x:r,y:a,z:o,alpha:t}=this.toXyz();return t<1?`color(xyz-d65 ${r} ${a} ${o} / ${t})`:`color(xyz-d65 ${r} ${a} ${o})`},n.prototype.mixLab=function(r,a=.5){let o=chunkIHOZOJHA_cjs.e(this._rawRgb()),t=chunkIHOZOJHA_cjs.e(new n(r)._rawRgb()),l=chunkEXPXWBLP_cjs.a(a,0,1);return new n(chunkIHOZOJHA_cjs.h({l:o.l*(1-l)+t.l*l,a:o.a*(1-l)+t.a*l,b:o.b*(1-l)+t.b*l,alpha:chunkEXPXWBLP_cjs.b(o.alpha*(1-l)+t.alpha*l,3),colorSpace:"lab"}))},n.prototype.delta=function(r="#fff"){return chunkEXPXWBLP_cjs.b(chunkIHOZOJHA_cjs.g(chunkIHOZOJHA_cjs.f(this._rawRgb()),chunkIHOZOJHA_cjs.f(new n(r)._rawRgb()))/100,3)},m.push(chunkIHOZOJHA_cjs.i,chunkIHOZOJHA_cjs.j,chunkIHOZOJHA_cjs.c),z.push([chunkIHOZOJHA_cjs.i,"lab"],[chunkIHOZOJHA_cjs.j,"lab"],[chunkIHOZOJHA_cjs.c,"xyz"]);},w=$;module.exports=w;//# sourceMappingURL=lab.cjs.map | ||
| 'use strict';var chunkEDNIB75Q_cjs=require('../chunk-EDNIB75Q.cjs');require('../chunk-X5FCFNQN.cjs'),require('../chunk-3V4MONNR.cjs');var chunkYISEJCI6_cjs=require('../chunk-YISEJCI6.cjs');var $=(n,m,z)=>{n.prototype.toLab=function(){let{l:r,a,b:o,alpha:t}=chunkEDNIB75Q_cjs.e(this._rawRgb());return {l:chunkYISEJCI6_cjs.b(r,2),a:chunkYISEJCI6_cjs.b(a,2)||0,b:chunkYISEJCI6_cjs.b(o,2)||0,alpha:t,colorSpace:"lab"}},n.prototype.toLabString=function(){let{l:r,a,b:o,alpha:t}=this.toLab();return t<1?`lab(${r} ${a} ${o} / ${t})`:`lab(${r} ${a} ${o})`},n.prototype.toXyz=function(){let{x:r,y:a,z:o,alpha:t}=chunkEDNIB75Q_cjs.a(this._rawRgb());return {x:chunkYISEJCI6_cjs.b(r,2),y:chunkYISEJCI6_cjs.b(a,2),z:chunkYISEJCI6_cjs.b(o,2),alpha:t}},n.prototype.toXyzString=function(){let{x:r,y:a,z:o,alpha:t}=this.toXyz();return t<1?`color(xyz-d65 ${r} ${a} ${o} / ${t})`:`color(xyz-d65 ${r} ${a} ${o})`},n.prototype.mixLab=function(r,a=.5){let o=chunkEDNIB75Q_cjs.e(this._rawRgb()),t=chunkEDNIB75Q_cjs.e(new n(r)._rawRgb()),l=chunkYISEJCI6_cjs.a(a,0,1);return new n(chunkEDNIB75Q_cjs.h({l:o.l*(1-l)+t.l*l,a:o.a*(1-l)+t.a*l,b:o.b*(1-l)+t.b*l,alpha:chunkYISEJCI6_cjs.b(o.alpha*(1-l)+t.alpha*l,3),colorSpace:"lab"}))},n.prototype.delta=function(r="#fff"){return chunkYISEJCI6_cjs.b(chunkEDNIB75Q_cjs.g(chunkEDNIB75Q_cjs.f(this._rawRgb()),chunkEDNIB75Q_cjs.f(new n(r)._rawRgb()))/100,3)},m.push(chunkEDNIB75Q_cjs.i,chunkEDNIB75Q_cjs.j,chunkEDNIB75Q_cjs.c),z.push([chunkEDNIB75Q_cjs.i,"lab"],[chunkEDNIB75Q_cjs.j,"lab"],[chunkEDNIB75Q_cjs.c,"xyz"]);},w=$;module.exports=w;//# sourceMappingURL=lab.cjs.map | ||
| //# sourceMappingURL=lab.cjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/plugins/lab.ts"],"names":["lab","ColordxClass","parsers","formatParsers","l","b","alpha","rgbToLab","round","x","y","z","rgbToXyz","color","ratio","lab1","lab2","w","clamp","labToRgb","deltaE2000","rgbToLabD65","parseLabString","parseLabObject","parseXyzObject","lab_default"],"mappings":"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","file":"lab.cjs","sourcesContent":["import { deltaE2000, labToRgb, parseLabObject, parseLabString, rgbToLab, rgbToLabD65 } from '../colorModels/lab.js';\nimport { parseXyzObject, rgbToXyz } from '../colorModels/xyz.js';\nimport type { Colordx, Plugin } from '../colordx.js';\nimport { clamp, round } from '../helpers.js';\nimport type { AnyColor, LabColor, XyzColor } from '../types.js';\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toLab(): LabColor;\n toLabString(): string;\n toXyz(): XyzColor;\n toXyzString(): string;\n mixLab(color: AnyColor, ratio?: number): Colordx;\n delta(color?: AnyColor): number;\n }\n}\n\nconst lab: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toLab = function () {\n const { l, a, b, alpha } = rgbToLab(this._rawRgb());\n return { l: round(l, 2), a: round(a, 2) || 0, b: round(b, 2) || 0, alpha, colorSpace: 'lab' as const }; // || 0 suppresses −0\n };\n ColordxClass.prototype.toLabString = function (this: Colordx) {\n const { l, a, b, alpha } = this.toLab();\n return alpha < 1 ? `lab(${l}% ${a} ${b} / ${alpha})` : `lab(${l}% ${a} ${b})`;\n };\n ColordxClass.prototype.toXyz = function () {\n const { x, y, z, alpha } = rgbToXyz(this._rawRgb());\n return { x: round(x, 2), y: round(y, 2), z: round(z, 2), alpha };\n };\n ColordxClass.prototype.toXyzString = function (this: Colordx) {\n const { x, y, z, alpha } = this.toXyz();\n return alpha < 1 ? `color(xyz-d65 ${x} ${y} ${z} / ${alpha})` : `color(xyz-d65 ${x} ${y} ${z})`;\n };\n ColordxClass.prototype.mixLab = function (this: Colordx, color: AnyColor, ratio = 0.5): Colordx {\n const lab1 = rgbToLab(this._rawRgb());\n const lab2 = rgbToLab(new ColordxClass(color)._rawRgb());\n const w = clamp(ratio, 0, 1);\n return new ColordxClass(\n labToRgb({\n l: lab1.l * (1 - w) + lab2.l * w,\n a: lab1.a * (1 - w) + lab2.a * w,\n b: lab1.b * (1 - w) + lab2.b * w,\n alpha: round(lab1.alpha * (1 - w) + lab2.alpha * w, 3),\n colorSpace: 'lab',\n })\n );\n };\n /** Returns ΔE2000 color difference normalized to [0, 1] (divide by 100). 0 = identical, 1 = maximally different. */\n ColordxClass.prototype.delta = function (color: AnyColor = '#fff') {\n return round(deltaE2000(rgbToLabD65(this._rawRgb()), rgbToLabD65(new ColordxClass(color)._rawRgb())) / 100, 3);\n };\n parsers.push(parseLabString, parseLabObject, parseXyzObject);\n formatParsers.push([parseLabString, 'lab'], [parseLabObject, 'lab'], [parseXyzObject, 'xyz']);\n};\n\nexport default lab;\n"]} | ||
| {"version":3,"sources":["../../src/plugins/lab.ts"],"names":["lab","ColordxClass","parsers","formatParsers","l","b","alpha","rgbToLab","round","x","y","z","rgbToXyz","color","ratio","lab1","lab2","w","clamp","labToRgb","deltaE2000","rgbToLabD65","parseLabString","parseLabObject","parseXyzObject","lab_default"],"mappings":"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","file":"lab.cjs","sourcesContent":["import { deltaE2000, labToRgb, parseLabObject, parseLabString, rgbToLab, rgbToLabD65 } from '../colorModels/lab.js';\nimport { parseXyzObject, rgbToXyz } from '../colorModels/xyz.js';\nimport type { Colordx, Plugin } from '../colordx.js';\nimport { clamp, round } from '../helpers.js';\nimport type { AnyColor, LabColor, XyzColor } from '../types.js';\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toLab(): LabColor;\n toLabString(): string;\n toXyz(): XyzColor;\n toXyzString(): string;\n mixLab(color: AnyColor, ratio?: number): Colordx;\n delta(color?: AnyColor): number;\n }\n}\n\nconst lab: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toLab = function () {\n const { l, a, b, alpha } = rgbToLab(this._rawRgb());\n return { l: round(l, 2), a: round(a, 2) || 0, b: round(b, 2) || 0, alpha, colorSpace: 'lab' as const }; // || 0 suppresses −0\n };\n ColordxClass.prototype.toLabString = function (this: Colordx) {\n const { l, a, b, alpha } = this.toLab();\n return alpha < 1 ? `lab(${l} ${a} ${b} / ${alpha})` : `lab(${l} ${a} ${b})`;\n };\n ColordxClass.prototype.toXyz = function () {\n const { x, y, z, alpha } = rgbToXyz(this._rawRgb());\n return { x: round(x, 2), y: round(y, 2), z: round(z, 2), alpha };\n };\n ColordxClass.prototype.toXyzString = function (this: Colordx) {\n const { x, y, z, alpha } = this.toXyz();\n return alpha < 1 ? `color(xyz-d65 ${x} ${y} ${z} / ${alpha})` : `color(xyz-d65 ${x} ${y} ${z})`;\n };\n ColordxClass.prototype.mixLab = function (this: Colordx, color: AnyColor, ratio = 0.5): Colordx {\n const lab1 = rgbToLab(this._rawRgb());\n const lab2 = rgbToLab(new ColordxClass(color)._rawRgb());\n const w = clamp(ratio, 0, 1);\n return new ColordxClass(\n labToRgb({\n l: lab1.l * (1 - w) + lab2.l * w,\n a: lab1.a * (1 - w) + lab2.a * w,\n b: lab1.b * (1 - w) + lab2.b * w,\n alpha: round(lab1.alpha * (1 - w) + lab2.alpha * w, 3),\n colorSpace: 'lab',\n })\n );\n };\n /** Returns ΔE2000 color difference normalized to [0, 1] (divide by 100). 0 = identical, 1 = maximally different. */\n ColordxClass.prototype.delta = function (color: AnyColor = '#fff') {\n return round(deltaE2000(rgbToLabD65(this._rawRgb()), rgbToLabD65(new ColordxClass(color)._rawRgb())) / 100, 3);\n };\n parsers.push(parseLabString, parseLabObject, parseXyzObject);\n formatParsers.push([parseLabString, 'lab'], [parseLabObject, 'lab'], [parseXyzObject, 'xyz']);\n};\n\nexport default lab;\n"]} |
@@ -1,2 +0,2 @@ | ||
| import {e,a,h,g,f,i,j,c}from'../chunk-HFDTK2ZP.mjs';import'../chunk-FXCFKFXK.mjs';import'../chunk-OD65R6MQ.mjs';import {b,a as a$1}from'../chunk-JFPP44S3.mjs';var $=(n,m,z)=>{n.prototype.toLab=function(){let{l:r,a,b:o,alpha:t}=e(this._rawRgb());return {l:b(r,2),a:b(a,2)||0,b:b(o,2)||0,alpha:t,colorSpace:"lab"}},n.prototype.toLabString=function(){let{l:r,a,b:o,alpha:t}=this.toLab();return t<1?`lab(${r}% ${a} ${o} / ${t})`:`lab(${r}% ${a} ${o})`},n.prototype.toXyz=function(){let{x:r,y:a$1,z:o,alpha:t}=a(this._rawRgb());return {x:b(r,2),y:b(a$1,2),z:b(o,2),alpha:t}},n.prototype.toXyzString=function(){let{x:r,y:a,z:o,alpha:t}=this.toXyz();return t<1?`color(xyz-d65 ${r} ${a} ${o} / ${t})`:`color(xyz-d65 ${r} ${a} ${o})`},n.prototype.mixLab=function(r,a=.5){let o=e(this._rawRgb()),t=e(new n(r)._rawRgb()),l=a$1(a,0,1);return new n(h({l:o.l*(1-l)+t.l*l,a:o.a*(1-l)+t.a*l,b:o.b*(1-l)+t.b*l,alpha:b(o.alpha*(1-l)+t.alpha*l,3),colorSpace:"lab"}))},n.prototype.delta=function(r="#fff"){return b(g(f(this._rawRgb()),f(new n(r)._rawRgb()))/100,3)},m.push(i,j,c),z.push([i,"lab"],[j,"lab"],[c,"xyz"]);},w=$;export{w as default};//# sourceMappingURL=lab.mjs.map | ||
| import {e,a,h,g,f,i,j,c}from'../chunk-OXYX6VNO.mjs';import'../chunk-FXCFKFXK.mjs';import'../chunk-Q3O3QQ4H.mjs';import {b,a as a$1}from'../chunk-IOXRZECH.mjs';var $=(n,m,z)=>{n.prototype.toLab=function(){let{l:r,a,b:o,alpha:t}=e(this._rawRgb());return {l:b(r,2),a:b(a,2)||0,b:b(o,2)||0,alpha:t,colorSpace:"lab"}},n.prototype.toLabString=function(){let{l:r,a,b:o,alpha:t}=this.toLab();return t<1?`lab(${r} ${a} ${o} / ${t})`:`lab(${r} ${a} ${o})`},n.prototype.toXyz=function(){let{x:r,y:a$1,z:o,alpha:t}=a(this._rawRgb());return {x:b(r,2),y:b(a$1,2),z:b(o,2),alpha:t}},n.prototype.toXyzString=function(){let{x:r,y:a,z:o,alpha:t}=this.toXyz();return t<1?`color(xyz-d65 ${r} ${a} ${o} / ${t})`:`color(xyz-d65 ${r} ${a} ${o})`},n.prototype.mixLab=function(r,a=.5){let o=e(this._rawRgb()),t=e(new n(r)._rawRgb()),l=a$1(a,0,1);return new n(h({l:o.l*(1-l)+t.l*l,a:o.a*(1-l)+t.a*l,b:o.b*(1-l)+t.b*l,alpha:b(o.alpha*(1-l)+t.alpha*l,3),colorSpace:"lab"}))},n.prototype.delta=function(r="#fff"){return b(g(f(this._rawRgb()),f(new n(r)._rawRgb()))/100,3)},m.push(i,j,c),z.push([i,"lab"],[j,"lab"],[c,"xyz"]);},w=$;export{w as default};//# sourceMappingURL=lab.mjs.map | ||
| //# sourceMappingURL=lab.mjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/plugins/lab.ts"],"names":["lab","ColordxClass","parsers","formatParsers","l","b","alpha","rgbToLab","round","x","y","z","rgbToXyz","color","ratio","lab1","lab2","w","clamp","labToRgb","deltaE2000","rgbToLabD65","parseLabString","parseLabObject","parseXyzObject","lab_default"],"mappings":"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","file":"lab.mjs","sourcesContent":["import { deltaE2000, labToRgb, parseLabObject, parseLabString, rgbToLab, rgbToLabD65 } from '../colorModels/lab.js';\nimport { parseXyzObject, rgbToXyz } from '../colorModels/xyz.js';\nimport type { Colordx, Plugin } from '../colordx.js';\nimport { clamp, round } from '../helpers.js';\nimport type { AnyColor, LabColor, XyzColor } from '../types.js';\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toLab(): LabColor;\n toLabString(): string;\n toXyz(): XyzColor;\n toXyzString(): string;\n mixLab(color: AnyColor, ratio?: number): Colordx;\n delta(color?: AnyColor): number;\n }\n}\n\nconst lab: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toLab = function () {\n const { l, a, b, alpha } = rgbToLab(this._rawRgb());\n return { l: round(l, 2), a: round(a, 2) || 0, b: round(b, 2) || 0, alpha, colorSpace: 'lab' as const }; // || 0 suppresses −0\n };\n ColordxClass.prototype.toLabString = function (this: Colordx) {\n const { l, a, b, alpha } = this.toLab();\n return alpha < 1 ? `lab(${l}% ${a} ${b} / ${alpha})` : `lab(${l}% ${a} ${b})`;\n };\n ColordxClass.prototype.toXyz = function () {\n const { x, y, z, alpha } = rgbToXyz(this._rawRgb());\n return { x: round(x, 2), y: round(y, 2), z: round(z, 2), alpha };\n };\n ColordxClass.prototype.toXyzString = function (this: Colordx) {\n const { x, y, z, alpha } = this.toXyz();\n return alpha < 1 ? `color(xyz-d65 ${x} ${y} ${z} / ${alpha})` : `color(xyz-d65 ${x} ${y} ${z})`;\n };\n ColordxClass.prototype.mixLab = function (this: Colordx, color: AnyColor, ratio = 0.5): Colordx {\n const lab1 = rgbToLab(this._rawRgb());\n const lab2 = rgbToLab(new ColordxClass(color)._rawRgb());\n const w = clamp(ratio, 0, 1);\n return new ColordxClass(\n labToRgb({\n l: lab1.l * (1 - w) + lab2.l * w,\n a: lab1.a * (1 - w) + lab2.a * w,\n b: lab1.b * (1 - w) + lab2.b * w,\n alpha: round(lab1.alpha * (1 - w) + lab2.alpha * w, 3),\n colorSpace: 'lab',\n })\n );\n };\n /** Returns ΔE2000 color difference normalized to [0, 1] (divide by 100). 0 = identical, 1 = maximally different. */\n ColordxClass.prototype.delta = function (color: AnyColor = '#fff') {\n return round(deltaE2000(rgbToLabD65(this._rawRgb()), rgbToLabD65(new ColordxClass(color)._rawRgb())) / 100, 3);\n };\n parsers.push(parseLabString, parseLabObject, parseXyzObject);\n formatParsers.push([parseLabString, 'lab'], [parseLabObject, 'lab'], [parseXyzObject, 'xyz']);\n};\n\nexport default lab;\n"]} | ||
| {"version":3,"sources":["../../src/plugins/lab.ts"],"names":["lab","ColordxClass","parsers","formatParsers","l","b","alpha","rgbToLab","round","x","y","z","rgbToXyz","color","ratio","lab1","lab2","w","clamp","labToRgb","deltaE2000","rgbToLabD65","parseLabString","parseLabObject","parseXyzObject","lab_default"],"mappings":"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","file":"lab.mjs","sourcesContent":["import { deltaE2000, labToRgb, parseLabObject, parseLabString, rgbToLab, rgbToLabD65 } from '../colorModels/lab.js';\nimport { parseXyzObject, rgbToXyz } from '../colorModels/xyz.js';\nimport type { Colordx, Plugin } from '../colordx.js';\nimport { clamp, round } from '../helpers.js';\nimport type { AnyColor, LabColor, XyzColor } from '../types.js';\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toLab(): LabColor;\n toLabString(): string;\n toXyz(): XyzColor;\n toXyzString(): string;\n mixLab(color: AnyColor, ratio?: number): Colordx;\n delta(color?: AnyColor): number;\n }\n}\n\nconst lab: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toLab = function () {\n const { l, a, b, alpha } = rgbToLab(this._rawRgb());\n return { l: round(l, 2), a: round(a, 2) || 0, b: round(b, 2) || 0, alpha, colorSpace: 'lab' as const }; // || 0 suppresses −0\n };\n ColordxClass.prototype.toLabString = function (this: Colordx) {\n const { l, a, b, alpha } = this.toLab();\n return alpha < 1 ? `lab(${l} ${a} ${b} / ${alpha})` : `lab(${l} ${a} ${b})`;\n };\n ColordxClass.prototype.toXyz = function () {\n const { x, y, z, alpha } = rgbToXyz(this._rawRgb());\n return { x: round(x, 2), y: round(y, 2), z: round(z, 2), alpha };\n };\n ColordxClass.prototype.toXyzString = function (this: Colordx) {\n const { x, y, z, alpha } = this.toXyz();\n return alpha < 1 ? `color(xyz-d65 ${x} ${y} ${z} / ${alpha})` : `color(xyz-d65 ${x} ${y} ${z})`;\n };\n ColordxClass.prototype.mixLab = function (this: Colordx, color: AnyColor, ratio = 0.5): Colordx {\n const lab1 = rgbToLab(this._rawRgb());\n const lab2 = rgbToLab(new ColordxClass(color)._rawRgb());\n const w = clamp(ratio, 0, 1);\n return new ColordxClass(\n labToRgb({\n l: lab1.l * (1 - w) + lab2.l * w,\n a: lab1.a * (1 - w) + lab2.a * w,\n b: lab1.b * (1 - w) + lab2.b * w,\n alpha: round(lab1.alpha * (1 - w) + lab2.alpha * w, 3),\n colorSpace: 'lab',\n })\n );\n };\n /** Returns ΔE2000 color difference normalized to [0, 1] (divide by 100). 0 = identical, 1 = maximally different. */\n ColordxClass.prototype.delta = function (color: AnyColor = '#fff') {\n return round(deltaE2000(rgbToLabD65(this._rawRgb()), rgbToLabD65(new ColordxClass(color)._rawRgb())) / 100, 3);\n };\n parsers.push(parseLabString, parseLabObject, parseXyzObject);\n formatParsers.push([parseLabString, 'lab'], [parseLabObject, 'lab'], [parseXyzObject, 'xyz']);\n};\n\nexport default lab;\n"]} |
@@ -1,2 +0,2 @@ | ||
| 'use strict';var chunkIHOZOJHA_cjs=require('../chunk-IHOZOJHA.cjs');require('../chunk-X5FCFNQN.cjs'),require('../chunk-GYCEEHZT.cjs');var chunkEXPXWBLP_cjs=require('../chunk-EXPXWBLP.cjs');var S=r=>({l:chunkEXPXWBLP_cjs.a(r.l,0,100),c:Math.max(0,r.c),h:chunkEXPXWBLP_cjs.c(r.h),alpha:chunkEXPXWBLP_cjs.a(r.alpha,0,1),colorSpace:"lch"}),w=r=>{let o=chunkIHOZOJHA_cjs.e(r),t=chunkEXPXWBLP_cjs.b(Math.sqrt(o.a**2+o.b**2),2),n=Math.atan2(o.b,o.a)/Math.PI*180;return {l:o.l,c:t,h:t<.0015?0:chunkEXPXWBLP_cjs.b(n<0?n+360:n,2),alpha:o.alpha,colorSpace:"lch"}},y=({l:r,c:o,h:t,alpha:n})=>chunkIHOZOJHA_cjs.h({l:r,a:o*Math.cos(t*Math.PI/180),b:o*Math.sin(t*Math.PI/180),alpha:n,colorSpace:"lab"}),u=r=>{if(!chunkEXPXWBLP_cjs.h(r)||r.colorSpace!=="lch"||!chunkEXPXWBLP_cjs.i(r,["l","c","h"]))return null;let{l:o,c:t,h:n,alpha:c=1}=r;return !chunkEXPXWBLP_cjs.f(o)||!chunkEXPXWBLP_cjs.f(t)||!chunkEXPXWBLP_cjs.f(n)||!chunkEXPXWBLP_cjs.f(c)?null:y(S({l:chunkEXPXWBLP_cjs.g(o),c:chunkEXPXWBLP_cjs.g(t),h:chunkEXPXWBLP_cjs.g(n),alpha:chunkEXPXWBLP_cjs.g(c)}))},x=/^lch\(\s*([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)\s+(none|[+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,i=r=>{if(typeof r!="string")return null;let o=x.exec(r.trim());if(!o)return null;let t=o[4]?.toLowerCase()??"deg",n=o[3].toLowerCase()==="none"?0:Number(o[3])*(chunkEXPXWBLP_cjs.d[t]??1),c=o[5]===void 0?1:Number(o[5])/(o[6]?100:1);return y(S({l:Number(o[1]),c:Number(o[2]),h:n,alpha:c}))};var R=(r,o,t)=>{r.prototype.toLch=function(){let{l:n,c,h:s,alpha:h}=w(this._rawRgb());return {l:chunkEXPXWBLP_cjs.b(n,2),c:chunkEXPXWBLP_cjs.b(c,2),h:chunkEXPXWBLP_cjs.b(s,2),alpha:h,colorSpace:"lch"}},r.prototype.toLchString=function(){let{l:n,c,h:s,alpha:h}=this.toLch(),m=c===0?"none":s;return h<1?`lch(${n}% ${c} ${m} / ${h})`:`lch(${n}% ${c} ${m})`},o.push(u,i),t.push([u,"lch"],[i,"lch"]);},T=R;module.exports=T;//# sourceMappingURL=lch.cjs.map | ||
| 'use strict';var chunkEDNIB75Q_cjs=require('../chunk-EDNIB75Q.cjs');require('../chunk-X5FCFNQN.cjs'),require('../chunk-3V4MONNR.cjs');var chunkYISEJCI6_cjs=require('../chunk-YISEJCI6.cjs');var R=r=>({l:chunkYISEJCI6_cjs.a(r.l,0,100),c:Math.max(0,r.c),h:chunkYISEJCI6_cjs.c(r.h),alpha:chunkYISEJCI6_cjs.a(r.alpha,0,1),colorSpace:"lch"}),w=r=>{let o=chunkEDNIB75Q_cjs.e(r),t=chunkYISEJCI6_cjs.b(Math.sqrt(o.a**2+o.b**2),2),c=Math.atan2(o.b,o.a)/Math.PI*180;return {l:o.l,c:t,h:t<.0015?0:chunkYISEJCI6_cjs.b(c<0?c+360:c,2),alpha:o.alpha,colorSpace:"lch"}},x=({l:r,c:o,h:t,alpha:c})=>chunkEDNIB75Q_cjs.h({l:r,a:o*Math.cos(t*Math.PI/180),b:o*Math.sin(t*Math.PI/180),alpha:c,colorSpace:"lab"}),g=r=>{if(!chunkYISEJCI6_cjs.h(r)||r.colorSpace!=="lch"||!chunkYISEJCI6_cjs.i(r,["l","c","h"]))return null;let{l:o,c:t,h:c,alpha:l=1}=r;return !chunkYISEJCI6_cjs.f(o)||!chunkYISEJCI6_cjs.f(t)||!chunkYISEJCI6_cjs.f(c)||!chunkYISEJCI6_cjs.f(l)?null:x(R({l:chunkYISEJCI6_cjs.g(o),c:chunkYISEJCI6_cjs.g(t),h:chunkYISEJCI6_cjs.g(c),alpha:chunkYISEJCI6_cjs.g(l)}))},y=new RegExp(`^lch\\(\\s*(?<l>${chunkYISEJCI6_cjs.k})(?<lp>%?)\\s+(?<c>${chunkYISEJCI6_cjs.k})(?<cp>%?)\\s+(?<h>${chunkYISEJCI6_cjs.k})(?<hu>deg|rad|grad|turn)?\\s*(?:/\\s*(?<al>${chunkYISEJCI6_cjs.k})(?<alp>%?)\\s*)?\\)$`,"i"),m=r=>{if(typeof r!="string")return null;let o=y.exec(r.trim())?.groups;if(!o)return null;let t=chunkYISEJCI6_cjs.l(o.l),c=o.cp?chunkYISEJCI6_cjs.l(o.c)*1.5:chunkYISEJCI6_cjs.l(o.c),l=o.hu?.toLowerCase()??"deg",e=chunkYISEJCI6_cjs.l(o.h)*(chunkYISEJCI6_cjs.d[l]??1),a=o.al===void 0?1:chunkYISEJCI6_cjs.l(o.al)/(o.alp?100:1);return x(R({l:t,c,h:e,alpha:a}))};var M=(r,o,t)=>{r.prototype.toLch=function(){let{l:c,c:l,h:e,alpha:a}=w(this._rawRgb());return {l:chunkYISEJCI6_cjs.b(c,2),c:chunkYISEJCI6_cjs.b(l,2),h:chunkYISEJCI6_cjs.b(e,2),alpha:a,colorSpace:"lch"}},r.prototype.toLchString=function(){let{l:c,c:l,h:e,alpha:a}=this.toLch(),L=l===0?"none":e;return a<1?`lch(${c} ${l} ${L} / ${a})`:`lch(${c} ${l} ${L})`},o.push(g,m),t.push([g,"lch"],[m,"lch"]);},P=M;module.exports=P;//# sourceMappingURL=lch.cjs.map | ||
| //# sourceMappingURL=lch.cjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/colorModels/lch.ts","../../src/plugins/lch.ts"],"names":["clampLch","lch","clamp","normalizeHue","rgbToLch","rgb","lab","rgbToLab","c","round","h","lchToRgb","l","alpha","labToRgb","parseLchObject","input","isObject","hasKeys","isAnyNumber","sanitize","LCH_RE","parseLchString","m","unit","ANGLE_UNITS","ColordxClass","parsers","formatParsers","H","lch_default"],"mappings":"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","file":"lch.cjs","sourcesContent":["import { ANGLE_UNITS, clamp, hasKeys, isAnyNumber, isObject, normalizeHue, round, sanitize } from '../helpers.js';\nimport type { LchColor, RgbColor } from '../types.js';\nimport { labToRgb, rgbToLab } from './lab.js';\n\nconst clampLch = (lch: Omit<LchColor, 'colorSpace'>): LchColor => ({\n l: clamp(lch.l, 0, 100),\n c: Math.max(0, lch.c),\n h: normalizeHue(lch.h),\n alpha: clamp(lch.alpha, 0, 1),\n colorSpace: 'lch',\n});\n\nexport const rgbToLch = (rgb: RgbColor): LchColor => {\n const lab = rgbToLab(rgb);\n const c = round(Math.sqrt(lab.a ** 2 + lab.b ** 2), 2);\n const h = (Math.atan2(lab.b, lab.a) / Math.PI) * 180;\n return {\n l: lab.l,\n c,\n // Achromatic threshold on LCH scale (0–~150): below this chroma the hue is numerically unstable.\n h: c < 0.0015 ? 0 : round(h < 0 ? h + 360 : h, 2),\n alpha: lab.alpha,\n colorSpace: 'lch',\n };\n};\n\nexport const lchToRgb = ({ l, c, h, alpha }: LchColor): RgbColor =>\n labToRgb({\n l,\n a: c * Math.cos((h * Math.PI) / 180),\n b: c * Math.sin((h * Math.PI) / 180),\n alpha,\n colorSpace: 'lab',\n });\n\nexport const parseLchObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if ((input as { colorSpace?: unknown }).colorSpace !== 'lch') return null;\n if (!hasKeys(input, ['l', 'c', 'h'])) return null;\n const { l, c, h, alpha = 1 } = input as { l: unknown; c: unknown; h: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(c) || !isAnyNumber(h) || !isAnyNumber(alpha)) return null;\n return lchToRgb(\n clampLch({\n l: sanitize(l),\n c: sanitize(c),\n h: sanitize(h),\n alpha: sanitize(alpha),\n })\n );\n};\n\nconst LCH_RE =\n /^lch\\(\\s*([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)\\s+(none|[+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nexport const parseLchString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = LCH_RE.exec(input.trim());\n if (!m) return null;\n const unit = m[4]?.toLowerCase() ?? 'deg';\n const h = m[3]!.toLowerCase() === 'none' ? 0 : Number(m[3]) * (ANGLE_UNITS[unit] ?? 1);\n const alpha = m[5] === undefined ? 1 : Number(m[5]) / (m[6] ? 100 : 1);\n return lchToRgb(clampLch({ l: Number(m[1]), c: Number(m[2]), h, alpha }));\n};\n","import { parseLchObject, parseLchString, rgbToLch } from '../colorModels/lch.js';\nimport type { Plugin } from '../colordx.js';\nimport { round } from '../helpers.js';\nimport type { LchColor } from '../types.js';\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toLch(): LchColor;\n toLchString(): string;\n }\n}\n\nconst lch: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toLch = function () {\n const { l, c, h, alpha } = rgbToLch(this._rawRgb());\n return { l: round(l, 2), c: round(c, 2), h: round(h, 2), alpha, colorSpace: 'lch' as const };\n };\n ColordxClass.prototype.toLchString = function () {\n const { l, c, h, alpha } = this.toLch();\n // c is already rounded to 2dp; c === 0 is the effective achromatic check at this precision.\n const H = c === 0 ? 'none' : h;\n return alpha < 1 ? `lch(${l}% ${c} ${H} / ${alpha})` : `lch(${l}% ${c} ${H})`;\n };\n parsers.push(parseLchObject, parseLchString);\n formatParsers.push([parseLchObject, 'lch'], [parseLchString, 'lch']);\n};\n\nexport default lch;\n"]} | ||
| {"version":3,"sources":["../../src/colorModels/lch.ts","../../src/plugins/lch.ts"],"names":["clampLch","lch","clamp","normalizeHue","rgbToLch","rgb","lab","rgbToLab","c","round","h","lchToRgb","l","alpha","labToRgb","parseLchObject","input","isObject","hasKeys","isAnyNumber","sanitize","LCH_RE","NUM_OR_NONE","parseLchString","g","parseNum","unit","ANGLE_UNITS","ColordxClass","parsers","formatParsers","H","lch_default"],"mappings":"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","file":"lch.cjs","sourcesContent":["import {\n ANGLE_UNITS,\n NUM_OR_NONE,\n clamp,\n hasKeys,\n isAnyNumber,\n isObject,\n normalizeHue,\n parseNum,\n round,\n sanitize,\n} from '../helpers.js';\nimport type { LchColor, RgbColor } from '../types.js';\nimport { labToRgb, rgbToLab } from './lab.js';\n\nconst clampLch = (lch: Omit<LchColor, 'colorSpace'>): LchColor => ({\n l: clamp(lch.l, 0, 100),\n c: Math.max(0, lch.c),\n h: normalizeHue(lch.h),\n alpha: clamp(lch.alpha, 0, 1),\n colorSpace: 'lch',\n});\n\nexport const rgbToLch = (rgb: RgbColor): LchColor => {\n const lab = rgbToLab(rgb);\n const c = round(Math.sqrt(lab.a ** 2 + lab.b ** 2), 2);\n const h = (Math.atan2(lab.b, lab.a) / Math.PI) * 180;\n return {\n l: lab.l,\n c,\n // Achromatic threshold on LCH scale (0–~150): below this chroma the hue is numerically unstable.\n h: c < 0.0015 ? 0 : round(h < 0 ? h + 360 : h, 2),\n alpha: lab.alpha,\n colorSpace: 'lch',\n };\n};\n\nexport const lchToRgb = ({ l, c, h, alpha }: LchColor): RgbColor =>\n labToRgb({\n l,\n a: c * Math.cos((h * Math.PI) / 180),\n b: c * Math.sin((h * Math.PI) / 180),\n alpha,\n colorSpace: 'lab',\n });\n\nexport const parseLchObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if ((input as { colorSpace?: unknown }).colorSpace !== 'lch') return null;\n if (!hasKeys(input, ['l', 'c', 'h'])) return null;\n const { l, c, h, alpha = 1 } = input as { l: unknown; c: unknown; h: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(c) || !isAnyNumber(h) || !isAnyNumber(alpha)) return null;\n return lchToRgb(\n clampLch({\n l: sanitize(l),\n c: sanitize(c),\n h: sanitize(h),\n alpha: sanitize(alpha),\n })\n );\n};\n\n// CSS Color 4: lch(L C H / alpha). L: 100%=100. C: 100%=150. H: number|angle|none.\nconst LCH_RE = new RegExp(\n `^lch\\\\(\\\\s*(?<l>${NUM_OR_NONE})(?<lp>%?)\\\\s+(?<c>${NUM_OR_NONE})(?<cp>%?)` +\n `\\\\s+(?<h>${NUM_OR_NONE})(?<hu>deg|rad|grad|turn)?` +\n `\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseLchString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = LCH_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const l = parseNum(g.l!); // 100% = 100\n const c = g.cp ? parseNum(g.c!) * 1.5 : parseNum(g.c!); // 100% = 150\n const unit = g.hu?.toLowerCase() ?? 'deg';\n const h = parseNum(g.h!) * (ANGLE_UNITS[unit] ?? 1);\n const alpha = g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1);\n return lchToRgb(clampLch({ l, c, h, alpha }));\n};\n","import { parseLchObject, parseLchString, rgbToLch } from '../colorModels/lch.js';\nimport type { Plugin } from '../colordx.js';\nimport { round } from '../helpers.js';\nimport type { LchColor } from '../types.js';\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toLch(): LchColor;\n toLchString(): string;\n }\n}\n\nconst lch: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toLch = function () {\n const { l, c, h, alpha } = rgbToLch(this._rawRgb());\n return { l: round(l, 2), c: round(c, 2), h: round(h, 2), alpha, colorSpace: 'lch' as const };\n };\n ColordxClass.prototype.toLchString = function () {\n const { l, c, h, alpha } = this.toLch();\n // c is already rounded to 2dp; c === 0 is the effective achromatic check at this precision.\n const H = c === 0 ? 'none' : h;\n return alpha < 1 ? `lch(${l} ${c} ${H} / ${alpha})` : `lch(${l} ${c} ${H})`;\n };\n parsers.push(parseLchObject, parseLchString);\n formatParsers.push([parseLchObject, 'lch'], [parseLchString, 'lch']);\n};\n\nexport default lch;\n"]} |
@@ -1,2 +0,2 @@ | ||
| import {e,h as h$1}from'../chunk-HFDTK2ZP.mjs';import'../chunk-FXCFKFXK.mjs';import'../chunk-OD65R6MQ.mjs';import {b,h,i as i$1,f,g,d,a,c}from'../chunk-JFPP44S3.mjs';var S=r=>({l:a(r.l,0,100),c:Math.max(0,r.c),h:c(r.h),alpha:a(r.alpha,0,1),colorSpace:"lch"}),w=r=>{let o=e(r),t=b(Math.sqrt(o.a**2+o.b**2),2),n=Math.atan2(o.b,o.a)/Math.PI*180;return {l:o.l,c:t,h:t<.0015?0:b(n<0?n+360:n,2),alpha:o.alpha,colorSpace:"lch"}},y=({l:r,c:o,h:t,alpha:n})=>h$1({l:r,a:o*Math.cos(t*Math.PI/180),b:o*Math.sin(t*Math.PI/180),alpha:n,colorSpace:"lab"}),u=r=>{if(!h(r)||r.colorSpace!=="lch"||!i$1(r,["l","c","h"]))return null;let{l:o,c:t,h:n,alpha:c=1}=r;return !f(o)||!f(t)||!f(n)||!f(c)?null:y(S({l:g(o),c:g(t),h:g(n),alpha:g(c)}))},x=/^lch\(\s*([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)\s+(none|[+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,i=r=>{if(typeof r!="string")return null;let o=x.exec(r.trim());if(!o)return null;let t=o[4]?.toLowerCase()??"deg",n=o[3].toLowerCase()==="none"?0:Number(o[3])*(d[t]??1),c=o[5]===void 0?1:Number(o[5])/(o[6]?100:1);return y(S({l:Number(o[1]),c:Number(o[2]),h:n,alpha:c}))};var R=(r,o,t)=>{r.prototype.toLch=function(){let{l:n,c,h:s,alpha:h}=w(this._rawRgb());return {l:b(n,2),c:b(c,2),h:b(s,2),alpha:h,colorSpace:"lch"}},r.prototype.toLchString=function(){let{l:n,c,h:s,alpha:h}=this.toLch(),m=c===0?"none":s;return h<1?`lch(${n}% ${c} ${m} / ${h})`:`lch(${n}% ${c} ${m})`},o.push(u,i),t.push([u,"lch"],[i,"lch"]);},T=R;export{T as default};//# sourceMappingURL=lch.mjs.map | ||
| import {e,h as h$1}from'../chunk-OXYX6VNO.mjs';import'../chunk-FXCFKFXK.mjs';import'../chunk-Q3O3QQ4H.mjs';import {b,h,i,f,g as g$1,l,d,a,c,k}from'../chunk-IOXRZECH.mjs';var R=r=>({l:a(r.l,0,100),c:Math.max(0,r.c),h:c(r.h),alpha:a(r.alpha,0,1),colorSpace:"lch"}),w=r=>{let o=e(r),t=b(Math.sqrt(o.a**2+o.b**2),2),c=Math.atan2(o.b,o.a)/Math.PI*180;return {l:o.l,c:t,h:t<.0015?0:b(c<0?c+360:c,2),alpha:o.alpha,colorSpace:"lch"}},x=({l:r,c:o,h:t,alpha:c})=>h$1({l:r,a:o*Math.cos(t*Math.PI/180),b:o*Math.sin(t*Math.PI/180),alpha:c,colorSpace:"lab"}),g=r=>{if(!h(r)||r.colorSpace!=="lch"||!i(r,["l","c","h"]))return null;let{l:o,c:t,h:c,alpha:l=1}=r;return !f(o)||!f(t)||!f(c)||!f(l)?null:x(R({l:g$1(o),c:g$1(t),h:g$1(c),alpha:g$1(l)}))},y=new RegExp(`^lch\\(\\s*(?<l>${k})(?<lp>%?)\\s+(?<c>${k})(?<cp>%?)\\s+(?<h>${k})(?<hu>deg|rad|grad|turn)?\\s*(?:/\\s*(?<al>${k})(?<alp>%?)\\s*)?\\)$`,"i"),m=r=>{if(typeof r!="string")return null;let o=y.exec(r.trim())?.groups;if(!o)return null;let t=l(o.l),c=o.cp?l(o.c)*1.5:l(o.c),l$1=o.hu?.toLowerCase()??"deg",e=l(o.h)*(d[l$1]??1),a=o.al===void 0?1:l(o.al)/(o.alp?100:1);return x(R({l:t,c,h:e,alpha:a}))};var M=(r,o,t)=>{r.prototype.toLch=function(){let{l:c,c:l,h:e,alpha:a}=w(this._rawRgb());return {l:b(c,2),c:b(l,2),h:b(e,2),alpha:a,colorSpace:"lch"}},r.prototype.toLchString=function(){let{l:c,c:l,h:e,alpha:a}=this.toLch(),L=l===0?"none":e;return a<1?`lch(${c} ${l} ${L} / ${a})`:`lch(${c} ${l} ${L})`},o.push(g,m),t.push([g,"lch"],[m,"lch"]);},P=M;export{P as default};//# sourceMappingURL=lch.mjs.map | ||
| //# sourceMappingURL=lch.mjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/colorModels/lch.ts","../../src/plugins/lch.ts"],"names":["clampLch","lch","clamp","normalizeHue","rgbToLch","rgb","lab","rgbToLab","c","round","h","lchToRgb","l","alpha","labToRgb","parseLchObject","input","isObject","hasKeys","isAnyNumber","sanitize","LCH_RE","parseLchString","m","unit","ANGLE_UNITS","ColordxClass","parsers","formatParsers","H","lch_default"],"mappings":"sKAIA,IAAMA,CAAAA,CAAYC,IAAiD,CACjE,CAAA,CAAGC,EAAMD,CAAAA,CAAI,CAAA,CAAG,EAAG,GAAG,CAAA,CACtB,EAAG,IAAA,CAAK,GAAA,CAAI,EAAGA,CAAAA,CAAI,CAAC,EACpB,CAAA,CAAGE,CAAAA,CAAaF,CAAAA,CAAI,CAAC,CAAA,CACrB,KAAA,CAAOC,EAAMD,CAAAA,CAAI,KAAA,CAAO,EAAG,CAAC,CAAA,CAC5B,WAAY,KACd,CAAA,CAAA,CAEaG,CAAAA,CAAYC,CAAAA,EAA4B,CACnD,IAAMC,EAAMC,CAAAA,CAASF,CAAG,EAClBG,CAAAA,CAAIC,CAAAA,CAAM,KAAK,IAAA,CAAKH,CAAAA,CAAI,CAAA,EAAK,CAAA,CAAIA,CAAAA,CAAI,CAAA,EAAK,CAAC,CAAA,CAAG,CAAC,EAC/CI,CAAAA,CAAK,IAAA,CAAK,MAAMJ,CAAAA,CAAI,CAAA,CAAGA,EAAI,CAAC,CAAA,CAAI,KAAK,EAAA,CAAM,GAAA,CACjD,OAAO,CACL,CAAA,CAAGA,EAAI,CAAA,CACP,CAAA,CAAAE,CAAAA,CAEA,CAAA,CAAGA,CAAAA,CAAI,KAAA,CAAS,EAAIC,CAAAA,CAAMC,CAAAA,CAAI,EAAIA,CAAAA,CAAI,GAAA,CAAMA,EAAG,CAAC,CAAA,CAChD,KAAA,CAAOJ,CAAAA,CAAI,KAAA,CACX,UAAA,CAAY,KACd,CACF,CAAA,CAEaK,EAAW,CAAC,CAAE,EAAAC,CAAAA,CAAG,CAAA,CAAAJ,CAAAA,CAAG,CAAA,CAAAE,CAAAA,CAAG,KAAA,CAAAG,CAAM,CAAA,GACxCC,GAAAA,CAAS,CACP,CAAA,CAAAF,CAAAA,CACA,EAAGJ,CAAAA,CAAI,IAAA,CAAK,IAAKE,CAAAA,CAAI,IAAA,CAAK,GAAM,GAAG,CAAA,CACnC,EAAGF,CAAAA,CAAI,IAAA,CAAK,IAAKE,CAAAA,CAAI,IAAA,CAAK,EAAA,CAAM,GAAG,CAAA,CACnC,KAAA,CAAAG,EACA,UAAA,CAAY,KACd,CAAC,CAAA,CAEUE,CAAAA,CAAkBC,GAAoC,CAGjE,GAFI,CAACC,CAAAA,CAASD,CAAK,CAAA,EACdA,EAAmC,UAAA,GAAe,KAAA,EACnD,CAACE,GAAAA,CAAQF,CAAAA,CAAO,CAAC,GAAA,CAAK,GAAA,CAAK,GAAG,CAAC,CAAA,CAAG,OAAO,KAC7C,GAAM,CAAE,EAAAJ,CAAAA,CAAG,CAAA,CAAAJ,EAAG,CAAA,CAAAE,CAAAA,CAAG,MAAAG,CAAAA,CAAQ,CAAE,EAAIG,CAAAA,CAC/B,OAAI,CAACG,CAAAA,CAAYP,CAAC,GAAK,CAACO,CAAAA,CAAYX,CAAC,CAAA,EAAK,CAACW,CAAAA,CAAYT,CAAC,CAAA,EAAK,CAACS,EAAYN,CAAK,CAAA,CAAU,KAClFF,CAAAA,CACLX,CAAAA,CAAS,CACP,CAAA,CAAGoB,CAAAA,CAASR,CAAC,EACb,CAAA,CAAGQ,CAAAA,CAASZ,CAAC,CAAA,CACb,CAAA,CAAGY,EAASV,CAAC,CAAA,CACb,KAAA,CAAOU,CAAAA,CAASP,CAAK,CACvB,CAAC,CACH,CACF,EAEMQ,CAAAA,CACJ,mIAAA,CAEWC,EAAkBN,CAAAA,EAAoC,CACjE,GAAI,OAAOA,CAAAA,EAAU,SAAU,OAAO,IAAA,CACtC,IAAMO,CAAAA,CAAIF,CAAAA,CAAO,KAAKL,CAAAA,CAAM,IAAA,EAAM,CAAA,CAClC,GAAI,CAACO,EAAG,OAAO,IAAA,CACf,IAAMC,CAAAA,CAAOD,CAAAA,CAAE,CAAC,CAAA,EAAG,WAAA,EAAY,EAAK,KAAA,CAC9Bb,CAAAA,CAAIa,CAAAA,CAAE,CAAC,CAAA,CAAG,WAAA,KAAkB,MAAA,CAAS,CAAA,CAAI,OAAOA,CAAAA,CAAE,CAAC,CAAC,CAAA,EAAKE,CAAAA,CAAYD,CAAI,GAAK,CAAA,CAAA,CAC9EX,CAAAA,CAAQU,EAAE,CAAC,CAAA,GAAM,OAAY,CAAA,CAAI,MAAA,CAAOA,EAAE,CAAC,CAAC,GAAKA,CAAAA,CAAE,CAAC,EAAI,GAAA,CAAM,CAAA,CAAA,CACpE,OAAOZ,CAAAA,CAASX,CAAAA,CAAS,CAAE,CAAA,CAAG,MAAA,CAAOuB,CAAAA,CAAE,CAAC,CAAC,CAAA,CAAG,EAAG,MAAA,CAAOA,CAAAA,CAAE,CAAC,CAAC,CAAA,CAAG,CAAA,CAAAb,CAAAA,CAAG,KAAA,CAAAG,CAAM,CAAC,CAAC,CAC1E,EClDA,IAAMZ,CAAAA,CAAc,CAACyB,CAAAA,CAAcC,CAAAA,CAASC,CAAAA,GAAkB,CAC5DF,CAAAA,CAAa,SAAA,CAAU,MAAQ,UAAY,CACzC,GAAM,CAAE,CAAA,CAAAd,EAAG,CAAA,CAAG,CAAA,CAAAF,EAAG,KAAA,CAAAG,CAAM,EAAIT,CAAAA,CAAS,IAAA,CAAK,SAAS,CAAA,CAClD,OAAO,CAAE,CAAA,CAAGK,CAAAA,CAAMG,CAAAA,CAAG,CAAC,CAAA,CAAG,EAAGH,CAAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAAG,CAAA,CAAGA,EAAMC,CAAAA,CAAG,CAAC,CAAA,CAAG,KAAA,CAAAG,CAAAA,CAAO,UAAA,CAAY,KAAe,CAC7F,CAAA,CACAa,EAAa,SAAA,CAAU,WAAA,CAAc,UAAY,CAC/C,GAAM,CAAE,CAAA,CAAAd,CAAAA,CAAG,CAAA,CAAG,EAAAF,CAAAA,CAAG,KAAA,CAAAG,CAAM,CAAA,CAAI,IAAA,CAAK,OAAM,CAEhCgB,CAAAA,CAAI,CAAA,GAAM,CAAA,CAAI,MAAA,CAASnB,CAAAA,CAC7B,OAAOG,CAAAA,CAAQ,CAAA,CAAI,OAAOD,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,CAAA,EAAIiB,CAAC,CAAA,GAAA,EAAMhB,CAAK,CAAA,CAAA,CAAA,CAAM,CAAA,IAAA,EAAOD,CAAC,CAAA,EAAA,EAAK,CAAC,IAAIiB,CAAC,CAAA,CAAA,CAC5E,EACAF,CAAAA,CAAQ,IAAA,CAAKZ,CAAAA,CAAgBO,CAAc,CAAA,CAC3CM,CAAAA,CAAc,KAAK,CAACb,CAAAA,CAAgB,KAAK,CAAA,CAAG,CAACO,EAAgB,KAAK,CAAC,EACrE,CAAA,CAEOQ,CAAAA,CAAQ7B","file":"lch.mjs","sourcesContent":["import { ANGLE_UNITS, clamp, hasKeys, isAnyNumber, isObject, normalizeHue, round, sanitize } from '../helpers.js';\nimport type { LchColor, RgbColor } from '../types.js';\nimport { labToRgb, rgbToLab } from './lab.js';\n\nconst clampLch = (lch: Omit<LchColor, 'colorSpace'>): LchColor => ({\n l: clamp(lch.l, 0, 100),\n c: Math.max(0, lch.c),\n h: normalizeHue(lch.h),\n alpha: clamp(lch.alpha, 0, 1),\n colorSpace: 'lch',\n});\n\nexport const rgbToLch = (rgb: RgbColor): LchColor => {\n const lab = rgbToLab(rgb);\n const c = round(Math.sqrt(lab.a ** 2 + lab.b ** 2), 2);\n const h = (Math.atan2(lab.b, lab.a) / Math.PI) * 180;\n return {\n l: lab.l,\n c,\n // Achromatic threshold on LCH scale (0–~150): below this chroma the hue is numerically unstable.\n h: c < 0.0015 ? 0 : round(h < 0 ? h + 360 : h, 2),\n alpha: lab.alpha,\n colorSpace: 'lch',\n };\n};\n\nexport const lchToRgb = ({ l, c, h, alpha }: LchColor): RgbColor =>\n labToRgb({\n l,\n a: c * Math.cos((h * Math.PI) / 180),\n b: c * Math.sin((h * Math.PI) / 180),\n alpha,\n colorSpace: 'lab',\n });\n\nexport const parseLchObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if ((input as { colorSpace?: unknown }).colorSpace !== 'lch') return null;\n if (!hasKeys(input, ['l', 'c', 'h'])) return null;\n const { l, c, h, alpha = 1 } = input as { l: unknown; c: unknown; h: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(c) || !isAnyNumber(h) || !isAnyNumber(alpha)) return null;\n return lchToRgb(\n clampLch({\n l: sanitize(l),\n c: sanitize(c),\n h: sanitize(h),\n alpha: sanitize(alpha),\n })\n );\n};\n\nconst LCH_RE =\n /^lch\\(\\s*([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)\\s+(none|[+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nexport const parseLchString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = LCH_RE.exec(input.trim());\n if (!m) return null;\n const unit = m[4]?.toLowerCase() ?? 'deg';\n const h = m[3]!.toLowerCase() === 'none' ? 0 : Number(m[3]) * (ANGLE_UNITS[unit] ?? 1);\n const alpha = m[5] === undefined ? 1 : Number(m[5]) / (m[6] ? 100 : 1);\n return lchToRgb(clampLch({ l: Number(m[1]), c: Number(m[2]), h, alpha }));\n};\n","import { parseLchObject, parseLchString, rgbToLch } from '../colorModels/lch.js';\nimport type { Plugin } from '../colordx.js';\nimport { round } from '../helpers.js';\nimport type { LchColor } from '../types.js';\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toLch(): LchColor;\n toLchString(): string;\n }\n}\n\nconst lch: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toLch = function () {\n const { l, c, h, alpha } = rgbToLch(this._rawRgb());\n return { l: round(l, 2), c: round(c, 2), h: round(h, 2), alpha, colorSpace: 'lch' as const };\n };\n ColordxClass.prototype.toLchString = function () {\n const { l, c, h, alpha } = this.toLch();\n // c is already rounded to 2dp; c === 0 is the effective achromatic check at this precision.\n const H = c === 0 ? 'none' : h;\n return alpha < 1 ? `lch(${l}% ${c} ${H} / ${alpha})` : `lch(${l}% ${c} ${H})`;\n };\n parsers.push(parseLchObject, parseLchString);\n formatParsers.push([parseLchObject, 'lch'], [parseLchString, 'lch']);\n};\n\nexport default lch;\n"]} | ||
| {"version":3,"sources":["../../src/colorModels/lch.ts","../../src/plugins/lch.ts"],"names":["clampLch","lch","clamp","normalizeHue","rgbToLch","rgb","lab","rgbToLab","c","round","h","lchToRgb","l","alpha","labToRgb","parseLchObject","input","isObject","hasKeys","isAnyNumber","sanitize","LCH_RE","NUM_OR_NONE","parseLchString","g","parseNum","unit","ANGLE_UNITS","ColordxClass","parsers","formatParsers","H","lch_default"],"mappings":"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","file":"lch.mjs","sourcesContent":["import {\n ANGLE_UNITS,\n NUM_OR_NONE,\n clamp,\n hasKeys,\n isAnyNumber,\n isObject,\n normalizeHue,\n parseNum,\n round,\n sanitize,\n} from '../helpers.js';\nimport type { LchColor, RgbColor } from '../types.js';\nimport { labToRgb, rgbToLab } from './lab.js';\n\nconst clampLch = (lch: Omit<LchColor, 'colorSpace'>): LchColor => ({\n l: clamp(lch.l, 0, 100),\n c: Math.max(0, lch.c),\n h: normalizeHue(lch.h),\n alpha: clamp(lch.alpha, 0, 1),\n colorSpace: 'lch',\n});\n\nexport const rgbToLch = (rgb: RgbColor): LchColor => {\n const lab = rgbToLab(rgb);\n const c = round(Math.sqrt(lab.a ** 2 + lab.b ** 2), 2);\n const h = (Math.atan2(lab.b, lab.a) / Math.PI) * 180;\n return {\n l: lab.l,\n c,\n // Achromatic threshold on LCH scale (0–~150): below this chroma the hue is numerically unstable.\n h: c < 0.0015 ? 0 : round(h < 0 ? h + 360 : h, 2),\n alpha: lab.alpha,\n colorSpace: 'lch',\n };\n};\n\nexport const lchToRgb = ({ l, c, h, alpha }: LchColor): RgbColor =>\n labToRgb({\n l,\n a: c * Math.cos((h * Math.PI) / 180),\n b: c * Math.sin((h * Math.PI) / 180),\n alpha,\n colorSpace: 'lab',\n });\n\nexport const parseLchObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if ((input as { colorSpace?: unknown }).colorSpace !== 'lch') return null;\n if (!hasKeys(input, ['l', 'c', 'h'])) return null;\n const { l, c, h, alpha = 1 } = input as { l: unknown; c: unknown; h: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(c) || !isAnyNumber(h) || !isAnyNumber(alpha)) return null;\n return lchToRgb(\n clampLch({\n l: sanitize(l),\n c: sanitize(c),\n h: sanitize(h),\n alpha: sanitize(alpha),\n })\n );\n};\n\n// CSS Color 4: lch(L C H / alpha). L: 100%=100. C: 100%=150. H: number|angle|none.\nconst LCH_RE = new RegExp(\n `^lch\\\\(\\\\s*(?<l>${NUM_OR_NONE})(?<lp>%?)\\\\s+(?<c>${NUM_OR_NONE})(?<cp>%?)` +\n `\\\\s+(?<h>${NUM_OR_NONE})(?<hu>deg|rad|grad|turn)?` +\n `\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseLchString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = LCH_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const l = parseNum(g.l!); // 100% = 100\n const c = g.cp ? parseNum(g.c!) * 1.5 : parseNum(g.c!); // 100% = 150\n const unit = g.hu?.toLowerCase() ?? 'deg';\n const h = parseNum(g.h!) * (ANGLE_UNITS[unit] ?? 1);\n const alpha = g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1);\n return lchToRgb(clampLch({ l, c, h, alpha }));\n};\n","import { parseLchObject, parseLchString, rgbToLch } from '../colorModels/lch.js';\nimport type { Plugin } from '../colordx.js';\nimport { round } from '../helpers.js';\nimport type { LchColor } from '../types.js';\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toLch(): LchColor;\n toLchString(): string;\n }\n}\n\nconst lch: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.prototype.toLch = function () {\n const { l, c, h, alpha } = rgbToLch(this._rawRgb());\n return { l: round(l, 2), c: round(c, 2), h: round(h, 2), alpha, colorSpace: 'lch' as const };\n };\n ColordxClass.prototype.toLchString = function () {\n const { l, c, h, alpha } = this.toLch();\n // c is already rounded to 2dp; c === 0 is the effective achromatic check at this precision.\n const H = c === 0 ? 'none' : h;\n return alpha < 1 ? `lch(${l} ${c} ${H} / ${alpha})` : `lch(${l} ${c} ${H})`;\n };\n parsers.push(parseLchObject, parseLchString);\n formatParsers.push([parseLchObject, 'lch'], [parseLchString, 'lch']);\n};\n\nexport default lch;\n"]} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/plugins/minify.ts"],"names":["shortenLeadingZero","tryShortHex","hex","alpha","chars","isAlphaHexLossless","byte","minifyPlugin","ColordxClass","options","opts","r","g","b","targetHex","candidates","short","aa","p","h","s","l","ha","sa","la","str","name","shortest","c","minify_default"],"mappings":"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","file":"minify.cjs","sourcesContent":["import type { Colordx, Plugin } from '../colordx.js';\n\ninterface MinifyOptions {\n hex?: boolean;\n rgb?: boolean;\n hsl?: boolean;\n alphaHex?: boolean;\n transparent?: boolean;\n name?: boolean;\n}\n\ndeclare module '@colordx/core' {\n interface Colordx {\n minify(options?: MinifyOptions): string;\n }\n}\n\nconst shortenLeadingZero = (n: number): string => (n > 0 && n < 1 ? n.toString().replace('0.', '.') : String(n));\n\nconst tryShortHex = (hex: string, alpha: number): string | null => {\n const chars = hex.split('');\n if (alpha !== 1) {\n if (chars[1] === chars[2] && chars[3] === chars[4] && chars[5] === chars[6] && chars[7] === chars[8]) {\n return `#${chars[1]}${chars[3]}${chars[5]}${chars[7]}`;\n }\n return null;\n }\n if (chars[1] === chars[2] && chars[3] === chars[4] && chars[5] === chars[6])\n return `#${chars[1]}${chars[3]}${chars[5]}`;\n return null;\n};\n\n// Returns true if alpha (0–1) can be represented as an 8-bit hex byte without perceptible loss.\n// Uses 2-decimal-place comparison to match browser rounding behaviour.\nconst isAlphaHexLossless = (alpha: number): boolean => {\n const byte = Math.round(alpha * 255);\n return Math.round((byte / 255) * 100) === Math.round(alpha * 100);\n};\n\nconst minifyPlugin: Plugin = (ColordxClass) => {\n ColordxClass.prototype.minify = function (this: Colordx, options: MinifyOptions = {}) {\n const opts = { hex: true, rgb: true, hsl: true, ...options };\n const { r, g, b } = this.toRgb();\n const alpha = this.alpha();\n const targetHex = this.toHex();\n const candidates: string[] = [];\n\n if (opts.hex && (alpha === 1 || (opts.alphaHex && isAlphaHexLossless(alpha)))) {\n const short = tryShortHex(targetHex, alpha);\n candidates.push(short ?? targetHex);\n }\n\n if (opts.rgb) {\n const aa = shortenLeadingZero(alpha);\n candidates.push(alpha === 1 ? `rgb(${r},${g},${b})` : `rgba(${r},${g},${b},${aa})`);\n }\n\n if (opts.hsl) {\n const aa = shortenLeadingZero(alpha);\n for (let p = 0; p <= 2; p++) {\n const { h, s, l } = this.toHsl(p);\n const ha = shortenLeadingZero(h),\n sa = shortenLeadingZero(s),\n la = shortenLeadingZero(l);\n const str = alpha === 1 ? `hsl(${ha},${sa}%,${la}%)` : `hsla(${ha},${sa}%,${la}%,${aa})`;\n if (new ColordxClass(str).toHex() === targetHex) {\n candidates.push(str);\n break;\n }\n }\n }\n\n if (opts.transparent && r === 0 && g === 0 && b === 0 && alpha === 0) {\n candidates.push('transparent');\n } else if (\n // else if: transparent takes priority over name even though it is also a CSS named color\n alpha === 1 &&\n opts.name &&\n typeof (this as { toName?: () => string | undefined }).toName === 'function'\n ) {\n const name = (this as { toName: () => string | undefined }).toName();\n if (name) candidates.push(name);\n }\n\n if (candidates.length === 0) return targetHex;\n return candidates.reduce((shortest, c) => (c.length < shortest.length ? c : shortest));\n };\n};\n\nexport default minifyPlugin;\n"]} | ||
| {"version":3,"sources":["../../src/plugins/minify.ts"],"names":["shortenLeadingZero","tryShortHex","hex","alpha","chars","isAlphaHexLossless","byte","minifyPlugin","ColordxClass","options","opts","r","g","b","targetHex","candidates","short","aa","p","h","s","l","ha","sa","la","str","name","shortest","c","minify_default"],"mappings":"aAiBA,IAAMA,EAAsB,CAAA,EAAuB,CAAA,CAAI,GAAK,CAAA,CAAI,CAAA,CAAI,EAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,IAAA,CAAM,GAAG,CAAA,CAAI,MAAA,CAAO,CAAC,CAAA,CAExGC,CAAAA,CAAc,CAACC,CAAAA,CAAaC,CAAAA,GAAiC,CACjE,IAAMC,EAAQF,CAAAA,CAAI,KAAA,CAAM,EAAE,CAAA,CAC1B,OAAIC,IAAU,CAAA,CACRC,CAAAA,CAAM,CAAC,CAAA,GAAMA,CAAAA,CAAM,CAAC,CAAA,EAAKA,CAAAA,CAAM,CAAC,CAAA,GAAMA,CAAAA,CAAM,CAAC,CAAA,EAAKA,CAAAA,CAAM,CAAC,CAAA,GAAMA,EAAM,CAAC,CAAA,EAAKA,EAAM,CAAC,CAAA,GAAMA,EAAM,CAAC,CAAA,CAC1F,CAAA,CAAA,EAAIA,CAAAA,CAAM,CAAC,CAAC,CAAA,EAAGA,EAAM,CAAC,CAAC,GAAGA,CAAAA,CAAM,CAAC,CAAC,CAAA,EAAGA,EAAM,CAAC,CAAC,GAE/C,IAAA,CAELA,CAAAA,CAAM,CAAC,CAAA,GAAMA,CAAAA,CAAM,CAAC,CAAA,EAAKA,CAAAA,CAAM,CAAC,CAAA,GAAMA,CAAAA,CAAM,CAAC,CAAA,EAAKA,CAAAA,CAAM,CAAC,CAAA,GAAMA,CAAAA,CAAM,CAAC,CAAA,CACjE,IAAIA,CAAAA,CAAM,CAAC,CAAC,CAAA,EAAGA,CAAAA,CAAM,CAAC,CAAC,CAAA,EAAGA,CAAAA,CAAM,CAAC,CAAC,CAAA,CAAA,CACpC,IACT,EAIMC,CAAAA,CAAsBF,CAAAA,EAA2B,CACrD,IAAMG,CAAAA,CAAO,IAAA,CAAK,KAAA,CAAMH,EAAQ,GAAG,CAAA,CACnC,OAAO,IAAA,CAAK,KAAA,CAAOG,EAAO,GAAA,CAAO,GAAG,IAAM,IAAA,CAAK,KAAA,CAAMH,EAAQ,GAAG,CAClE,EAEMI,CAAAA,CAAwBC,CAAAA,EAAiB,CAC7CA,CAAAA,CAAa,SAAA,CAAU,MAAA,CAAS,SAAyBC,EAAyB,EAAC,CAAG,CACpF,IAAMC,CAAAA,CAAO,CAAE,GAAA,CAAK,IAAA,CAAM,IAAK,IAAA,CAAM,GAAA,CAAK,KAAM,GAAGD,CAAQ,EACrD,CAAE,CAAA,CAAAE,EAAG,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAAC,CAAE,EAAI,IAAA,CAAK,KAAA,GACnBV,CAAAA,CAAQ,IAAA,CAAK,OAAM,CACnBW,CAAAA,CAAY,KAAK,KAAA,EAAM,CACvBC,EAAuB,EAAC,CAE9B,GAAIL,CAAAA,CAAK,GAAA,GAAQP,IAAU,CAAA,EAAMO,CAAAA,CAAK,QAAA,EAAYL,CAAAA,CAAmBF,CAAK,CAAA,CAAA,CAAK,CAC7E,IAAMa,CAAAA,CAAQf,CAAAA,CAAYa,EAAWX,CAAK,CAAA,CAC1CY,CAAAA,CAAW,IAAA,CAAKC,GAASF,CAAS,EACpC,CAKA,GAAIJ,CAAAA,CAAK,IAAK,CACZ,IAAMO,CAAAA,CAAKjB,CAAAA,CAAmBG,CAAK,CAAA,CACnCY,CAAAA,CAAW,KAAKZ,CAAAA,GAAU,CAAA,CAAI,OAAOQ,CAAC,CAAA,CAAA,EAAIC,CAAC,CAAA,CAAA,EAAIC,CAAC,IAAM,CAAA,KAAA,EAAQF,CAAC,IAAIC,CAAC,CAAA,CAAA,EAAIC,CAAC,CAAA,CAAA,EAAII,CAAE,CAAA,CAAA,CAAG,EACpF,CAEA,GAAIP,CAAAA,CAAK,IAAK,CACZ,IAAMO,EAAKjB,CAAAA,CAAmBG,CAAK,CAAA,CACnC,IAAA,IAASe,EAAI,CAAA,CAAGA,CAAAA,EAAK,EAAGA,CAAAA,EAAAA,CAAK,CAC3B,GAAM,CAAE,CAAA,CAAAC,CAAAA,CAAG,CAAA,CAAAC,EAAG,CAAA,CAAAC,CAAE,EAAI,IAAA,CAAK,KAAA,CAAMH,CAAC,CAAA,CAC1BI,CAAAA,CAAKtB,EAAmBmB,CAAC,CAAA,CAC7BI,EAAKvB,CAAAA,CAAmBoB,CAAC,EACzBI,CAAAA,CAAKxB,CAAAA,CAAmBqB,CAAC,CAAA,CACrBI,CAAAA,CAAMtB,CAAAA,GAAU,CAAA,CAAI,OAAOmB,CAAE,CAAA,CAAA,EAAIC,CAAE,CAAA,EAAA,EAAKC,CAAE,KAAO,CAAA,KAAA,EAAQF,CAAE,CAAA,CAAA,EAAIC,CAAE,KAAKC,CAAE,CAAA,EAAA,EAAKP,CAAE,CAAA,CAAA,CAAA,CACrF,GAAI,IAAIT,CAAAA,CAAaiB,CAAG,CAAA,CAAE,KAAA,KAAYX,CAAAA,CAAW,CAC/CC,EAAW,IAAA,CAAKU,CAAG,EACnB,KACF,CACF,CACF,CAEA,GAAIf,EAAK,WAAA,EAAeC,CAAAA,GAAM,GAAKC,CAAAA,GAAM,CAAA,EAAKC,IAAM,CAAA,EAAKV,CAAAA,GAAU,CAAA,CACjEY,CAAAA,CAAW,KAAK,aAAa,CAAA,CAAA,KAAA,GAG7BZ,IAAU,CAAA,EACVO,CAAAA,CAAK,MACL,OAAQ,IAAA,CAA+C,QAAW,UAAA,CAClE,CACA,IAAMgB,CAAAA,CAAQ,IAAA,CAA8C,QAAO,CAC/DA,CAAAA,EAAMX,EAAW,IAAA,CAAKW,CAAI,EAChC,CAEA,OAAIX,CAAAA,CAAW,MAAA,GAAW,EAAUD,CAAAA,CAC7BC,CAAAA,CAAW,OAAO,CAACY,CAAAA,CAAUC,IAAOA,CAAAA,CAAE,MAAA,CAASD,EAAS,MAAA,CAASC,CAAAA,CAAID,CAAS,CACvF,EACF,EAEOE,CAAAA,CAAQtB","file":"minify.cjs","sourcesContent":["import type { Colordx, Plugin } from '../colordx.js';\n\ninterface MinifyOptions {\n hex?: boolean;\n rgb?: boolean;\n hsl?: boolean;\n alphaHex?: boolean;\n transparent?: boolean;\n name?: boolean;\n}\n\ndeclare module '@colordx/core' {\n interface Colordx {\n minify(options?: MinifyOptions): string;\n }\n}\n\nconst shortenLeadingZero = (n: number): string => (n > 0 && n < 1 ? n.toString().replace('0.', '.') : String(n));\n\nconst tryShortHex = (hex: string, alpha: number): string | null => {\n const chars = hex.split('');\n if (alpha !== 1) {\n if (chars[1] === chars[2] && chars[3] === chars[4] && chars[5] === chars[6] && chars[7] === chars[8]) {\n return `#${chars[1]}${chars[3]}${chars[5]}${chars[7]}`;\n }\n return null;\n }\n if (chars[1] === chars[2] && chars[3] === chars[4] && chars[5] === chars[6])\n return `#${chars[1]}${chars[3]}${chars[5]}`;\n return null;\n};\n\n// Returns true if alpha (0–1) can be represented as an 8-bit hex byte without perceptible loss.\n// Uses 2-decimal-place comparison to match browser rounding behaviour.\nconst isAlphaHexLossless = (alpha: number): boolean => {\n const byte = Math.round(alpha * 255);\n return Math.round((byte / 255) * 100) === Math.round(alpha * 100);\n};\n\nconst minifyPlugin: Plugin = (ColordxClass) => {\n ColordxClass.prototype.minify = function (this: Colordx, options: MinifyOptions = {}) {\n const opts = { hex: true, rgb: true, hsl: true, ...options };\n const { r, g, b } = this.toRgb();\n const alpha = this.alpha();\n const targetHex = this.toHex();\n const candidates: string[] = [];\n\n if (opts.hex && (alpha === 1 || (opts.alphaHex && isAlphaHexLossless(alpha)))) {\n const short = tryShortHex(targetHex, alpha);\n candidates.push(short ?? targetHex);\n }\n\n // Legacy comma syntax below is intentional — byte-optimal AND IE11-safe for the\n // cssnano pipeline. Do NOT delegate to toRgbString() / toHslString(); those emit\n // modern CSS Color 4 space syntax which pre-2019 browsers can't parse.\n if (opts.rgb) {\n const aa = shortenLeadingZero(alpha);\n candidates.push(alpha === 1 ? `rgb(${r},${g},${b})` : `rgba(${r},${g},${b},${aa})`);\n }\n\n if (opts.hsl) {\n const aa = shortenLeadingZero(alpha);\n for (let p = 0; p <= 2; p++) {\n const { h, s, l } = this.toHsl(p);\n const ha = shortenLeadingZero(h),\n sa = shortenLeadingZero(s),\n la = shortenLeadingZero(l);\n const str = alpha === 1 ? `hsl(${ha},${sa}%,${la}%)` : `hsla(${ha},${sa}%,${la}%,${aa})`;\n if (new ColordxClass(str).toHex() === targetHex) {\n candidates.push(str);\n break;\n }\n }\n }\n\n if (opts.transparent && r === 0 && g === 0 && b === 0 && alpha === 0) {\n candidates.push('transparent');\n } else if (\n // else if: transparent takes priority over name even though it is also a CSS named color\n alpha === 1 &&\n opts.name &&\n typeof (this as { toName?: () => string | undefined }).toName === 'function'\n ) {\n const name = (this as { toName: () => string | undefined }).toName();\n if (name) candidates.push(name);\n }\n\n if (candidates.length === 0) return targetHex;\n return candidates.reduce((shortest, c) => (c.length < shortest.length ? c : shortest));\n };\n};\n\nexport default minifyPlugin;\n"]} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/plugins/minify.ts"],"names":["shortenLeadingZero","tryShortHex","hex","alpha","chars","isAlphaHexLossless","byte","minifyPlugin","ColordxClass","options","opts","r","g","b","targetHex","candidates","short","aa","p","h","s","l","ha","sa","la","str","name","shortest","c","minify_default"],"mappings":"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","file":"minify.mjs","sourcesContent":["import type { Colordx, Plugin } from '../colordx.js';\n\ninterface MinifyOptions {\n hex?: boolean;\n rgb?: boolean;\n hsl?: boolean;\n alphaHex?: boolean;\n transparent?: boolean;\n name?: boolean;\n}\n\ndeclare module '@colordx/core' {\n interface Colordx {\n minify(options?: MinifyOptions): string;\n }\n}\n\nconst shortenLeadingZero = (n: number): string => (n > 0 && n < 1 ? n.toString().replace('0.', '.') : String(n));\n\nconst tryShortHex = (hex: string, alpha: number): string | null => {\n const chars = hex.split('');\n if (alpha !== 1) {\n if (chars[1] === chars[2] && chars[3] === chars[4] && chars[5] === chars[6] && chars[7] === chars[8]) {\n return `#${chars[1]}${chars[3]}${chars[5]}${chars[7]}`;\n }\n return null;\n }\n if (chars[1] === chars[2] && chars[3] === chars[4] && chars[5] === chars[6])\n return `#${chars[1]}${chars[3]}${chars[5]}`;\n return null;\n};\n\n// Returns true if alpha (0–1) can be represented as an 8-bit hex byte without perceptible loss.\n// Uses 2-decimal-place comparison to match browser rounding behaviour.\nconst isAlphaHexLossless = (alpha: number): boolean => {\n const byte = Math.round(alpha * 255);\n return Math.round((byte / 255) * 100) === Math.round(alpha * 100);\n};\n\nconst minifyPlugin: Plugin = (ColordxClass) => {\n ColordxClass.prototype.minify = function (this: Colordx, options: MinifyOptions = {}) {\n const opts = { hex: true, rgb: true, hsl: true, ...options };\n const { r, g, b } = this.toRgb();\n const alpha = this.alpha();\n const targetHex = this.toHex();\n const candidates: string[] = [];\n\n if (opts.hex && (alpha === 1 || (opts.alphaHex && isAlphaHexLossless(alpha)))) {\n const short = tryShortHex(targetHex, alpha);\n candidates.push(short ?? targetHex);\n }\n\n if (opts.rgb) {\n const aa = shortenLeadingZero(alpha);\n candidates.push(alpha === 1 ? `rgb(${r},${g},${b})` : `rgba(${r},${g},${b},${aa})`);\n }\n\n if (opts.hsl) {\n const aa = shortenLeadingZero(alpha);\n for (let p = 0; p <= 2; p++) {\n const { h, s, l } = this.toHsl(p);\n const ha = shortenLeadingZero(h),\n sa = shortenLeadingZero(s),\n la = shortenLeadingZero(l);\n const str = alpha === 1 ? `hsl(${ha},${sa}%,${la}%)` : `hsla(${ha},${sa}%,${la}%,${aa})`;\n if (new ColordxClass(str).toHex() === targetHex) {\n candidates.push(str);\n break;\n }\n }\n }\n\n if (opts.transparent && r === 0 && g === 0 && b === 0 && alpha === 0) {\n candidates.push('transparent');\n } else if (\n // else if: transparent takes priority over name even though it is also a CSS named color\n alpha === 1 &&\n opts.name &&\n typeof (this as { toName?: () => string | undefined }).toName === 'function'\n ) {\n const name = (this as { toName: () => string | undefined }).toName();\n if (name) candidates.push(name);\n }\n\n if (candidates.length === 0) return targetHex;\n return candidates.reduce((shortest, c) => (c.length < shortest.length ? c : shortest));\n };\n};\n\nexport default minifyPlugin;\n"]} | ||
| {"version":3,"sources":["../../src/plugins/minify.ts"],"names":["shortenLeadingZero","tryShortHex","hex","alpha","chars","isAlphaHexLossless","byte","minifyPlugin","ColordxClass","options","opts","r","g","b","targetHex","candidates","short","aa","p","h","s","l","ha","sa","la","str","name","shortest","c","minify_default"],"mappings":"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","file":"minify.mjs","sourcesContent":["import type { Colordx, Plugin } from '../colordx.js';\n\ninterface MinifyOptions {\n hex?: boolean;\n rgb?: boolean;\n hsl?: boolean;\n alphaHex?: boolean;\n transparent?: boolean;\n name?: boolean;\n}\n\ndeclare module '@colordx/core' {\n interface Colordx {\n minify(options?: MinifyOptions): string;\n }\n}\n\nconst shortenLeadingZero = (n: number): string => (n > 0 && n < 1 ? n.toString().replace('0.', '.') : String(n));\n\nconst tryShortHex = (hex: string, alpha: number): string | null => {\n const chars = hex.split('');\n if (alpha !== 1) {\n if (chars[1] === chars[2] && chars[3] === chars[4] && chars[5] === chars[6] && chars[7] === chars[8]) {\n return `#${chars[1]}${chars[3]}${chars[5]}${chars[7]}`;\n }\n return null;\n }\n if (chars[1] === chars[2] && chars[3] === chars[4] && chars[5] === chars[6])\n return `#${chars[1]}${chars[3]}${chars[5]}`;\n return null;\n};\n\n// Returns true if alpha (0–1) can be represented as an 8-bit hex byte without perceptible loss.\n// Uses 2-decimal-place comparison to match browser rounding behaviour.\nconst isAlphaHexLossless = (alpha: number): boolean => {\n const byte = Math.round(alpha * 255);\n return Math.round((byte / 255) * 100) === Math.round(alpha * 100);\n};\n\nconst minifyPlugin: Plugin = (ColordxClass) => {\n ColordxClass.prototype.minify = function (this: Colordx, options: MinifyOptions = {}) {\n const opts = { hex: true, rgb: true, hsl: true, ...options };\n const { r, g, b } = this.toRgb();\n const alpha = this.alpha();\n const targetHex = this.toHex();\n const candidates: string[] = [];\n\n if (opts.hex && (alpha === 1 || (opts.alphaHex && isAlphaHexLossless(alpha)))) {\n const short = tryShortHex(targetHex, alpha);\n candidates.push(short ?? targetHex);\n }\n\n // Legacy comma syntax below is intentional — byte-optimal AND IE11-safe for the\n // cssnano pipeline. Do NOT delegate to toRgbString() / toHslString(); those emit\n // modern CSS Color 4 space syntax which pre-2019 browsers can't parse.\n if (opts.rgb) {\n const aa = shortenLeadingZero(alpha);\n candidates.push(alpha === 1 ? `rgb(${r},${g},${b})` : `rgba(${r},${g},${b},${aa})`);\n }\n\n if (opts.hsl) {\n const aa = shortenLeadingZero(alpha);\n for (let p = 0; p <= 2; p++) {\n const { h, s, l } = this.toHsl(p);\n const ha = shortenLeadingZero(h),\n sa = shortenLeadingZero(s),\n la = shortenLeadingZero(l);\n const str = alpha === 1 ? `hsl(${ha},${sa}%,${la}%)` : `hsla(${ha},${sa}%,${la}%,${aa})`;\n if (new ColordxClass(str).toHex() === targetHex) {\n candidates.push(str);\n break;\n }\n }\n }\n\n if (opts.transparent && r === 0 && g === 0 && b === 0 && alpha === 0) {\n candidates.push('transparent');\n } else if (\n // else if: transparent takes priority over name even though it is also a CSS named color\n alpha === 1 &&\n opts.name &&\n typeof (this as { toName?: () => string | undefined }).toName === 'function'\n ) {\n const name = (this as { toName: () => string | undefined }).toName();\n if (name) candidates.push(name);\n }\n\n if (candidates.length === 0) return targetHex;\n return candidates.reduce((shortest, c) => (c.length < shortest.length ? c : shortest));\n };\n};\n\nexport default minifyPlugin;\n"]} |
@@ -1,2 +0,2 @@ | ||
| 'use strict';var chunkBBEOVRYB_cjs=require('../chunk-BBEOVRYB.cjs');require('../chunk-X5FCFNQN.cjs'),require('../chunk-GYCEEHZT.cjs');var chunkEXPXWBLP_cjs=require('../chunk-EXPXWBLP.cjs');var b=n=>{n.prototype.mix=function(r,e=.5){let t=new n(r).toRgb(),l=this._rawRgb(),o=chunkEXPXWBLP_cjs.a(e,0,1);return new n({r:chunkEXPXWBLP_cjs.b(l.r*(1-o)+t.r*o),g:chunkEXPXWBLP_cjs.b(l.g*(1-o)+t.g*o),b:chunkEXPXWBLP_cjs.b(l.b*(1-o)+t.b*o),alpha:chunkEXPXWBLP_cjs.b(l.alpha*(1-o)+t.alpha*o,3)})},n.prototype.mixOklab=function(r,e=.5){let t=chunkBBEOVRYB_cjs.b(this._rawRgb()),l=chunkBBEOVRYB_cjs.b(new n(r)._rawRgb()),o=chunkEXPXWBLP_cjs.a(e,0,1);return new n(chunkBBEOVRYB_cjs.d({l:t.l*(1-o)+l.l*o,a:t.a*(1-o)+l.a*o,b:t.b*(1-o)+l.b*o,alpha:chunkEXPXWBLP_cjs.b(t.alpha*(1-o)+l.alpha*o,3)}))};let p=(r,e,t)=>e<=0?[]:e===1?[r]:Array.from({length:e},(l,o)=>r.mix(t,o/(e-1)));n.prototype.tints=function(r=5){return p(this,r,"#ffffff")},n.prototype.shades=function(r=5){return p(this,r,"#000000")},n.prototype.tones=function(r=5){return p(this,r,"#808080")},n.prototype.palette=function(r,e="#ffffff"){return p(this,r,e)};},m=b;module.exports=m;//# sourceMappingURL=mix.cjs.map | ||
| 'use strict';var chunk44FDTAPT_cjs=require('../chunk-44FDTAPT.cjs');require('../chunk-X5FCFNQN.cjs'),require('../chunk-3V4MONNR.cjs');var chunkYISEJCI6_cjs=require('../chunk-YISEJCI6.cjs');var b=n=>{n.prototype.mix=function(r,e=.5){let t=new n(r).toRgb(),l=this._rawRgb(),o=chunkYISEJCI6_cjs.a(e,0,1);return new n({r:chunkYISEJCI6_cjs.b(l.r*(1-o)+t.r*o),g:chunkYISEJCI6_cjs.b(l.g*(1-o)+t.g*o),b:chunkYISEJCI6_cjs.b(l.b*(1-o)+t.b*o),alpha:chunkYISEJCI6_cjs.b(l.alpha*(1-o)+t.alpha*o,3)})},n.prototype.mixOklab=function(r,e=.5){let t=chunk44FDTAPT_cjs.b(this._rawRgb()),l=chunk44FDTAPT_cjs.b(new n(r)._rawRgb()),o=chunkYISEJCI6_cjs.a(e,0,1);return new n(chunk44FDTAPT_cjs.d({l:t.l*(1-o)+l.l*o,a:t.a*(1-o)+l.a*o,b:t.b*(1-o)+l.b*o,alpha:chunkYISEJCI6_cjs.b(t.alpha*(1-o)+l.alpha*o,3)}))};let p=(r,e,t)=>e<=0?[]:e===1?[r]:Array.from({length:e},(l,o)=>r.mix(t,o/(e-1)));n.prototype.tints=function(r=5){return p(this,r,"#ffffff")},n.prototype.shades=function(r=5){return p(this,r,"#000000")},n.prototype.tones=function(r=5){return p(this,r,"#808080")},n.prototype.palette=function(r,e="#ffffff"){return p(this,r,e)};},m=b;module.exports=m;//# sourceMappingURL=mix.cjs.map | ||
| //# sourceMappingURL=mix.cjs.map |
@@ -1,2 +0,2 @@ | ||
| import {b as b$2,d}from'../chunk-MUHBYE5R.mjs';import'../chunk-FXCFKFXK.mjs';import'../chunk-OD65R6MQ.mjs';import {a,b as b$1}from'../chunk-JFPP44S3.mjs';var b=n=>{n.prototype.mix=function(r,e=.5){let t=new n(r).toRgb(),l=this._rawRgb(),o=a(e,0,1);return new n({r:b$1(l.r*(1-o)+t.r*o),g:b$1(l.g*(1-o)+t.g*o),b:b$1(l.b*(1-o)+t.b*o),alpha:b$1(l.alpha*(1-o)+t.alpha*o,3)})},n.prototype.mixOklab=function(r,e=.5){let t=b$2(this._rawRgb()),l=b$2(new n(r)._rawRgb()),o=a(e,0,1);return new n(d({l:t.l*(1-o)+l.l*o,a:t.a*(1-o)+l.a*o,b:t.b*(1-o)+l.b*o,alpha:b$1(t.alpha*(1-o)+l.alpha*o,3)}))};let p=(r,e,t)=>e<=0?[]:e===1?[r]:Array.from({length:e},(l,o)=>r.mix(t,o/(e-1)));n.prototype.tints=function(r=5){return p(this,r,"#ffffff")},n.prototype.shades=function(r=5){return p(this,r,"#000000")},n.prototype.tones=function(r=5){return p(this,r,"#808080")},n.prototype.palette=function(r,e="#ffffff"){return p(this,r,e)};},m=b;export{m as default};//# sourceMappingURL=mix.mjs.map | ||
| import {b as b$2,d}from'../chunk-OS5JUSWI.mjs';import'../chunk-FXCFKFXK.mjs';import'../chunk-Q3O3QQ4H.mjs';import {a,b as b$1}from'../chunk-IOXRZECH.mjs';var b=n=>{n.prototype.mix=function(r,e=.5){let t=new n(r).toRgb(),l=this._rawRgb(),o=a(e,0,1);return new n({r:b$1(l.r*(1-o)+t.r*o),g:b$1(l.g*(1-o)+t.g*o),b:b$1(l.b*(1-o)+t.b*o),alpha:b$1(l.alpha*(1-o)+t.alpha*o,3)})},n.prototype.mixOklab=function(r,e=.5){let t=b$2(this._rawRgb()),l=b$2(new n(r)._rawRgb()),o=a(e,0,1);return new n(d({l:t.l*(1-o)+l.l*o,a:t.a*(1-o)+l.a*o,b:t.b*(1-o)+l.b*o,alpha:b$1(t.alpha*(1-o)+l.alpha*o,3)}))};let p=(r,e,t)=>e<=0?[]:e===1?[r]:Array.from({length:e},(l,o)=>r.mix(t,o/(e-1)));n.prototype.tints=function(r=5){return p(this,r,"#ffffff")},n.prototype.shades=function(r=5){return p(this,r,"#000000")},n.prototype.tones=function(r=5){return p(this,r,"#808080")},n.prototype.palette=function(r,e="#ffffff"){return p(this,r,e)};},m=b;export{m as default};//# sourceMappingURL=mix.mjs.map | ||
| //# sourceMappingURL=mix.mjs.map |
@@ -1,2 +0,2 @@ | ||
| 'use strict';var chunk5Q4QJ3KC_cjs=require('../chunk-5Q4QJ3KC.cjs');require('../chunk-EXPXWBLP.cjs');var e={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"},u=f=>{if(typeof f!="string")return null;let a=e[f.toLowerCase().trim()];return a?chunk5Q4QJ3KC_cjs.a(a):null},k=(f,a,g)=>{a.push(u),g.push([u,"name"]),f.prototype.toName=function(m){let{r:l,g:n,b:t,alpha:h}=this.toRgb();if(h===0&&l===0&&n===0&&t===0)return "transparent";let p=this.toHex().toLowerCase(),i=Object.keys(e).find(r=>e[r]===p);if(i||!m?.closest)return i;let c=1/0,b;for(let r of Object.keys(e)){let d=chunk5Q4QJ3KC_cjs.a(e[r]),s=(d.r-l)**2+(d.g-n)**2+(d.b-t)**2;s<c&&(c=s,b=r);}return b};},w=k;module.exports=w;//# sourceMappingURL=names.cjs.map | ||
| 'use strict';var chunkZ5MM7DU5_cjs=require('../chunk-Z5MM7DU5.cjs');require('../chunk-YISEJCI6.cjs');var e={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"},u=f=>{if(typeof f!="string")return null;let a=e[f.toLowerCase().trim()];return a?chunkZ5MM7DU5_cjs.a(a):null},k=(f,a,g)=>{a.push(u),g.push([u,"name"]),f.prototype.toName=function(m){let{r:l,g:n,b:t,alpha:h}=this.toRgb();if(h===0&&l===0&&n===0&&t===0)return "transparent";let p=this.toHex().toLowerCase(),i=Object.keys(e).find(r=>e[r]===p);if(i||!m?.closest)return i;let c=1/0,b;for(let r of Object.keys(e)){let d=chunkZ5MM7DU5_cjs.a(e[r]),s=(d.r-l)**2+(d.g-n)**2+(d.b-t)**2;s<c&&(c=s,b=r);}return b};},w=k;module.exports=w;//# sourceMappingURL=names.cjs.map | ||
| //# sourceMappingURL=names.cjs.map |
@@ -1,2 +0,2 @@ | ||
| import {a}from'../chunk-QP4SFM6Z.mjs';import'../chunk-JFPP44S3.mjs';var e={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"},u=f=>{if(typeof f!="string")return null;let a$1=e[f.toLowerCase().trim()];return a$1?a(a$1):null},k=(f,a$1,g)=>{a$1.push(u),g.push([u,"name"]),f.prototype.toName=function(m){let{r:l,g:n,b:t,alpha:h}=this.toRgb();if(h===0&&l===0&&n===0&&t===0)return "transparent";let p=this.toHex().toLowerCase(),i=Object.keys(e).find(r=>e[r]===p);if(i||!m?.closest)return i;let c=1/0,b;for(let r of Object.keys(e)){let d=a(e[r]),s=(d.r-l)**2+(d.g-n)**2+(d.b-t)**2;s<c&&(c=s,b=r);}return b};},w=k;export{w as default};//# sourceMappingURL=names.mjs.map | ||
| import {a}from'../chunk-4JCO6H3F.mjs';import'../chunk-IOXRZECH.mjs';var e={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"},u=f=>{if(typeof f!="string")return null;let a$1=e[f.toLowerCase().trim()];return a$1?a(a$1):null},k=(f,a$1,g)=>{a$1.push(u),g.push([u,"name"]),f.prototype.toName=function(m){let{r:l,g:n,b:t,alpha:h}=this.toRgb();if(h===0&&l===0&&n===0&&t===0)return "transparent";let p=this.toHex().toLowerCase(),i=Object.keys(e).find(r=>e[r]===p);if(i||!m?.closest)return i;let c=1/0,b;for(let r of Object.keys(e)){let d=a(e[r]),s=(d.r-l)**2+(d.g-n)**2+(d.b-t)**2;s<c&&(c=s,b=r);}return b};},w=k;export{w as default};//# sourceMappingURL=names.mjs.map | ||
| //# sourceMappingURL=names.mjs.map |
@@ -1,2 +0,2 @@ | ||
| 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var chunkEPG4VVQB_cjs=require('../chunk-EPG4VVQB.cjs'),chunkBBEOVRYB_cjs=require('../chunk-BBEOVRYB.cjs');require('../chunk-IHOZOJHA.cjs');var chunkX5FCFNQN_cjs=require('../chunk-X5FCFNQN.cjs');require('../chunk-GYCEEHZT.cjs');var chunkEXPXWBLP_cjs=require('../chunk-EXPXWBLP.cjs');var C=.8224619687,_=.1775380313,G=.0331941989,A=.9668058011,w=.0170826307,F=.0723974407,B=.9105199286,v=1.2249401762805598,N=-0.22494017628055996,O=-0.04205695470968816,z=1.042056954709688,E=-0.019637554590334432,K=-0.07863604555063189,U=1.0982736001409663,I=(r,n,o,e)=>{r[0]=C*n+_*o,r[1]=G*n+A*o,r[2]=w*n+F*o+B*e;},i=(r,n,o)=>[C*r+_*n,G*r+A*n,w*r+F*n+B*o];var P=(r,n,o)=>[v*r+N*n,O*r+z*n,E*r+K*n+U*o],$=({r,g:n,b:o,alpha:e})=>{let[t,m,u]=i(chunkX5FCFNQN_cjs.a(r/255),chunkX5FCFNQN_cjs.a(n/255),chunkX5FCFNQN_cjs.a(o/255));return {r:chunkEXPXWBLP_cjs.b(chunkX5FCFNQN_cjs.b(t),4),g:chunkEXPXWBLP_cjs.b(chunkX5FCFNQN_cjs.b(m),4),b:chunkEXPXWBLP_cjs.b(chunkX5FCFNQN_cjs.b(u),4),alpha:e,colorSpace:"display-p3"}};var j=({r,g:n,b:o,alpha:e})=>{let[t,m,u]=P(chunkX5FCFNQN_cjs.a(r),chunkX5FCFNQN_cjs.a(n),chunkX5FCFNQN_cjs.a(o));return {r:chunkX5FCFNQN_cjs.b(t)*255,g:chunkX5FCFNQN_cjs.b(m)*255,b:chunkX5FCFNQN_cjs.b(u)*255,alpha:e}},g=r=>{if(!chunkEXPXWBLP_cjs.h(r)||r.colorSpace!=="display-p3"||!chunkEXPXWBLP_cjs.i(r,["r","g","b"]))return null;let{r:n,g:o,b:e,alpha:t=1}=r;return !chunkEXPXWBLP_cjs.f(n)||!chunkEXPXWBLP_cjs.f(o)||!chunkEXPXWBLP_cjs.f(e)||!chunkEXPXWBLP_cjs.f(t)?null:j({r:chunkEXPXWBLP_cjs.g(n),g:chunkEXPXWBLP_cjs.g(o),b:chunkEXPXWBLP_cjs.g(e),alpha:chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.g(t),0,1)})},q=/^color\(\s*display-p3\s+([+-]?\d*\.?\d+)\s+([+-]?\d*\.?\d+)\s+([+-]?\d*\.?\d+)\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,d=r=>{if(typeof r!="string")return null;let n=q.exec(r.trim());if(!n)return null;let o=n[4]===void 0?1:Number(n[4])/(n[5]?100:1);return j({r:Number(n[1]),g:Number(n[2]),b:Number(n[3]),alpha:chunkEXPXWBLP_cjs.a(o,0,1)})},S=(r,n,o)=>i(...chunkBBEOVRYB_cjs.f(r,n,o));var D=(r,n,o)=>chunkBBEOVRYB_cjs.a(...P(r,n,o)),H=(r,n,o)=>{let[e,t,m]=i(r,n,o);return [chunkX5FCFNQN_cjs.b(e),chunkX5FCFNQN_cjs.b(t),chunkX5FCFNQN_cjs.b(m)]},J=(r,n,o,e)=>{I(r,n,o,e),r[0]=chunkX5FCFNQN_cjs.b(r[0]),r[1]=chunkX5FCFNQN_cjs.b(r[1]),r[2]=chunkX5FCFNQN_cjs.b(r[2]);},tr=(r,n,o)=>H(...chunkEPG4VVQB_cjs.e(r,n,o)),br=(r,n,o,e)=>{chunkEPG4VVQB_cjs.f(r,n,o,e),J(r,r[0],r[1],r[2]);},mr=r=>chunkEPG4VVQB_cjs.c(r,S),M=(r,n,o)=>{r.toGamutP3=e=>{let t=chunkEPG4VVQB_cjs.d(e,S,D);return t!==null?r._makeFromOklab(t):new r(e)},r.prototype.toP3=function(){return $(this._rawRgb())},r.prototype.toP3String=function(){let{r:e,g:t,b:m,alpha:u}=this.toP3();return u<1?`color(display-p3 ${e} ${t} ${m} / ${u})`:`color(display-p3 ${e} ${t} ${m})`},n.push(d,g),o.push([d,"p3"],[g,"p3"]);},ar=M;exports.default=ar;exports.inGamutP3=mr;exports.linearToP3Channels=H;exports.linearToP3ChannelsInto=J;exports.oklchToP3Channels=tr;exports.oklchToP3ChannelsInto=br;//# sourceMappingURL=p3.cjs.map | ||
| 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var chunk3D3MFLZZ_cjs=require('../chunk-3D3MFLZZ.cjs'),chunk44FDTAPT_cjs=require('../chunk-44FDTAPT.cjs');require('../chunk-EDNIB75Q.cjs');var chunkX5FCFNQN_cjs=require('../chunk-X5FCFNQN.cjs');require('../chunk-3V4MONNR.cjs');var chunkYISEJCI6_cjs=require('../chunk-YISEJCI6.cjs');var G=.8224619687,$=.1775380313,w=.0331941989,A=.9668058011,F=.0170826307,B=.0723974407,I=.9105199286,N=1.2249401762805598,E=-0.22494017628055996,U=-0.04205695470968816,z=1.042056954709688,K=-0.019637554590334432,M=-0.07863604555063189,q=1.0982736001409663,O=(r,n,o,e)=>{r[0]=G*n+$*o,r[1]=w*n+A*o,r[2]=F*n+B*o+I*e;},P=(r,n,o)=>[G*r+$*n,w*r+A*n,F*r+B*n+I*o];var S=(r,n,o)=>[N*r+E*n,U*r+z*n,K*r+M*n+q*o],j=({r,g:n,b:o,alpha:e})=>{let[t,m,p]=P(chunkX5FCFNQN_cjs.a(r/255),chunkX5FCFNQN_cjs.a(n/255),chunkX5FCFNQN_cjs.a(o/255));return {r:chunkYISEJCI6_cjs.b(chunkX5FCFNQN_cjs.b(t),4),g:chunkYISEJCI6_cjs.b(chunkX5FCFNQN_cjs.b(m),4),b:chunkYISEJCI6_cjs.b(chunkX5FCFNQN_cjs.b(p),4),alpha:e,colorSpace:"display-p3"}};var v=({r,g:n,b:o,alpha:e})=>{let[t,m,p]=S(chunkX5FCFNQN_cjs.a(r),chunkX5FCFNQN_cjs.a(n),chunkX5FCFNQN_cjs.a(o));return {r:chunkX5FCFNQN_cjs.b(t)*255,g:chunkX5FCFNQN_cjs.b(m)*255,b:chunkX5FCFNQN_cjs.b(p)*255,alpha:e}},y=r=>{if(!chunkYISEJCI6_cjs.h(r)||r.colorSpace!=="display-p3"||!chunkYISEJCI6_cjs.i(r,["r","g","b"]))return null;let{r:n,g:o,b:e,alpha:t=1}=r;return !chunkYISEJCI6_cjs.f(n)||!chunkYISEJCI6_cjs.f(o)||!chunkYISEJCI6_cjs.f(e)||!chunkYISEJCI6_cjs.f(t)?null:v({r:chunkYISEJCI6_cjs.g(n),g:chunkYISEJCI6_cjs.g(o),b:chunkYISEJCI6_cjs.g(e),alpha:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.g(t),0,1)})},D=new RegExp(`^color\\(\\s*display-p3\\s+(?<r>${chunkYISEJCI6_cjs.k})(?<rp>%?)\\s+(?<g>${chunkYISEJCI6_cjs.k})(?<gp>%?)\\s+(?<b>${chunkYISEJCI6_cjs.k})(?<bp>%?)\\s*(?:/\\s*(?<al>${chunkYISEJCI6_cjs.k})(?<alp>%?)\\s*)?\\)$`,"i"),f=r=>{if(typeof r!="string")return null;let n=D.exec(r.trim())?.groups;if(!n)return null;let o=n.rp?chunkYISEJCI6_cjs.l(n.r)/100:chunkYISEJCI6_cjs.l(n.r),e=n.gp?chunkYISEJCI6_cjs.l(n.g)/100:chunkYISEJCI6_cjs.l(n.g),t=n.bp?chunkYISEJCI6_cjs.l(n.b)/100:chunkYISEJCI6_cjs.l(n.b),m=n.al===void 0?1:chunkYISEJCI6_cjs.l(n.al)/(n.alp?100:1);return v({r:o,g:e,b:t,alpha:chunkYISEJCI6_cjs.a(m,0,1)})},T=(r,n,o)=>P(...chunk44FDTAPT_cjs.f(r,n,o));var H=(r,n,o)=>chunk44FDTAPT_cjs.a(...S(r,n,o)),J=(r,n,o)=>{let[e,t,m]=P(r,n,o);return [chunkX5FCFNQN_cjs.b(e),chunkX5FCFNQN_cjs.b(t),chunkX5FCFNQN_cjs.b(m)]},Q=(r,n,o,e)=>{O(r,n,o,e),r[0]=chunkX5FCFNQN_cjs.b(r[0]),r[1]=chunkX5FCFNQN_cjs.b(r[1]),r[2]=chunkX5FCFNQN_cjs.b(r[2]);},mr=(r,n,o)=>J(...chunk3D3MFLZZ_cjs.e(r,n,o)),ar=(r,n,o,e)=>{chunk3D3MFLZZ_cjs.f(r,n,o,e),Q(r,r[0],r[1],r[2]);},lr=r=>chunk3D3MFLZZ_cjs.c(r,T),V=(r,n,o)=>{r.toGamutP3=e=>{let t=chunk3D3MFLZZ_cjs.d(e,T,H);return t!==null?r._makeFromOklab(t):new r(e)},r.prototype.toP3=function(){return j(this._rawRgb())},r.prototype.toP3String=function(){let{r:e,g:t,b:m,alpha:p}=this.toP3();return p<1?`color(display-p3 ${e} ${t} ${m} / ${p})`:`color(display-p3 ${e} ${t} ${m})`},n.push(f,y),o.push([f,"p3"],[y,"p3"]);},pr=V;exports.default=pr;exports.inGamutP3=lr;exports.linearToP3Channels=J;exports.linearToP3ChannelsInto=Q;exports.oklchToP3Channels=mr;exports.oklchToP3ChannelsInto=ar;//# sourceMappingURL=p3.cjs.map | ||
| //# sourceMappingURL=p3.cjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/colorModels/p3.ts","../../src/plugins/p3.ts"],"names":["SP3_RR","SP3_RG","SP3_GR","SP3_GG","SP3_BR","SP3_BG","SP3_BB","P3S_RR","P3S_RG","P3S_GR","P3S_GG","P3S_BR","P3S_BG","P3S_BB","srgbLinearToP3LinearInto","out","r","g","b","srgbLinearToP3Linear","linearP3ToSrgb","rgbToP3","alpha","p3r","p3g","p3b","srgbToLinear","round","srgbFromLinear","p3ToRgbUnclamped","sr","sg","sb","parseP3Object","input","isObject","hasKeys","isAnyNumber","sanitize","clamp","P3_RE","parseP3String","m","oklabToLinearP3","l","a","oklabToLinear","p3FromLinear","linearSrgbToOklab","linearToP3Channels","lr","lg","lb","linearToP3ChannelsInto","oklchToP3Channels","c","h","oklchToLinear","oklchToP3ChannelsInto","oklchToLinearInto","inGamutP3","inGamutCustom","p3","ColordxClass","parsers","formatParsers","mapped","toGamutCustom","p3_default"],"mappings":"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","file":"p3.cjs","sourcesContent":["import { clamp, hasKeys, isAnyNumber, isObject, round, sanitize } from '../helpers.js';\nimport { srgbFromLinear, srgbToLinear } from '../transfer.js';\nimport type { P3Color, RgbColor } from '../types.js';\nimport { oklabToLinear, oklabToLinearInto } from './oklab.js';\nimport { clampRgb } from './rgb.js';\n\n// Linear sRGB ↔ Linear Display-P3 (D65, CSS Color 4). The forward matrix has zero\n// blue-output coefficients on the r/g rows — correct per spec, not a bug.\n// Shared between the allocating and *Into variants.\nconst SP3_RR = 0.8224619687,\n SP3_RG = 0.1775380313;\nconst SP3_GR = 0.0331941989,\n SP3_GG = 0.9668058011;\nconst SP3_BR = 0.0170826307,\n SP3_BG = 0.0723974407,\n SP3_BB = 0.9105199286;\nconst P3S_RR = 1.2249401762805598,\n P3S_RG = -0.22494017628055996;\nconst P3S_GR = -0.042056954709688163,\n P3S_GG = 1.0420569547096881;\nconst P3S_BR = -0.019637554590334432,\n P3S_BG = -0.078636045550631889,\n P3S_BB = 1.0982736001409663;\n\n/** Zero-allocation sibling of srgbLinearToP3Linear — writes into `out`. Safe when out === input arg. */\nexport const srgbLinearToP3LinearInto = (out: Float64Array | number[], r: number, g: number, b: number): void => {\n out[0] = SP3_RR * r + SP3_RG * g;\n out[1] = SP3_GR * r + SP3_GG * g;\n out[2] = SP3_BR * r + SP3_BG * g + SP3_BB * b;\n};\n\nexport const srgbLinearToP3Linear = (r: number, g: number, b: number): [number, number, number] => [\n SP3_RR * r + SP3_RG * g,\n SP3_GR * r + SP3_GG * g,\n SP3_BR * r + SP3_BG * g + SP3_BB * b,\n];\n\n/** Zero-allocation sibling of linearP3ToSrgb — writes into `out`. */\nexport const linearP3ToSrgbInto = (out: Float64Array | number[], r: number, g: number, b: number): void => {\n out[0] = P3S_RR * r + P3S_RG * g;\n out[1] = P3S_GR * r + P3S_GG * g;\n out[2] = P3S_BR * r + P3S_BG * g + P3S_BB * b;\n};\n\nexport const linearP3ToSrgb = (r: number, g: number, b: number): [number, number, number] => [\n P3S_RR * r + P3S_RG * g,\n P3S_GR * r + P3S_GG * g,\n P3S_BR * r + P3S_BG * g + P3S_BB * b,\n];\n\n// No clamping on output: P3 is wide-gamut, sRGB values can legitimately sit outside [0,1] in P3 space.\n// p3ToRgb clips back to sRGB gamut on the way out.\nexport const rgbToP3 = ({ r, g, b, alpha }: RgbColor): P3Color => {\n const [p3r, p3g, p3b] = srgbLinearToP3Linear(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n return {\n r: round(srgbFromLinear(p3r), 4),\n g: round(srgbFromLinear(p3g), 4),\n b: round(srgbFromLinear(p3b), 4),\n alpha,\n colorSpace: 'display-p3',\n };\n};\n\nexport const p3ToRgb = ({ r, g, b, alpha }: P3Color): RgbColor => {\n const [sr, sg, sb] = linearP3ToSrgb(srgbToLinear(r), srgbToLinear(g), srgbToLinear(b));\n return clampRgb({\n r: srgbFromLinear(clamp(sr, 0, 1)) * 255,\n g: srgbFromLinear(clamp(sg, 0, 1)) * 255,\n b: srgbFromLinear(clamp(sb, 0, 1)) * 255,\n alpha,\n });\n};\n\n/** Unclamped P3 → gamma-encoded sRGB. Channels may exceed [0, 255] for out-of-sRGB-gamut colors. */\nconst p3ToRgbUnclamped = ({ r, g, b, alpha }: P3Color): RgbColor => {\n const [sr, sg, sb] = linearP3ToSrgb(srgbToLinear(r), srgbToLinear(g), srgbToLinear(b));\n return {\n r: srgbFromLinear(sr) * 255,\n g: srgbFromLinear(sg) * 255,\n b: srgbFromLinear(sb) * 255,\n alpha,\n };\n};\n\nexport const parseP3Object = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if ((input as { colorSpace?: unknown }).colorSpace !== 'display-p3') return null;\n if (!hasKeys(input, ['r', 'g', 'b'])) return null;\n const { r, g, b, alpha = 1 } = input as { r: unknown; g: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(r) || !isAnyNumber(g) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return p3ToRgbUnclamped({\n r: sanitize(r),\n g: sanitize(g),\n b: sanitize(b),\n alpha: clamp(sanitize(alpha), 0, 1),\n colorSpace: 'display-p3',\n });\n};\n\nconst P3_RE =\n /^color\\(\\s*display-p3\\s+([+-]?\\d*\\.?\\d+)\\s+([+-]?\\d*\\.?\\d+)\\s+([+-]?\\d*\\.?\\d+)\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nexport const parseP3String = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = P3_RE.exec(input.trim());\n if (!m) return null;\n const alpha = m[4] === undefined ? 1 : Number(m[4]) / (m[5] ? 100 : 1);\n return p3ToRgbUnclamped({\n r: Number(m[1]),\n g: Number(m[2]),\n b: Number(m[3]),\n alpha: clamp(alpha, 0, 1),\n colorSpace: 'display-p3',\n });\n};\n\n/** Unclamped linear Display-P3 channels from OKLab values. */\nexport const oklabToLinearP3 = (l: number, a: number, b: number): [number, number, number] =>\n srgbLinearToP3Linear(...oklabToLinear(l, a, b));\n\n/** Zero-allocation sibling of oklabToLinearP3 — writes [pr, pg, pb] into `out`. */\nexport const oklabToLinearP3Into = (out: Float64Array | number[], l: number, a: number, b: number): void => {\n oklabToLinearInto(out, l, a, b);\n srgbLinearToP3LinearInto(out, out[0]!, out[1]!, out[2]!);\n};\n","import { oklchToLinear, oklchToLinearInto } from '../channels.js';\nimport { linearSrgbToOklab } from '../colorModels/oklab.js';\nimport {\n linearP3ToSrgb,\n oklabToLinearP3,\n parseP3Object,\n parseP3String,\n rgbToP3,\n srgbLinearToP3Linear,\n srgbLinearToP3LinearInto,\n} from '../colorModels/p3.js';\nimport type { Plugin } from '../colordx.js';\nimport { inGamutCustom, toGamutCustom } from '../gamut.js';\nimport { srgbFromLinear } from '../transfer.js';\nimport type { AnyColor, P3Color } from '../types.js';\n\nconst p3FromLinear = (r: number, g: number, b: number): [number, number, number] =>\n linearSrgbToOklab(...linearP3ToSrgb(r, g, b));\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toP3(): P3Color;\n toP3String(): string;\n }\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace Colordx {\n function toGamutP3(input: AnyColor): Colordx;\n }\n}\n\n/**\n * Convert linear sRGB channels (from oklchToLinear) to gamma-encoded Display-P3 channels.\n * This is the cheap step — only a matrix multiply + gamma encoding, no cbrt.\n * Pair with oklchToLinear to convert one OKLCH color to multiple spaces without\n * repeating the expensive OKLab pipeline.\n */\nexport const linearToP3Channels = (lr: number, lg: number, lb: number): [number, number, number] => {\n const [r, g, b] = srgbLinearToP3Linear(lr, lg, lb);\n return [srgbFromLinear(r), srgbFromLinear(g), srgbFromLinear(b)];\n};\n\n/** Zero-allocation sibling of linearToP3Channels — writes [pr, pg, pb] (gamma-encoded, 0–1) into `out`. */\nexport const linearToP3ChannelsInto = (out: Float64Array | number[], lr: number, lg: number, lb: number): void => {\n srgbLinearToP3LinearInto(out, lr, lg, lb);\n out[0] = srgbFromLinear(out[0]!);\n out[1] = srgbFromLinear(out[1]!);\n out[2] = srgbFromLinear(out[2]!);\n};\n\n/**\n * Convert OKLCH to gamma-encoded Display-P3 channels without object allocation.\n * Returns [r, g, b] in [0, 1] for in-gamut colors. Out-of-gamut channels may\n * exceed this range — callers are responsible for clamping before byte encoding.\n * Uses the sRGB transfer function (P3 does not use DCI-P3 gamma 2.6).\n */\nexport const oklchToP3Channels = (l: number, c: number, h: number): [number, number, number] =>\n linearToP3Channels(...oklchToLinear(l, c, h));\n\n/** Zero-allocation sibling of oklchToP3Channels — writes [pr, pg, pb] into `out`. */\nexport const oklchToP3ChannelsInto = (out: Float64Array | number[], l: number, c: number, h: number): void => {\n oklchToLinearInto(out, l, c, h);\n linearToP3ChannelsInto(out, out[0]!, out[1]!, out[2]!);\n};\n\n/**\n * Returns true if the color is within the Display-P3 gamut.\n * sRGB inputs (hex, rgb, hsl, etc.) always return true (sRGB ⊂ P3).\n */\nexport const inGamutP3 = (input: AnyColor): boolean => inGamutCustom(input, oklabToLinearP3);\n\nconst p3: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.toGamutP3 = (input: AnyColor) => {\n const mapped = toGamutCustom(input, oklabToLinearP3, p3FromLinear);\n return mapped !== null ? ColordxClass._makeFromOklab(mapped) : new ColordxClass(input);\n };\n ColordxClass.prototype.toP3 = function () {\n return rgbToP3(this._rawRgb());\n };\n ColordxClass.prototype.toP3String = function () {\n const { r, g, b, alpha } = this.toP3();\n return alpha < 1 ? `color(display-p3 ${r} ${g} ${b} / ${alpha})` : `color(display-p3 ${r} ${g} ${b})`;\n };\n parsers.push(parseP3String, parseP3Object);\n formatParsers.push([parseP3String, 'p3'], [parseP3Object, 'p3']);\n};\n\nexport default p3;\n"]} | ||
| {"version":3,"sources":["../../src/colorModels/p3.ts","../../src/plugins/p3.ts"],"names":["SP3_RR","SP3_RG","SP3_GR","SP3_GG","SP3_BR","SP3_BG","SP3_BB","P3S_RR","P3S_RG","P3S_GR","P3S_GG","P3S_BR","P3S_BG","P3S_BB","srgbLinearToP3LinearInto","out","r","g","b","srgbLinearToP3Linear","linearP3ToSrgb","rgbToP3","alpha","p3r","p3g","p3b","srgbToLinear","round","srgbFromLinear","p3ToRgbUnclamped","sr","sg","sb","parseP3Object","input","isObject","hasKeys","isAnyNumber","sanitize","clamp","P3_RE","NUM_OR_NONE","parseP3String","parseNum","gc","oklabToLinearP3","l","a","oklabToLinear","p3FromLinear","linearSrgbToOklab","linearToP3Channels","lr","lg","lb","linearToP3ChannelsInto","oklchToP3Channels","c","h","oklchToLinear","oklchToP3ChannelsInto","oklchToLinearInto","inGamutP3","inGamutCustom","p3","ColordxClass","parsers","formatParsers","mapped","toGamutCustom","p3_default"],"mappings":"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","file":"p3.cjs","sourcesContent":["import { NUM_OR_NONE, clamp, hasKeys, isAnyNumber, isObject, parseNum, round, sanitize } from '../helpers.js';\nimport { srgbFromLinear, srgbToLinear } from '../transfer.js';\nimport type { P3Color, RgbColor } from '../types.js';\nimport { oklabToLinear, oklabToLinearInto } from './oklab.js';\nimport { clampRgb } from './rgb.js';\n\n// Linear sRGB ↔ Linear Display-P3 (D65, CSS Color 4). The forward matrix has zero\n// blue-output coefficients on the r/g rows — correct per spec, not a bug.\n// Shared between the allocating and *Into variants.\nconst SP3_RR = 0.8224619687,\n SP3_RG = 0.1775380313;\nconst SP3_GR = 0.0331941989,\n SP3_GG = 0.9668058011;\nconst SP3_BR = 0.0170826307,\n SP3_BG = 0.0723974407,\n SP3_BB = 0.9105199286;\nconst P3S_RR = 1.2249401762805598,\n P3S_RG = -0.22494017628055996;\nconst P3S_GR = -0.042056954709688163,\n P3S_GG = 1.0420569547096881;\nconst P3S_BR = -0.019637554590334432,\n P3S_BG = -0.078636045550631889,\n P3S_BB = 1.0982736001409663;\n\n/** Zero-allocation sibling of srgbLinearToP3Linear — writes into `out`. Safe when out === input arg. */\nexport const srgbLinearToP3LinearInto = (out: Float64Array | number[], r: number, g: number, b: number): void => {\n out[0] = SP3_RR * r + SP3_RG * g;\n out[1] = SP3_GR * r + SP3_GG * g;\n out[2] = SP3_BR * r + SP3_BG * g + SP3_BB * b;\n};\n\nexport const srgbLinearToP3Linear = (r: number, g: number, b: number): [number, number, number] => [\n SP3_RR * r + SP3_RG * g,\n SP3_GR * r + SP3_GG * g,\n SP3_BR * r + SP3_BG * g + SP3_BB * b,\n];\n\n/** Zero-allocation sibling of linearP3ToSrgb — writes into `out`. */\nexport const linearP3ToSrgbInto = (out: Float64Array | number[], r: number, g: number, b: number): void => {\n out[0] = P3S_RR * r + P3S_RG * g;\n out[1] = P3S_GR * r + P3S_GG * g;\n out[2] = P3S_BR * r + P3S_BG * g + P3S_BB * b;\n};\n\nexport const linearP3ToSrgb = (r: number, g: number, b: number): [number, number, number] => [\n P3S_RR * r + P3S_RG * g,\n P3S_GR * r + P3S_GG * g,\n P3S_BR * r + P3S_BG * g + P3S_BB * b,\n];\n\n// No clamping on output: P3 is wide-gamut, sRGB values can legitimately sit outside [0,1] in P3 space.\n// p3ToRgb clips back to sRGB gamut on the way out.\nexport const rgbToP3 = ({ r, g, b, alpha }: RgbColor): P3Color => {\n const [p3r, p3g, p3b] = srgbLinearToP3Linear(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n return {\n r: round(srgbFromLinear(p3r), 4),\n g: round(srgbFromLinear(p3g), 4),\n b: round(srgbFromLinear(p3b), 4),\n alpha,\n colorSpace: 'display-p3',\n };\n};\n\nexport const p3ToRgb = ({ r, g, b, alpha }: P3Color): RgbColor => {\n const [sr, sg, sb] = linearP3ToSrgb(srgbToLinear(r), srgbToLinear(g), srgbToLinear(b));\n return clampRgb({\n r: srgbFromLinear(clamp(sr, 0, 1)) * 255,\n g: srgbFromLinear(clamp(sg, 0, 1)) * 255,\n b: srgbFromLinear(clamp(sb, 0, 1)) * 255,\n alpha,\n });\n};\n\n/** Unclamped P3 → gamma-encoded sRGB. Channels may exceed [0, 255] for out-of-sRGB-gamut colors. */\nconst p3ToRgbUnclamped = ({ r, g, b, alpha }: P3Color): RgbColor => {\n const [sr, sg, sb] = linearP3ToSrgb(srgbToLinear(r), srgbToLinear(g), srgbToLinear(b));\n return {\n r: srgbFromLinear(sr) * 255,\n g: srgbFromLinear(sg) * 255,\n b: srgbFromLinear(sb) * 255,\n alpha,\n };\n};\n\nexport const parseP3Object = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if ((input as { colorSpace?: unknown }).colorSpace !== 'display-p3') return null;\n if (!hasKeys(input, ['r', 'g', 'b'])) return null;\n const { r, g, b, alpha = 1 } = input as { r: unknown; g: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(r) || !isAnyNumber(g) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return p3ToRgbUnclamped({\n r: sanitize(r),\n g: sanitize(g),\n b: sanitize(b),\n alpha: clamp(sanitize(alpha), 0, 1),\n colorSpace: 'display-p3',\n });\n};\n\n// CSS Color 4: color(display-p3 r g b / alpha). Channels accept number|percentage|none; 100% = 1.\nconst P3_RE = new RegExp(\n `^color\\\\(\\\\s*display-p3\\\\s+(?<r>${NUM_OR_NONE})(?<rp>%?)\\\\s+(?<g>${NUM_OR_NONE})(?<gp>%?)` +\n `\\\\s+(?<b>${NUM_OR_NONE})(?<bp>%?)\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseP3String = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = P3_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const r = g.rp ? parseNum(g.r!) / 100 : parseNum(g.r!);\n const gc = g.gp ? parseNum(g.g!) / 100 : parseNum(g.g!);\n const b = g.bp ? parseNum(g.b!) / 100 : parseNum(g.b!);\n const alpha = g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1);\n return p3ToRgbUnclamped({\n r,\n g: gc,\n b,\n alpha: clamp(alpha, 0, 1),\n colorSpace: 'display-p3',\n });\n};\n\n/** Unclamped linear Display-P3 channels from OKLab values. */\nexport const oklabToLinearP3 = (l: number, a: number, b: number): [number, number, number] =>\n srgbLinearToP3Linear(...oklabToLinear(l, a, b));\n\n/** Zero-allocation sibling of oklabToLinearP3 — writes [pr, pg, pb] into `out`. */\nexport const oklabToLinearP3Into = (out: Float64Array | number[], l: number, a: number, b: number): void => {\n oklabToLinearInto(out, l, a, b);\n srgbLinearToP3LinearInto(out, out[0]!, out[1]!, out[2]!);\n};\n","import { oklchToLinear, oklchToLinearInto } from '../channels.js';\nimport { linearSrgbToOklab } from '../colorModels/oklab.js';\nimport {\n linearP3ToSrgb,\n oklabToLinearP3,\n parseP3Object,\n parseP3String,\n rgbToP3,\n srgbLinearToP3Linear,\n srgbLinearToP3LinearInto,\n} from '../colorModels/p3.js';\nimport type { Plugin } from '../colordx.js';\nimport { inGamutCustom, toGamutCustom } from '../gamut.js';\nimport { srgbFromLinear } from '../transfer.js';\nimport type { AnyColor, P3Color } from '../types.js';\n\nconst p3FromLinear = (r: number, g: number, b: number): [number, number, number] =>\n linearSrgbToOklab(...linearP3ToSrgb(r, g, b));\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toP3(): P3Color;\n toP3String(): string;\n }\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace Colordx {\n function toGamutP3(input: AnyColor): Colordx;\n }\n}\n\n/**\n * Convert linear sRGB channels (from oklchToLinear) to gamma-encoded Display-P3 channels.\n * This is the cheap step — only a matrix multiply + gamma encoding, no cbrt.\n * Pair with oklchToLinear to convert one OKLCH color to multiple spaces without\n * repeating the expensive OKLab pipeline.\n */\nexport const linearToP3Channels = (lr: number, lg: number, lb: number): [number, number, number] => {\n const [r, g, b] = srgbLinearToP3Linear(lr, lg, lb);\n return [srgbFromLinear(r), srgbFromLinear(g), srgbFromLinear(b)];\n};\n\n/** Zero-allocation sibling of linearToP3Channels — writes [pr, pg, pb] (gamma-encoded, 0–1) into `out`. */\nexport const linearToP3ChannelsInto = (out: Float64Array | number[], lr: number, lg: number, lb: number): void => {\n srgbLinearToP3LinearInto(out, lr, lg, lb);\n out[0] = srgbFromLinear(out[0]!);\n out[1] = srgbFromLinear(out[1]!);\n out[2] = srgbFromLinear(out[2]!);\n};\n\n/**\n * Convert OKLCH to gamma-encoded Display-P3 channels without object allocation.\n * Returns [r, g, b] in [0, 1] for in-gamut colors. Out-of-gamut channels may\n * exceed this range — callers are responsible for clamping before byte encoding.\n * Uses the sRGB transfer function (P3 does not use DCI-P3 gamma 2.6).\n */\nexport const oklchToP3Channels = (l: number, c: number, h: number): [number, number, number] =>\n linearToP3Channels(...oklchToLinear(l, c, h));\n\n/** Zero-allocation sibling of oklchToP3Channels — writes [pr, pg, pb] into `out`. */\nexport const oklchToP3ChannelsInto = (out: Float64Array | number[], l: number, c: number, h: number): void => {\n oklchToLinearInto(out, l, c, h);\n linearToP3ChannelsInto(out, out[0]!, out[1]!, out[2]!);\n};\n\n/**\n * Returns true if the color is within the Display-P3 gamut.\n * sRGB inputs (hex, rgb, hsl, etc.) always return true (sRGB ⊂ P3).\n */\nexport const inGamutP3 = (input: AnyColor): boolean => inGamutCustom(input, oklabToLinearP3);\n\nconst p3: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.toGamutP3 = (input: AnyColor) => {\n const mapped = toGamutCustom(input, oklabToLinearP3, p3FromLinear);\n return mapped !== null ? ColordxClass._makeFromOklab(mapped) : new ColordxClass(input);\n };\n ColordxClass.prototype.toP3 = function () {\n return rgbToP3(this._rawRgb());\n };\n ColordxClass.prototype.toP3String = function () {\n const { r, g, b, alpha } = this.toP3();\n return alpha < 1 ? `color(display-p3 ${r} ${g} ${b} / ${alpha})` : `color(display-p3 ${r} ${g} ${b})`;\n };\n parsers.push(parseP3String, parseP3Object);\n formatParsers.push([parseP3String, 'p3'], [parseP3Object, 'p3']);\n};\n\nexport default p3;\n"]} |
@@ -1,2 +0,2 @@ | ||
| import {e,f,c,d as d$1}from'../chunk-CW7VAOXH.mjs';import {f as f$1,a}from'../chunk-MUHBYE5R.mjs';import'../chunk-HFDTK2ZP.mjs';import {b,a as a$1}from'../chunk-FXCFKFXK.mjs';import'../chunk-OD65R6MQ.mjs';import {b as b$1,a as a$2,h,i as i$1,f as f$2,g as g$1}from'../chunk-JFPP44S3.mjs';var C=.8224619687,_=.1775380313,G=.0331941989,A=.9668058011,w=.0170826307,F=.0723974407,B=.9105199286,v=1.2249401762805598,N=-0.22494017628055996,O=-0.04205695470968816,z=1.042056954709688,E=-0.019637554590334432,K=-0.07863604555063189,U=1.0982736001409663,I=(r,n,o,e)=>{r[0]=C*n+_*o,r[1]=G*n+A*o,r[2]=w*n+F*o+B*e;},i=(r,n,o)=>[C*r+_*n,G*r+A*n,w*r+F*n+B*o];var P=(r,n,o)=>[v*r+N*n,O*r+z*n,E*r+K*n+U*o],$=({r,g:n,b:o,alpha:e})=>{let[t,m,u]=i(a$1(r/255),a$1(n/255),a$1(o/255));return {r:b$1(b(t),4),g:b$1(b(m),4),b:b$1(b(u),4),alpha:e,colorSpace:"display-p3"}};var j=({r,g:n,b:o,alpha:e})=>{let[t,m,u]=P(a$1(r),a$1(n),a$1(o));return {r:b(t)*255,g:b(m)*255,b:b(u)*255,alpha:e}},g=r=>{if(!h(r)||r.colorSpace!=="display-p3"||!i$1(r,["r","g","b"]))return null;let{r:n,g:o,b:e,alpha:t=1}=r;return !f$2(n)||!f$2(o)||!f$2(e)||!f$2(t)?null:j({r:g$1(n),g:g$1(o),b:g$1(e),alpha:a$2(g$1(t),0,1)})},q=/^color\(\s*display-p3\s+([+-]?\d*\.?\d+)\s+([+-]?\d*\.?\d+)\s+([+-]?\d*\.?\d+)\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,d=r=>{if(typeof r!="string")return null;let n=q.exec(r.trim());if(!n)return null;let o=n[4]===void 0?1:Number(n[4])/(n[5]?100:1);return j({r:Number(n[1]),g:Number(n[2]),b:Number(n[3]),alpha:a$2(o,0,1)})},S=(r,n,o)=>i(...f$1(r,n,o));var D=(r,n,o)=>a(...P(r,n,o)),H=(r,n,o)=>{let[e,t,m]=i(r,n,o);return [b(e),b(t),b(m)]},J=(r,n,o,e)=>{I(r,n,o,e),r[0]=b(r[0]),r[1]=b(r[1]),r[2]=b(r[2]);},tr=(r,n,o)=>H(...e(r,n,o)),br=(r,n,o,e)=>{f(r,n,o,e),J(r,r[0],r[1],r[2]);},mr=r=>c(r,S),M=(r,n,o)=>{r.toGamutP3=e=>{let t=d$1(e,S,D);return t!==null?r._makeFromOklab(t):new r(e)},r.prototype.toP3=function(){return $(this._rawRgb())},r.prototype.toP3String=function(){let{r:e,g:t,b:m,alpha:u}=this.toP3();return u<1?`color(display-p3 ${e} ${t} ${m} / ${u})`:`color(display-p3 ${e} ${t} ${m})`},n.push(d,g),o.push([d,"p3"],[g,"p3"]);},ar=M;export{ar as default,mr as inGamutP3,H as linearToP3Channels,J as linearToP3ChannelsInto,tr as oklchToP3Channels,br as oklchToP3ChannelsInto};//# sourceMappingURL=p3.mjs.map | ||
| import {e,f as f$1,c,d}from'../chunk-AOK3BIZI.mjs';import {f as f$2,a}from'../chunk-OS5JUSWI.mjs';import'../chunk-OXYX6VNO.mjs';import {b,a as a$1}from'../chunk-FXCFKFXK.mjs';import'../chunk-Q3O3QQ4H.mjs';import {b as b$1,l,a as a$2,h,i,f as f$3,g,k}from'../chunk-IOXRZECH.mjs';var G=.8224619687,$=.1775380313,w=.0331941989,A=.9668058011,F=.0170826307,B=.0723974407,I=.9105199286,N=1.2249401762805598,E=-0.22494017628055996,U=-0.04205695470968816,z=1.042056954709688,K=-0.019637554590334432,M=-0.07863604555063189,q=1.0982736001409663,O=(r,n,o,e)=>{r[0]=G*n+$*o,r[1]=w*n+A*o,r[2]=F*n+B*o+I*e;},P=(r,n,o)=>[G*r+$*n,w*r+A*n,F*r+B*n+I*o];var S=(r,n,o)=>[N*r+E*n,U*r+z*n,K*r+M*n+q*o],j=({r,g:n,b:o,alpha:e})=>{let[t,m,p]=P(a$1(r/255),a$1(n/255),a$1(o/255));return {r:b$1(b(t),4),g:b$1(b(m),4),b:b$1(b(p),4),alpha:e,colorSpace:"display-p3"}};var v=({r,g:n,b:o,alpha:e})=>{let[t,m,p]=S(a$1(r),a$1(n),a$1(o));return {r:b(t)*255,g:b(m)*255,b:b(p)*255,alpha:e}},y=r=>{if(!h(r)||r.colorSpace!=="display-p3"||!i(r,["r","g","b"]))return null;let{r:n,g:o,b:e,alpha:t=1}=r;return !f$3(n)||!f$3(o)||!f$3(e)||!f$3(t)?null:v({r:g(n),g:g(o),b:g(e),alpha:a$2(g(t),0,1)})},D=new RegExp(`^color\\(\\s*display-p3\\s+(?<r>${k})(?<rp>%?)\\s+(?<g>${k})(?<gp>%?)\\s+(?<b>${k})(?<bp>%?)\\s*(?:/\\s*(?<al>${k})(?<alp>%?)\\s*)?\\)$`,"i"),f=r=>{if(typeof r!="string")return null;let n=D.exec(r.trim())?.groups;if(!n)return null;let o=n.rp?l(n.r)/100:l(n.r),e=n.gp?l(n.g)/100:l(n.g),t=n.bp?l(n.b)/100:l(n.b),m=n.al===void 0?1:l(n.al)/(n.alp?100:1);return v({r:o,g:e,b:t,alpha:a$2(m,0,1)})},T=(r,n,o)=>P(...f$2(r,n,o));var H=(r,n,o)=>a(...S(r,n,o)),J=(r,n,o)=>{let[e,t,m]=P(r,n,o);return [b(e),b(t),b(m)]},Q=(r,n,o,e)=>{O(r,n,o,e),r[0]=b(r[0]),r[1]=b(r[1]),r[2]=b(r[2]);},mr=(r,n,o)=>J(...e(r,n,o)),ar=(r,n,o,e)=>{f$1(r,n,o,e),Q(r,r[0],r[1],r[2]);},lr=r=>c(r,T),V=(r,n,o)=>{r.toGamutP3=e=>{let t=d(e,T,H);return t!==null?r._makeFromOklab(t):new r(e)},r.prototype.toP3=function(){return j(this._rawRgb())},r.prototype.toP3String=function(){let{r:e,g:t,b:m,alpha:p}=this.toP3();return p<1?`color(display-p3 ${e} ${t} ${m} / ${p})`:`color(display-p3 ${e} ${t} ${m})`},n.push(f,y),o.push([f,"p3"],[y,"p3"]);},pr=V;export{pr as default,lr as inGamutP3,J as linearToP3Channels,Q as linearToP3ChannelsInto,mr as oklchToP3Channels,ar as oklchToP3ChannelsInto};//# sourceMappingURL=p3.mjs.map | ||
| //# sourceMappingURL=p3.mjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/colorModels/p3.ts","../../src/plugins/p3.ts"],"names":["SP3_RR","SP3_RG","SP3_GR","SP3_GG","SP3_BR","SP3_BG","SP3_BB","P3S_RR","P3S_RG","P3S_GR","P3S_GG","P3S_BR","P3S_BG","P3S_BB","srgbLinearToP3LinearInto","out","r","g","b","srgbLinearToP3Linear","linearP3ToSrgb","rgbToP3","alpha","p3r","p3g","p3b","srgbToLinear","round","srgbFromLinear","p3ToRgbUnclamped","sr","sg","sb","parseP3Object","input","isObject","hasKeys","isAnyNumber","sanitize","clamp","P3_RE","parseP3String","m","oklabToLinearP3","l","a","oklabToLinear","p3FromLinear","linearSrgbToOklab","linearToP3Channels","lr","lg","lb","linearToP3ChannelsInto","oklchToP3Channels","c","h","oklchToLinear","oklchToP3ChannelsInto","oklchToLinearInto","inGamutP3","inGamutCustom","p3","ColordxClass","parsers","formatParsers","mapped","toGamutCustom","p3_default"],"mappings":"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","file":"p3.mjs","sourcesContent":["import { clamp, hasKeys, isAnyNumber, isObject, round, sanitize } from '../helpers.js';\nimport { srgbFromLinear, srgbToLinear } from '../transfer.js';\nimport type { P3Color, RgbColor } from '../types.js';\nimport { oklabToLinear, oklabToLinearInto } from './oklab.js';\nimport { clampRgb } from './rgb.js';\n\n// Linear sRGB ↔ Linear Display-P3 (D65, CSS Color 4). The forward matrix has zero\n// blue-output coefficients on the r/g rows — correct per spec, not a bug.\n// Shared between the allocating and *Into variants.\nconst SP3_RR = 0.8224619687,\n SP3_RG = 0.1775380313;\nconst SP3_GR = 0.0331941989,\n SP3_GG = 0.9668058011;\nconst SP3_BR = 0.0170826307,\n SP3_BG = 0.0723974407,\n SP3_BB = 0.9105199286;\nconst P3S_RR = 1.2249401762805598,\n P3S_RG = -0.22494017628055996;\nconst P3S_GR = -0.042056954709688163,\n P3S_GG = 1.0420569547096881;\nconst P3S_BR = -0.019637554590334432,\n P3S_BG = -0.078636045550631889,\n P3S_BB = 1.0982736001409663;\n\n/** Zero-allocation sibling of srgbLinearToP3Linear — writes into `out`. Safe when out === input arg. */\nexport const srgbLinearToP3LinearInto = (out: Float64Array | number[], r: number, g: number, b: number): void => {\n out[0] = SP3_RR * r + SP3_RG * g;\n out[1] = SP3_GR * r + SP3_GG * g;\n out[2] = SP3_BR * r + SP3_BG * g + SP3_BB * b;\n};\n\nexport const srgbLinearToP3Linear = (r: number, g: number, b: number): [number, number, number] => [\n SP3_RR * r + SP3_RG * g,\n SP3_GR * r + SP3_GG * g,\n SP3_BR * r + SP3_BG * g + SP3_BB * b,\n];\n\n/** Zero-allocation sibling of linearP3ToSrgb — writes into `out`. */\nexport const linearP3ToSrgbInto = (out: Float64Array | number[], r: number, g: number, b: number): void => {\n out[0] = P3S_RR * r + P3S_RG * g;\n out[1] = P3S_GR * r + P3S_GG * g;\n out[2] = P3S_BR * r + P3S_BG * g + P3S_BB * b;\n};\n\nexport const linearP3ToSrgb = (r: number, g: number, b: number): [number, number, number] => [\n P3S_RR * r + P3S_RG * g,\n P3S_GR * r + P3S_GG * g,\n P3S_BR * r + P3S_BG * g + P3S_BB * b,\n];\n\n// No clamping on output: P3 is wide-gamut, sRGB values can legitimately sit outside [0,1] in P3 space.\n// p3ToRgb clips back to sRGB gamut on the way out.\nexport const rgbToP3 = ({ r, g, b, alpha }: RgbColor): P3Color => {\n const [p3r, p3g, p3b] = srgbLinearToP3Linear(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n return {\n r: round(srgbFromLinear(p3r), 4),\n g: round(srgbFromLinear(p3g), 4),\n b: round(srgbFromLinear(p3b), 4),\n alpha,\n colorSpace: 'display-p3',\n };\n};\n\nexport const p3ToRgb = ({ r, g, b, alpha }: P3Color): RgbColor => {\n const [sr, sg, sb] = linearP3ToSrgb(srgbToLinear(r), srgbToLinear(g), srgbToLinear(b));\n return clampRgb({\n r: srgbFromLinear(clamp(sr, 0, 1)) * 255,\n g: srgbFromLinear(clamp(sg, 0, 1)) * 255,\n b: srgbFromLinear(clamp(sb, 0, 1)) * 255,\n alpha,\n });\n};\n\n/** Unclamped P3 → gamma-encoded sRGB. Channels may exceed [0, 255] for out-of-sRGB-gamut colors. */\nconst p3ToRgbUnclamped = ({ r, g, b, alpha }: P3Color): RgbColor => {\n const [sr, sg, sb] = linearP3ToSrgb(srgbToLinear(r), srgbToLinear(g), srgbToLinear(b));\n return {\n r: srgbFromLinear(sr) * 255,\n g: srgbFromLinear(sg) * 255,\n b: srgbFromLinear(sb) * 255,\n alpha,\n };\n};\n\nexport const parseP3Object = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if ((input as { colorSpace?: unknown }).colorSpace !== 'display-p3') return null;\n if (!hasKeys(input, ['r', 'g', 'b'])) return null;\n const { r, g, b, alpha = 1 } = input as { r: unknown; g: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(r) || !isAnyNumber(g) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return p3ToRgbUnclamped({\n r: sanitize(r),\n g: sanitize(g),\n b: sanitize(b),\n alpha: clamp(sanitize(alpha), 0, 1),\n colorSpace: 'display-p3',\n });\n};\n\nconst P3_RE =\n /^color\\(\\s*display-p3\\s+([+-]?\\d*\\.?\\d+)\\s+([+-]?\\d*\\.?\\d+)\\s+([+-]?\\d*\\.?\\d+)\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nexport const parseP3String = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = P3_RE.exec(input.trim());\n if (!m) return null;\n const alpha = m[4] === undefined ? 1 : Number(m[4]) / (m[5] ? 100 : 1);\n return p3ToRgbUnclamped({\n r: Number(m[1]),\n g: Number(m[2]),\n b: Number(m[3]),\n alpha: clamp(alpha, 0, 1),\n colorSpace: 'display-p3',\n });\n};\n\n/** Unclamped linear Display-P3 channels from OKLab values. */\nexport const oklabToLinearP3 = (l: number, a: number, b: number): [number, number, number] =>\n srgbLinearToP3Linear(...oklabToLinear(l, a, b));\n\n/** Zero-allocation sibling of oklabToLinearP3 — writes [pr, pg, pb] into `out`. */\nexport const oklabToLinearP3Into = (out: Float64Array | number[], l: number, a: number, b: number): void => {\n oklabToLinearInto(out, l, a, b);\n srgbLinearToP3LinearInto(out, out[0]!, out[1]!, out[2]!);\n};\n","import { oklchToLinear, oklchToLinearInto } from '../channels.js';\nimport { linearSrgbToOklab } from '../colorModels/oklab.js';\nimport {\n linearP3ToSrgb,\n oklabToLinearP3,\n parseP3Object,\n parseP3String,\n rgbToP3,\n srgbLinearToP3Linear,\n srgbLinearToP3LinearInto,\n} from '../colorModels/p3.js';\nimport type { Plugin } from '../colordx.js';\nimport { inGamutCustom, toGamutCustom } from '../gamut.js';\nimport { srgbFromLinear } from '../transfer.js';\nimport type { AnyColor, P3Color } from '../types.js';\n\nconst p3FromLinear = (r: number, g: number, b: number): [number, number, number] =>\n linearSrgbToOklab(...linearP3ToSrgb(r, g, b));\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toP3(): P3Color;\n toP3String(): string;\n }\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace Colordx {\n function toGamutP3(input: AnyColor): Colordx;\n }\n}\n\n/**\n * Convert linear sRGB channels (from oklchToLinear) to gamma-encoded Display-P3 channels.\n * This is the cheap step — only a matrix multiply + gamma encoding, no cbrt.\n * Pair with oklchToLinear to convert one OKLCH color to multiple spaces without\n * repeating the expensive OKLab pipeline.\n */\nexport const linearToP3Channels = (lr: number, lg: number, lb: number): [number, number, number] => {\n const [r, g, b] = srgbLinearToP3Linear(lr, lg, lb);\n return [srgbFromLinear(r), srgbFromLinear(g), srgbFromLinear(b)];\n};\n\n/** Zero-allocation sibling of linearToP3Channels — writes [pr, pg, pb] (gamma-encoded, 0–1) into `out`. */\nexport const linearToP3ChannelsInto = (out: Float64Array | number[], lr: number, lg: number, lb: number): void => {\n srgbLinearToP3LinearInto(out, lr, lg, lb);\n out[0] = srgbFromLinear(out[0]!);\n out[1] = srgbFromLinear(out[1]!);\n out[2] = srgbFromLinear(out[2]!);\n};\n\n/**\n * Convert OKLCH to gamma-encoded Display-P3 channels without object allocation.\n * Returns [r, g, b] in [0, 1] for in-gamut colors. Out-of-gamut channels may\n * exceed this range — callers are responsible for clamping before byte encoding.\n * Uses the sRGB transfer function (P3 does not use DCI-P3 gamma 2.6).\n */\nexport const oklchToP3Channels = (l: number, c: number, h: number): [number, number, number] =>\n linearToP3Channels(...oklchToLinear(l, c, h));\n\n/** Zero-allocation sibling of oklchToP3Channels — writes [pr, pg, pb] into `out`. */\nexport const oklchToP3ChannelsInto = (out: Float64Array | number[], l: number, c: number, h: number): void => {\n oklchToLinearInto(out, l, c, h);\n linearToP3ChannelsInto(out, out[0]!, out[1]!, out[2]!);\n};\n\n/**\n * Returns true if the color is within the Display-P3 gamut.\n * sRGB inputs (hex, rgb, hsl, etc.) always return true (sRGB ⊂ P3).\n */\nexport const inGamutP3 = (input: AnyColor): boolean => inGamutCustom(input, oklabToLinearP3);\n\nconst p3: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.toGamutP3 = (input: AnyColor) => {\n const mapped = toGamutCustom(input, oklabToLinearP3, p3FromLinear);\n return mapped !== null ? ColordxClass._makeFromOklab(mapped) : new ColordxClass(input);\n };\n ColordxClass.prototype.toP3 = function () {\n return rgbToP3(this._rawRgb());\n };\n ColordxClass.prototype.toP3String = function () {\n const { r, g, b, alpha } = this.toP3();\n return alpha < 1 ? `color(display-p3 ${r} ${g} ${b} / ${alpha})` : `color(display-p3 ${r} ${g} ${b})`;\n };\n parsers.push(parseP3String, parseP3Object);\n formatParsers.push([parseP3String, 'p3'], [parseP3Object, 'p3']);\n};\n\nexport default p3;\n"]} | ||
| {"version":3,"sources":["../../src/colorModels/p3.ts","../../src/plugins/p3.ts"],"names":["SP3_RR","SP3_RG","SP3_GR","SP3_GG","SP3_BR","SP3_BG","SP3_BB","P3S_RR","P3S_RG","P3S_GR","P3S_GG","P3S_BR","P3S_BG","P3S_BB","srgbLinearToP3LinearInto","out","r","g","b","srgbLinearToP3Linear","linearP3ToSrgb","rgbToP3","alpha","p3r","p3g","p3b","srgbToLinear","round","srgbFromLinear","p3ToRgbUnclamped","sr","sg","sb","parseP3Object","input","isObject","hasKeys","isAnyNumber","sanitize","clamp","P3_RE","NUM_OR_NONE","parseP3String","parseNum","gc","oklabToLinearP3","l","a","oklabToLinear","p3FromLinear","linearSrgbToOklab","linearToP3Channels","lr","lg","lb","linearToP3ChannelsInto","oklchToP3Channels","c","h","oklchToLinear","oklchToP3ChannelsInto","oklchToLinearInto","inGamutP3","inGamutCustom","p3","ColordxClass","parsers","formatParsers","mapped","toGamutCustom","p3_default"],"mappings":"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","file":"p3.mjs","sourcesContent":["import { NUM_OR_NONE, clamp, hasKeys, isAnyNumber, isObject, parseNum, round, sanitize } from '../helpers.js';\nimport { srgbFromLinear, srgbToLinear } from '../transfer.js';\nimport type { P3Color, RgbColor } from '../types.js';\nimport { oklabToLinear, oklabToLinearInto } from './oklab.js';\nimport { clampRgb } from './rgb.js';\n\n// Linear sRGB ↔ Linear Display-P3 (D65, CSS Color 4). The forward matrix has zero\n// blue-output coefficients on the r/g rows — correct per spec, not a bug.\n// Shared between the allocating and *Into variants.\nconst SP3_RR = 0.8224619687,\n SP3_RG = 0.1775380313;\nconst SP3_GR = 0.0331941989,\n SP3_GG = 0.9668058011;\nconst SP3_BR = 0.0170826307,\n SP3_BG = 0.0723974407,\n SP3_BB = 0.9105199286;\nconst P3S_RR = 1.2249401762805598,\n P3S_RG = -0.22494017628055996;\nconst P3S_GR = -0.042056954709688163,\n P3S_GG = 1.0420569547096881;\nconst P3S_BR = -0.019637554590334432,\n P3S_BG = -0.078636045550631889,\n P3S_BB = 1.0982736001409663;\n\n/** Zero-allocation sibling of srgbLinearToP3Linear — writes into `out`. Safe when out === input arg. */\nexport const srgbLinearToP3LinearInto = (out: Float64Array | number[], r: number, g: number, b: number): void => {\n out[0] = SP3_RR * r + SP3_RG * g;\n out[1] = SP3_GR * r + SP3_GG * g;\n out[2] = SP3_BR * r + SP3_BG * g + SP3_BB * b;\n};\n\nexport const srgbLinearToP3Linear = (r: number, g: number, b: number): [number, number, number] => [\n SP3_RR * r + SP3_RG * g,\n SP3_GR * r + SP3_GG * g,\n SP3_BR * r + SP3_BG * g + SP3_BB * b,\n];\n\n/** Zero-allocation sibling of linearP3ToSrgb — writes into `out`. */\nexport const linearP3ToSrgbInto = (out: Float64Array | number[], r: number, g: number, b: number): void => {\n out[0] = P3S_RR * r + P3S_RG * g;\n out[1] = P3S_GR * r + P3S_GG * g;\n out[2] = P3S_BR * r + P3S_BG * g + P3S_BB * b;\n};\n\nexport const linearP3ToSrgb = (r: number, g: number, b: number): [number, number, number] => [\n P3S_RR * r + P3S_RG * g,\n P3S_GR * r + P3S_GG * g,\n P3S_BR * r + P3S_BG * g + P3S_BB * b,\n];\n\n// No clamping on output: P3 is wide-gamut, sRGB values can legitimately sit outside [0,1] in P3 space.\n// p3ToRgb clips back to sRGB gamut on the way out.\nexport const rgbToP3 = ({ r, g, b, alpha }: RgbColor): P3Color => {\n const [p3r, p3g, p3b] = srgbLinearToP3Linear(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n return {\n r: round(srgbFromLinear(p3r), 4),\n g: round(srgbFromLinear(p3g), 4),\n b: round(srgbFromLinear(p3b), 4),\n alpha,\n colorSpace: 'display-p3',\n };\n};\n\nexport const p3ToRgb = ({ r, g, b, alpha }: P3Color): RgbColor => {\n const [sr, sg, sb] = linearP3ToSrgb(srgbToLinear(r), srgbToLinear(g), srgbToLinear(b));\n return clampRgb({\n r: srgbFromLinear(clamp(sr, 0, 1)) * 255,\n g: srgbFromLinear(clamp(sg, 0, 1)) * 255,\n b: srgbFromLinear(clamp(sb, 0, 1)) * 255,\n alpha,\n });\n};\n\n/** Unclamped P3 → gamma-encoded sRGB. Channels may exceed [0, 255] for out-of-sRGB-gamut colors. */\nconst p3ToRgbUnclamped = ({ r, g, b, alpha }: P3Color): RgbColor => {\n const [sr, sg, sb] = linearP3ToSrgb(srgbToLinear(r), srgbToLinear(g), srgbToLinear(b));\n return {\n r: srgbFromLinear(sr) * 255,\n g: srgbFromLinear(sg) * 255,\n b: srgbFromLinear(sb) * 255,\n alpha,\n };\n};\n\nexport const parseP3Object = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if ((input as { colorSpace?: unknown }).colorSpace !== 'display-p3') return null;\n if (!hasKeys(input, ['r', 'g', 'b'])) return null;\n const { r, g, b, alpha = 1 } = input as { r: unknown; g: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(r) || !isAnyNumber(g) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return p3ToRgbUnclamped({\n r: sanitize(r),\n g: sanitize(g),\n b: sanitize(b),\n alpha: clamp(sanitize(alpha), 0, 1),\n colorSpace: 'display-p3',\n });\n};\n\n// CSS Color 4: color(display-p3 r g b / alpha). Channels accept number|percentage|none; 100% = 1.\nconst P3_RE = new RegExp(\n `^color\\\\(\\\\s*display-p3\\\\s+(?<r>${NUM_OR_NONE})(?<rp>%?)\\\\s+(?<g>${NUM_OR_NONE})(?<gp>%?)` +\n `\\\\s+(?<b>${NUM_OR_NONE})(?<bp>%?)\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseP3String = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = P3_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const r = g.rp ? parseNum(g.r!) / 100 : parseNum(g.r!);\n const gc = g.gp ? parseNum(g.g!) / 100 : parseNum(g.g!);\n const b = g.bp ? parseNum(g.b!) / 100 : parseNum(g.b!);\n const alpha = g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1);\n return p3ToRgbUnclamped({\n r,\n g: gc,\n b,\n alpha: clamp(alpha, 0, 1),\n colorSpace: 'display-p3',\n });\n};\n\n/** Unclamped linear Display-P3 channels from OKLab values. */\nexport const oklabToLinearP3 = (l: number, a: number, b: number): [number, number, number] =>\n srgbLinearToP3Linear(...oklabToLinear(l, a, b));\n\n/** Zero-allocation sibling of oklabToLinearP3 — writes [pr, pg, pb] into `out`. */\nexport const oklabToLinearP3Into = (out: Float64Array | number[], l: number, a: number, b: number): void => {\n oklabToLinearInto(out, l, a, b);\n srgbLinearToP3LinearInto(out, out[0]!, out[1]!, out[2]!);\n};\n","import { oklchToLinear, oklchToLinearInto } from '../channels.js';\nimport { linearSrgbToOklab } from '../colorModels/oklab.js';\nimport {\n linearP3ToSrgb,\n oklabToLinearP3,\n parseP3Object,\n parseP3String,\n rgbToP3,\n srgbLinearToP3Linear,\n srgbLinearToP3LinearInto,\n} from '../colorModels/p3.js';\nimport type { Plugin } from '../colordx.js';\nimport { inGamutCustom, toGamutCustom } from '../gamut.js';\nimport { srgbFromLinear } from '../transfer.js';\nimport type { AnyColor, P3Color } from '../types.js';\n\nconst p3FromLinear = (r: number, g: number, b: number): [number, number, number] =>\n linearSrgbToOklab(...linearP3ToSrgb(r, g, b));\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toP3(): P3Color;\n toP3String(): string;\n }\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace Colordx {\n function toGamutP3(input: AnyColor): Colordx;\n }\n}\n\n/**\n * Convert linear sRGB channels (from oklchToLinear) to gamma-encoded Display-P3 channels.\n * This is the cheap step — only a matrix multiply + gamma encoding, no cbrt.\n * Pair with oklchToLinear to convert one OKLCH color to multiple spaces without\n * repeating the expensive OKLab pipeline.\n */\nexport const linearToP3Channels = (lr: number, lg: number, lb: number): [number, number, number] => {\n const [r, g, b] = srgbLinearToP3Linear(lr, lg, lb);\n return [srgbFromLinear(r), srgbFromLinear(g), srgbFromLinear(b)];\n};\n\n/** Zero-allocation sibling of linearToP3Channels — writes [pr, pg, pb] (gamma-encoded, 0–1) into `out`. */\nexport const linearToP3ChannelsInto = (out: Float64Array | number[], lr: number, lg: number, lb: number): void => {\n srgbLinearToP3LinearInto(out, lr, lg, lb);\n out[0] = srgbFromLinear(out[0]!);\n out[1] = srgbFromLinear(out[1]!);\n out[2] = srgbFromLinear(out[2]!);\n};\n\n/**\n * Convert OKLCH to gamma-encoded Display-P3 channels without object allocation.\n * Returns [r, g, b] in [0, 1] for in-gamut colors. Out-of-gamut channels may\n * exceed this range — callers are responsible for clamping before byte encoding.\n * Uses the sRGB transfer function (P3 does not use DCI-P3 gamma 2.6).\n */\nexport const oklchToP3Channels = (l: number, c: number, h: number): [number, number, number] =>\n linearToP3Channels(...oklchToLinear(l, c, h));\n\n/** Zero-allocation sibling of oklchToP3Channels — writes [pr, pg, pb] into `out`. */\nexport const oklchToP3ChannelsInto = (out: Float64Array | number[], l: number, c: number, h: number): void => {\n oklchToLinearInto(out, l, c, h);\n linearToP3ChannelsInto(out, out[0]!, out[1]!, out[2]!);\n};\n\n/**\n * Returns true if the color is within the Display-P3 gamut.\n * sRGB inputs (hex, rgb, hsl, etc.) always return true (sRGB ⊂ P3).\n */\nexport const inGamutP3 = (input: AnyColor): boolean => inGamutCustom(input, oklabToLinearP3);\n\nconst p3: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.toGamutP3 = (input: AnyColor) => {\n const mapped = toGamutCustom(input, oklabToLinearP3, p3FromLinear);\n return mapped !== null ? ColordxClass._makeFromOklab(mapped) : new ColordxClass(input);\n };\n ColordxClass.prototype.toP3 = function () {\n return rgbToP3(this._rawRgb());\n };\n ColordxClass.prototype.toP3String = function () {\n const { r, g, b, alpha } = this.toP3();\n return alpha < 1 ? `color(display-p3 ${r} ${g} ${b} / ${alpha})` : `color(display-p3 ${r} ${g} ${b})`;\n };\n parsers.push(parseP3String, parseP3Object);\n formatParsers.push([parseP3String, 'p3'], [parseP3Object, 'p3']);\n};\n\nexport default p3;\n"]} |
@@ -1,2 +0,2 @@ | ||
| 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var chunkEPG4VVQB_cjs=require('../chunk-EPG4VVQB.cjs'),chunkBBEOVRYB_cjs=require('../chunk-BBEOVRYB.cjs');require('../chunk-IHOZOJHA.cjs');var chunkX5FCFNQN_cjs=require('../chunk-X5FCFNQN.cjs');require('../chunk-GYCEEHZT.cjs');var chunkEXPXWBLP_cjs=require('../chunk-EXPXWBLP.cjs');var B=.6274038959,A=.3292830384,F=.0433130657,w=.0690972894,I=.9195403951,$=.0113623156,j=.0163914389,v=.0880133079,N=.8955952532,z=1.6604910021084345,K=-0.5876411387885495,U=-0.07284986331988488,q=-0.12455047452159074,D=1.1328998971259603,H=-0.008349422604369477,J=-0.018150763354905303,M=-0.10057889800800739,Q=1.1187296613629127,O=(r,e,n,o)=>{r[0]=B*e+A*n+F*o,r[1]=w*e+I*n+$*o,r[2]=j*e+v*n+N*o;},p=(r,e,n)=>[B*r+A*e+F*n,w*r+I*e+$*n,j*r+v*e+N*n];var S=(r,e,n)=>[z*r+K*e+U*n,q*r+D*e+H*n,J*r+M*e+Q*n],E=({r,g:e,b:n,alpha:o})=>{let[c,m,b]=p(chunkX5FCFNQN_cjs.a(r/255),chunkX5FCFNQN_cjs.a(e/255),chunkX5FCFNQN_cjs.a(n/255));return {r:chunkEXPXWBLP_cjs.b(chunkX5FCFNQN_cjs.d(c),4),g:chunkEXPXWBLP_cjs.b(chunkX5FCFNQN_cjs.d(m),4),b:chunkEXPXWBLP_cjs.b(chunkX5FCFNQN_cjs.d(b),4),alpha:o,colorSpace:"rec2020"}};var P=({r,g:e,b:n,alpha:o})=>{let[c,m,b]=S(chunkX5FCFNQN_cjs.c(r),chunkX5FCFNQN_cjs.c(e),chunkX5FCFNQN_cjs.c(n));return {r:chunkX5FCFNQN_cjs.b(c)*255,g:chunkX5FCFNQN_cjs.b(m)*255,b:chunkX5FCFNQN_cjs.b(b)*255,alpha:o}},f=r=>{if(!chunkEXPXWBLP_cjs.h(r)||r.colorSpace!=="rec2020"||!chunkEXPXWBLP_cjs.i(r,["r","g","b"]))return null;let{r:e,g:n,b:o,alpha:c=1}=r;return !chunkEXPXWBLP_cjs.f(e)||!chunkEXPXWBLP_cjs.f(n)||!chunkEXPXWBLP_cjs.f(o)||!chunkEXPXWBLP_cjs.f(c)?null:P({r:chunkEXPXWBLP_cjs.g(e),g:chunkEXPXWBLP_cjs.g(n),b:chunkEXPXWBLP_cjs.g(o),alpha:chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.g(c),0,1)})},V=/^color\(\s*rec2020\s+([+-]?\d*\.?\d+)\s+([+-]?\d*\.?\d+)\s+([+-]?\d*\.?\d+)\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,T=r=>{if(typeof r!="string")return null;let e=V.exec(r.trim());if(!e)return null;let n=e[4]===void 0?1:Number(e[4])/(e[5]?100:1);return P({r:Number(e[1]),g:Number(e[2]),b:Number(e[3]),alpha:chunkEXPXWBLP_cjs.a(n,0,1)})},d=(r,e,n)=>p(...chunkBBEOVRYB_cjs.f(r,e,n));var W=(r,e,n)=>chunkBBEOVRYB_cjs.a(...S(r,e,n)),X=(r,e,n)=>{let[o,c,m]=p(r,e,n);return [chunkX5FCFNQN_cjs.d(o),chunkX5FCFNQN_cjs.d(c),chunkX5FCFNQN_cjs.d(m)]},Y=(r,e,n,o)=>{O(r,e,n,o),r[0]=chunkX5FCFNQN_cjs.d(r[0]),r[1]=chunkX5FCFNQN_cjs.d(r[1]),r[2]=chunkX5FCFNQN_cjs.d(r[2]);},lr=(r,e,n)=>X(...chunkEPG4VVQB_cjs.e(r,e,n)),Rr=(r,e,n,o)=>{chunkEPG4VVQB_cjs.f(r,e,n,o),Y(r,r[0],r[1],r[2]);},sr=r=>chunkEPG4VVQB_cjs.c(r,d),Z=(r,e,n)=>{r.toGamutRec2020=o=>{let c=chunkEPG4VVQB_cjs.d(o,d,W);return c!==null?r._makeFromOklab(c):new r(o)},r.prototype.toRec2020=function(){return E(this._rawRgb())},r.prototype.toRec2020String=function(){let{r:o,g:c,b:m,alpha:b}=this.toRec2020();return b<1?`color(rec2020 ${o} ${c} ${m} / ${b})`:`color(rec2020 ${o} ${c} ${m})`},e.push(T,f),n.push([T,"rec2020"],[f,"rec2020"]);},ir=Z;exports.default=ir;exports.inGamutRec2020=sr;exports.linearToRec2020Channels=X;exports.linearToRec2020ChannelsInto=Y;exports.oklchToRec2020Channels=lr;exports.oklchToRec2020ChannelsInto=Rr;//# sourceMappingURL=rec2020.cjs.map | ||
| 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var chunk3D3MFLZZ_cjs=require('../chunk-3D3MFLZZ.cjs'),chunk44FDTAPT_cjs=require('../chunk-44FDTAPT.cjs');require('../chunk-EDNIB75Q.cjs');var chunkX5FCFNQN_cjs=require('../chunk-X5FCFNQN.cjs');require('../chunk-3V4MONNR.cjs');var chunkYISEJCI6_cjs=require('../chunk-YISEJCI6.cjs');var w=.6274038959,A=.3292830384,F=.0433130657,I=.0690972894,O=.9195403951,j=.0113623156,v=.0163914389,N=.0880133079,E=.8955952532,K=1.6604910021084345,M=-0.5876411387885495,q=-0.07284986331988488,D=-0.12455047452159074,H=1.1328998971259603,J=-0.008349422604369477,Q=-0.018150763354905303,V=-0.10057889800800739,W=1.1187296613629127,P=(r,e,n,o)=>{r[0]=w*e+A*n+F*o,r[1]=I*e+O*n+j*o,r[2]=v*e+N*n+E*o;},S=(r,e,n)=>[w*r+A*e+F*n,I*r+O*e+j*n,v*r+N*e+E*n];var T=(r,e,n)=>[K*r+M*e+q*n,D*r+H*e+J*n,Q*r+V*e+W*n],U=({r,g:e,b:n,alpha:o})=>{let[c,m,a]=S(chunkX5FCFNQN_cjs.a(r/255),chunkX5FCFNQN_cjs.a(e/255),chunkX5FCFNQN_cjs.a(n/255));return {r:chunkYISEJCI6_cjs.b(chunkX5FCFNQN_cjs.d(c),4),g:chunkYISEJCI6_cjs.b(chunkX5FCFNQN_cjs.d(m),4),b:chunkYISEJCI6_cjs.b(chunkX5FCFNQN_cjs.d(a),4),alpha:o,colorSpace:"rec2020"}};var z=({r,g:e,b:n,alpha:o})=>{let[c,m,a]=T(chunkX5FCFNQN_cjs.c(r),chunkX5FCFNQN_cjs.c(e),chunkX5FCFNQN_cjs.c(n));return {r:chunkX5FCFNQN_cjs.b(c)*255,g:chunkX5FCFNQN_cjs.b(m)*255,b:chunkX5FCFNQN_cjs.b(a)*255,alpha:o}},_=r=>{if(!chunkYISEJCI6_cjs.h(r)||r.colorSpace!=="rec2020"||!chunkYISEJCI6_cjs.i(r,["r","g","b"]))return null;let{r:e,g:n,b:o,alpha:c=1}=r;return !chunkYISEJCI6_cjs.f(e)||!chunkYISEJCI6_cjs.f(n)||!chunkYISEJCI6_cjs.f(o)||!chunkYISEJCI6_cjs.f(c)?null:z({r:chunkYISEJCI6_cjs.g(e),g:chunkYISEJCI6_cjs.g(n),b:chunkYISEJCI6_cjs.g(o),alpha:chunkYISEJCI6_cjs.a(chunkYISEJCI6_cjs.g(c),0,1)})},X=new RegExp(`^color\\(\\s*rec2020\\s+(?<r>${chunkYISEJCI6_cjs.k})(?<rp>%?)\\s+(?<g>${chunkYISEJCI6_cjs.k})(?<gp>%?)\\s+(?<b>${chunkYISEJCI6_cjs.k})(?<bp>%?)\\s*(?:/\\s*(?<al>${chunkYISEJCI6_cjs.k})(?<alp>%?)\\s*)?\\)$`,"i"),L=r=>{if(typeof r!="string")return null;let e=X.exec(r.trim())?.groups;if(!e)return null;let n=e.rp?chunkYISEJCI6_cjs.l(e.r)/100:chunkYISEJCI6_cjs.l(e.r),o=e.gp?chunkYISEJCI6_cjs.l(e.g)/100:chunkYISEJCI6_cjs.l(e.g),c=e.bp?chunkYISEJCI6_cjs.l(e.b)/100:chunkYISEJCI6_cjs.l(e.b),m=e.al===void 0?1:chunkYISEJCI6_cjs.l(e.al)/(e.alp?100:1);return z({r:n,g:o,b:c,alpha:chunkYISEJCI6_cjs.a(m,0,1)})},h=(r,e,n)=>S(...chunk44FDTAPT_cjs.f(r,e,n));var Y=(r,e,n)=>chunk44FDTAPT_cjs.a(...T(r,e,n)),Z=(r,e,n)=>{let[o,c,m]=S(r,e,n);return [chunkX5FCFNQN_cjs.d(o),chunkX5FCFNQN_cjs.d(c),chunkX5FCFNQN_cjs.d(m)]},rr=(r,e,n,o)=>{P(r,e,n,o),r[0]=chunkX5FCFNQN_cjs.d(r[0]),r[1]=chunkX5FCFNQN_cjs.d(r[1]),r[2]=chunkX5FCFNQN_cjs.d(r[2]);},Rr=(r,e,n)=>Z(...chunk3D3MFLZZ_cjs.e(r,e,n)),ir=(r,e,n,o)=>{chunk3D3MFLZZ_cjs.f(r,e,n,o),rr(r,r[0],r[1],r[2]);},pr=r=>chunk3D3MFLZZ_cjs.c(r,h),er=(r,e,n)=>{r.toGamutRec2020=o=>{let c=chunk3D3MFLZZ_cjs.d(o,h,Y);return c!==null?r._makeFromOklab(c):new r(o)},r.prototype.toRec2020=function(){return U(this._rawRgb())},r.prototype.toRec2020String=function(){let{r:o,g:c,b:m,alpha:a}=this.toRec2020();return a<1?`color(rec2020 ${o} ${c} ${m} / ${a})`:`color(rec2020 ${o} ${c} ${m})`},e.push(L,_),n.push([L,"rec2020"],[_,"rec2020"]);},gr=er;exports.default=gr;exports.inGamutRec2020=pr;exports.linearToRec2020Channels=Z;exports.linearToRec2020ChannelsInto=rr;exports.oklchToRec2020Channels=Rr;exports.oklchToRec2020ChannelsInto=ir;//# sourceMappingURL=rec2020.cjs.map | ||
| //# sourceMappingURL=rec2020.cjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/colorModels/rec2020.ts","../../src/plugins/rec2020.ts"],"names":["SR2_RR","SR2_RG","SR2_RB","SR2_GR","SR2_GG","SR2_GB","SR2_BR","SR2_BG","SR2_BB","R2S_RR","R2S_RG","R2S_RB","R2S_GR","R2S_GG","R2S_GB","R2S_BR","R2S_BG","R2S_BB","srgbLinearToRec2020LinearInto","out","r","g","b","srgbLinearToRec2020Linear","linearRec2020ToSrgb","rgbToRec2020","alpha","rr","rg","rb","srgbToLinear","round","rec2020FromLinear","rec2020ToRgbUnclamped","sr","sg","sb","rec2020ToLinear","srgbFromLinear","parseRec2020Object","input","isObject","hasKeys","isAnyNumber","sanitize","clamp","REC2020_RE","parseRec2020String","m","oklabToLinearRec2020","l","a","oklabToLinear","rec2020FromLinearConverter","linearSrgbToOklab","linearToRec2020Channels","lr","lg","lb","linearToRec2020ChannelsInto","oklchToRec2020Channels","c","h","oklchToLinear","oklchToRec2020ChannelsInto","oklchToLinearInto","inGamutRec2020","inGamutCustom","rec2020","ColordxClass","parsers","formatParsers","mapped","toGamutCustom","rec2020_default"],"mappings":"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","file":"rec2020.cjs","sourcesContent":["import { clamp, hasKeys, isAnyNumber, isObject, round, sanitize } from '../helpers.js';\nimport { rec2020FromLinear, rec2020ToLinear, srgbFromLinear, srgbToLinear } from '../transfer.js';\nimport type { Rec2020Color, RgbColor } from '../types.js';\nimport { oklabToLinear, oklabToLinearInto } from './oklab.js';\nimport { clampRgb } from './rgb.js';\n\n// Linear sRGB ↔ Linear Rec.2020 (D65 via XYZ, CSS Color 4).\n// Shared between the allocating and *Into variants.\nconst SR2_RR = 0.6274038959,\n SR2_RG = 0.3292830384,\n SR2_RB = 0.0433130657;\nconst SR2_GR = 0.0690972894,\n SR2_GG = 0.9195403951,\n SR2_GB = 0.0113623156;\nconst SR2_BR = 0.0163914389,\n SR2_BG = 0.0880133079,\n SR2_BB = 0.8955952532;\nconst R2S_RR = 1.6604910021084345,\n R2S_RG = -0.58764113878854951,\n R2S_RB = -0.072849863319884883;\nconst R2S_GR = -0.12455047452159074,\n R2S_GG = 1.1328998971259603,\n R2S_GB = -0.0083494226043694768;\nconst R2S_BR = -0.018150763354905303,\n R2S_BG = -0.10057889800800739,\n R2S_BB = 1.1187296613629127;\n\n/** Zero-allocation sibling of srgbLinearToRec2020Linear — writes into `out`. */\nexport const srgbLinearToRec2020LinearInto = (out: Float64Array | number[], r: number, g: number, b: number): void => {\n out[0] = SR2_RR * r + SR2_RG * g + SR2_RB * b;\n out[1] = SR2_GR * r + SR2_GG * g + SR2_GB * b;\n out[2] = SR2_BR * r + SR2_BG * g + SR2_BB * b;\n};\n\nexport const srgbLinearToRec2020Linear = (r: number, g: number, b: number): [number, number, number] => [\n SR2_RR * r + SR2_RG * g + SR2_RB * b,\n SR2_GR * r + SR2_GG * g + SR2_GB * b,\n SR2_BR * r + SR2_BG * g + SR2_BB * b,\n];\n\n/** Zero-allocation sibling of linearRec2020ToSrgb — writes into `out`. */\nexport const linearRec2020ToSrgbInto = (out: Float64Array | number[], r: number, g: number, b: number): void => {\n out[0] = R2S_RR * r + R2S_RG * g + R2S_RB * b;\n out[1] = R2S_GR * r + R2S_GG * g + R2S_GB * b;\n out[2] = R2S_BR * r + R2S_BG * g + R2S_BB * b;\n};\n\nexport const linearRec2020ToSrgb = (r: number, g: number, b: number): [number, number, number] => [\n R2S_RR * r + R2S_RG * g + R2S_RB * b,\n R2S_GR * r + R2S_GG * g + R2S_GB * b,\n R2S_BR * r + R2S_BG * g + R2S_BB * b,\n];\n\nexport const rgbToRec2020 = ({ r, g, b, alpha }: RgbColor): Rec2020Color => {\n const [rr, rg, rb] = srgbLinearToRec2020Linear(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n return {\n r: round(rec2020FromLinear(rr), 4),\n g: round(rec2020FromLinear(rg), 4),\n b: round(rec2020FromLinear(rb), 4),\n alpha,\n colorSpace: 'rec2020',\n };\n};\n\nexport const rec2020ToRgb = ({ r, g, b, alpha }: Rec2020Color): RgbColor => {\n const [sr, sg, sb] = linearRec2020ToSrgb(rec2020ToLinear(r), rec2020ToLinear(g), rec2020ToLinear(b));\n return clampRgb({\n r: srgbFromLinear(clamp(sr, 0, 1)) * 255,\n g: srgbFromLinear(clamp(sg, 0, 1)) * 255,\n b: srgbFromLinear(clamp(sb, 0, 1)) * 255,\n alpha,\n });\n};\n\n/** Unclamped Rec.2020 → gamma-encoded sRGB. Channels may exceed [0, 255] for out-of-sRGB-gamut colors. */\nconst rec2020ToRgbUnclamped = ({ r, g, b, alpha }: Rec2020Color): RgbColor => {\n const [sr, sg, sb] = linearRec2020ToSrgb(rec2020ToLinear(r), rec2020ToLinear(g), rec2020ToLinear(b));\n return {\n r: srgbFromLinear(sr) * 255,\n g: srgbFromLinear(sg) * 255,\n b: srgbFromLinear(sb) * 255,\n alpha,\n };\n};\n\nexport const parseRec2020Object = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if ((input as { colorSpace?: unknown }).colorSpace !== 'rec2020') return null;\n if (!hasKeys(input, ['r', 'g', 'b'])) return null;\n const { r, g, b, alpha = 1 } = input as { r: unknown; g: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(r) || !isAnyNumber(g) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return rec2020ToRgbUnclamped({\n r: sanitize(r),\n g: sanitize(g),\n b: sanitize(b),\n alpha: clamp(sanitize(alpha), 0, 1),\n colorSpace: 'rec2020',\n });\n};\n\nconst REC2020_RE =\n /^color\\(\\s*rec2020\\s+([+-]?\\d*\\.?\\d+)\\s+([+-]?\\d*\\.?\\d+)\\s+([+-]?\\d*\\.?\\d+)\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nexport const parseRec2020String = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = REC2020_RE.exec(input.trim());\n if (!m) return null;\n const alpha = m[4] === undefined ? 1 : Number(m[4]) / (m[5] ? 100 : 1);\n return rec2020ToRgbUnclamped({\n r: Number(m[1]),\n g: Number(m[2]),\n b: Number(m[3]),\n alpha: clamp(alpha, 0, 1),\n colorSpace: 'rec2020',\n });\n};\n\n/** Unclamped linear Rec.2020 channels from OKLab values. */\nexport const oklabToLinearRec2020 = (l: number, a: number, b: number): [number, number, number] =>\n srgbLinearToRec2020Linear(...oklabToLinear(l, a, b));\n\n/** Zero-allocation sibling of oklabToLinearRec2020 — writes [rr, rg, rb] into `out`. */\nexport const oklabToLinearRec2020Into = (out: Float64Array | number[], l: number, a: number, b: number): void => {\n oklabToLinearInto(out, l, a, b);\n srgbLinearToRec2020LinearInto(out, out[0]!, out[1]!, out[2]!);\n};\n","import { oklchToLinear, oklchToLinearInto } from '../channels.js';\nimport { linearSrgbToOklab } from '../colorModels/oklab.js';\nimport {\n linearRec2020ToSrgb,\n oklabToLinearRec2020,\n parseRec2020Object,\n parseRec2020String,\n rgbToRec2020,\n srgbLinearToRec2020Linear,\n srgbLinearToRec2020LinearInto,\n} from '../colorModels/rec2020.js';\nimport type { Plugin } from '../colordx.js';\nimport { inGamutCustom, toGamutCustom } from '../gamut.js';\nimport { rec2020FromLinear } from '../transfer.js';\nimport type { AnyColor, Rec2020Color } from '../types.js';\n\nconst rec2020FromLinearConverter = (r: number, g: number, b: number): [number, number, number] =>\n linearSrgbToOklab(...linearRec2020ToSrgb(r, g, b));\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toRec2020(): Rec2020Color;\n toRec2020String(): string;\n }\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace Colordx {\n function toGamutRec2020(input: AnyColor): Colordx;\n }\n}\n\n/**\n * Convert linear sRGB channels (from oklchToLinear) to gamma-encoded Rec.2020 channels.\n * This is the cheap step — only a matrix multiply + BT.2020 gamma, no cbrt.\n */\nexport const linearToRec2020Channels = (lr: number, lg: number, lb: number): [number, number, number] => {\n const [r, g, b] = srgbLinearToRec2020Linear(lr, lg, lb);\n return [rec2020FromLinear(r), rec2020FromLinear(g), rec2020FromLinear(b)];\n};\n\n/** Zero-allocation sibling of linearToRec2020Channels — writes [rr, rg, rb] (gamma-encoded, 0–1) into `out`. */\nexport const linearToRec2020ChannelsInto = (out: Float64Array | number[], lr: number, lg: number, lb: number): void => {\n srgbLinearToRec2020LinearInto(out, lr, lg, lb);\n out[0] = rec2020FromLinear(out[0]!);\n out[1] = rec2020FromLinear(out[1]!);\n out[2] = rec2020FromLinear(out[2]!);\n};\n\n/**\n * Convert OKLCH to gamma-encoded Rec.2020 channels without object allocation.\n * Returns [r, g, b] in [0, 1] for in-gamut colors. Out-of-gamut channels may\n * exceed this range — callers are responsible for clamping before byte encoding.\n * Uses the BT.2020 transfer function (exponent 0.45, distinct from sRGB 1/2.4).\n */\nexport const oklchToRec2020Channels = (l: number, c: number, h: number): [number, number, number] =>\n linearToRec2020Channels(...oklchToLinear(l, c, h));\n\n/** Zero-allocation sibling of oklchToRec2020Channels — writes [rr, rg, rb] into `out`. */\nexport const oklchToRec2020ChannelsInto = (out: Float64Array | number[], l: number, c: number, h: number): void => {\n oklchToLinearInto(out, l, c, h);\n linearToRec2020ChannelsInto(out, out[0]!, out[1]!, out[2]!);\n};\n\n/**\n * Returns true if the color is within the Rec.2020 gamut.\n * sRGB inputs (hex, rgb, hsl, etc.) always return true (sRGB ⊂ Rec.2020).\n */\nexport const inGamutRec2020 = (input: AnyColor): boolean => inGamutCustom(input, oklabToLinearRec2020);\n\nconst rec2020: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.toGamutRec2020 = (input: AnyColor) => {\n const mapped = toGamutCustom(input, oklabToLinearRec2020, rec2020FromLinearConverter);\n return mapped !== null ? ColordxClass._makeFromOklab(mapped) : new ColordxClass(input);\n };\n ColordxClass.prototype.toRec2020 = function () {\n return rgbToRec2020(this._rawRgb());\n };\n ColordxClass.prototype.toRec2020String = function () {\n const { r, g, b, alpha } = this.toRec2020();\n return alpha < 1 ? `color(rec2020 ${r} ${g} ${b} / ${alpha})` : `color(rec2020 ${r} ${g} ${b})`;\n };\n parsers.push(parseRec2020String, parseRec2020Object);\n formatParsers.push([parseRec2020String, 'rec2020'], [parseRec2020Object, 'rec2020']);\n};\n\nexport default rec2020;\n"]} | ||
| {"version":3,"sources":["../../src/colorModels/rec2020.ts","../../src/plugins/rec2020.ts"],"names":["SR2_RR","SR2_RG","SR2_RB","SR2_GR","SR2_GG","SR2_GB","SR2_BR","SR2_BG","SR2_BB","R2S_RR","R2S_RG","R2S_RB","R2S_GR","R2S_GG","R2S_GB","R2S_BR","R2S_BG","R2S_BB","srgbLinearToRec2020LinearInto","out","r","g","b","srgbLinearToRec2020Linear","linearRec2020ToSrgb","rgbToRec2020","alpha","rr","rg","rb","srgbToLinear","round","rec2020FromLinear","rec2020ToRgbUnclamped","sr","sg","sb","rec2020ToLinear","srgbFromLinear","parseRec2020Object","input","isObject","hasKeys","isAnyNumber","sanitize","clamp","REC2020_RE","NUM_OR_NONE","parseRec2020String","parseNum","gc","oklabToLinearRec2020","l","a","oklabToLinear","rec2020FromLinearConverter","linearSrgbToOklab","linearToRec2020Channels","lr","lg","lb","linearToRec2020ChannelsInto","oklchToRec2020Channels","c","h","oklchToLinear","oklchToRec2020ChannelsInto","oklchToLinearInto","inGamutRec2020","inGamutCustom","rec2020","ColordxClass","parsers","formatParsers","mapped","toGamutCustom","rec2020_default"],"mappings":"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","file":"rec2020.cjs","sourcesContent":["import { NUM_OR_NONE, clamp, hasKeys, isAnyNumber, isObject, parseNum, round, sanitize } from '../helpers.js';\nimport { rec2020FromLinear, rec2020ToLinear, srgbFromLinear, srgbToLinear } from '../transfer.js';\nimport type { Rec2020Color, RgbColor } from '../types.js';\nimport { oklabToLinear, oklabToLinearInto } from './oklab.js';\nimport { clampRgb } from './rgb.js';\n\n// Linear sRGB ↔ Linear Rec.2020 (D65 via XYZ, CSS Color 4).\n// Shared between the allocating and *Into variants.\nconst SR2_RR = 0.6274038959,\n SR2_RG = 0.3292830384,\n SR2_RB = 0.0433130657;\nconst SR2_GR = 0.0690972894,\n SR2_GG = 0.9195403951,\n SR2_GB = 0.0113623156;\nconst SR2_BR = 0.0163914389,\n SR2_BG = 0.0880133079,\n SR2_BB = 0.8955952532;\nconst R2S_RR = 1.6604910021084345,\n R2S_RG = -0.58764113878854951,\n R2S_RB = -0.072849863319884883;\nconst R2S_GR = -0.12455047452159074,\n R2S_GG = 1.1328998971259603,\n R2S_GB = -0.0083494226043694768;\nconst R2S_BR = -0.018150763354905303,\n R2S_BG = -0.10057889800800739,\n R2S_BB = 1.1187296613629127;\n\n/** Zero-allocation sibling of srgbLinearToRec2020Linear — writes into `out`. */\nexport const srgbLinearToRec2020LinearInto = (out: Float64Array | number[], r: number, g: number, b: number): void => {\n out[0] = SR2_RR * r + SR2_RG * g + SR2_RB * b;\n out[1] = SR2_GR * r + SR2_GG * g + SR2_GB * b;\n out[2] = SR2_BR * r + SR2_BG * g + SR2_BB * b;\n};\n\nexport const srgbLinearToRec2020Linear = (r: number, g: number, b: number): [number, number, number] => [\n SR2_RR * r + SR2_RG * g + SR2_RB * b,\n SR2_GR * r + SR2_GG * g + SR2_GB * b,\n SR2_BR * r + SR2_BG * g + SR2_BB * b,\n];\n\n/** Zero-allocation sibling of linearRec2020ToSrgb — writes into `out`. */\nexport const linearRec2020ToSrgbInto = (out: Float64Array | number[], r: number, g: number, b: number): void => {\n out[0] = R2S_RR * r + R2S_RG * g + R2S_RB * b;\n out[1] = R2S_GR * r + R2S_GG * g + R2S_GB * b;\n out[2] = R2S_BR * r + R2S_BG * g + R2S_BB * b;\n};\n\nexport const linearRec2020ToSrgb = (r: number, g: number, b: number): [number, number, number] => [\n R2S_RR * r + R2S_RG * g + R2S_RB * b,\n R2S_GR * r + R2S_GG * g + R2S_GB * b,\n R2S_BR * r + R2S_BG * g + R2S_BB * b,\n];\n\nexport const rgbToRec2020 = ({ r, g, b, alpha }: RgbColor): Rec2020Color => {\n const [rr, rg, rb] = srgbLinearToRec2020Linear(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n return {\n r: round(rec2020FromLinear(rr), 4),\n g: round(rec2020FromLinear(rg), 4),\n b: round(rec2020FromLinear(rb), 4),\n alpha,\n colorSpace: 'rec2020',\n };\n};\n\nexport const rec2020ToRgb = ({ r, g, b, alpha }: Rec2020Color): RgbColor => {\n const [sr, sg, sb] = linearRec2020ToSrgb(rec2020ToLinear(r), rec2020ToLinear(g), rec2020ToLinear(b));\n return clampRgb({\n r: srgbFromLinear(clamp(sr, 0, 1)) * 255,\n g: srgbFromLinear(clamp(sg, 0, 1)) * 255,\n b: srgbFromLinear(clamp(sb, 0, 1)) * 255,\n alpha,\n });\n};\n\n/** Unclamped Rec.2020 → gamma-encoded sRGB. Channels may exceed [0, 255] for out-of-sRGB-gamut colors. */\nconst rec2020ToRgbUnclamped = ({ r, g, b, alpha }: Rec2020Color): RgbColor => {\n const [sr, sg, sb] = linearRec2020ToSrgb(rec2020ToLinear(r), rec2020ToLinear(g), rec2020ToLinear(b));\n return {\n r: srgbFromLinear(sr) * 255,\n g: srgbFromLinear(sg) * 255,\n b: srgbFromLinear(sb) * 255,\n alpha,\n };\n};\n\nexport const parseRec2020Object = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if ((input as { colorSpace?: unknown }).colorSpace !== 'rec2020') return null;\n if (!hasKeys(input, ['r', 'g', 'b'])) return null;\n const { r, g, b, alpha = 1 } = input as { r: unknown; g: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(r) || !isAnyNumber(g) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return rec2020ToRgbUnclamped({\n r: sanitize(r),\n g: sanitize(g),\n b: sanitize(b),\n alpha: clamp(sanitize(alpha), 0, 1),\n colorSpace: 'rec2020',\n });\n};\n\n// CSS Color 4: color(rec2020 r g b / alpha). Channels accept number|percentage|none; 100% = 1.\nconst REC2020_RE = new RegExp(\n `^color\\\\(\\\\s*rec2020\\\\s+(?<r>${NUM_OR_NONE})(?<rp>%?)\\\\s+(?<g>${NUM_OR_NONE})(?<gp>%?)` +\n `\\\\s+(?<b>${NUM_OR_NONE})(?<bp>%?)\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseRec2020String = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = REC2020_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const r = g.rp ? parseNum(g.r!) / 100 : parseNum(g.r!);\n const gc = g.gp ? parseNum(g.g!) / 100 : parseNum(g.g!);\n const b = g.bp ? parseNum(g.b!) / 100 : parseNum(g.b!);\n const alpha = g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1);\n return rec2020ToRgbUnclamped({\n r,\n g: gc,\n b,\n alpha: clamp(alpha, 0, 1),\n colorSpace: 'rec2020',\n });\n};\n\n/** Unclamped linear Rec.2020 channels from OKLab values. */\nexport const oklabToLinearRec2020 = (l: number, a: number, b: number): [number, number, number] =>\n srgbLinearToRec2020Linear(...oklabToLinear(l, a, b));\n\n/** Zero-allocation sibling of oklabToLinearRec2020 — writes [rr, rg, rb] into `out`. */\nexport const oklabToLinearRec2020Into = (out: Float64Array | number[], l: number, a: number, b: number): void => {\n oklabToLinearInto(out, l, a, b);\n srgbLinearToRec2020LinearInto(out, out[0]!, out[1]!, out[2]!);\n};\n","import { oklchToLinear, oklchToLinearInto } from '../channels.js';\nimport { linearSrgbToOklab } from '../colorModels/oklab.js';\nimport {\n linearRec2020ToSrgb,\n oklabToLinearRec2020,\n parseRec2020Object,\n parseRec2020String,\n rgbToRec2020,\n srgbLinearToRec2020Linear,\n srgbLinearToRec2020LinearInto,\n} from '../colorModels/rec2020.js';\nimport type { Plugin } from '../colordx.js';\nimport { inGamutCustom, toGamutCustom } from '../gamut.js';\nimport { rec2020FromLinear } from '../transfer.js';\nimport type { AnyColor, Rec2020Color } from '../types.js';\n\nconst rec2020FromLinearConverter = (r: number, g: number, b: number): [number, number, number] =>\n linearSrgbToOklab(...linearRec2020ToSrgb(r, g, b));\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toRec2020(): Rec2020Color;\n toRec2020String(): string;\n }\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace Colordx {\n function toGamutRec2020(input: AnyColor): Colordx;\n }\n}\n\n/**\n * Convert linear sRGB channels (from oklchToLinear) to gamma-encoded Rec.2020 channels.\n * This is the cheap step — only a matrix multiply + BT.2020 gamma, no cbrt.\n */\nexport const linearToRec2020Channels = (lr: number, lg: number, lb: number): [number, number, number] => {\n const [r, g, b] = srgbLinearToRec2020Linear(lr, lg, lb);\n return [rec2020FromLinear(r), rec2020FromLinear(g), rec2020FromLinear(b)];\n};\n\n/** Zero-allocation sibling of linearToRec2020Channels — writes [rr, rg, rb] (gamma-encoded, 0–1) into `out`. */\nexport const linearToRec2020ChannelsInto = (out: Float64Array | number[], lr: number, lg: number, lb: number): void => {\n srgbLinearToRec2020LinearInto(out, lr, lg, lb);\n out[0] = rec2020FromLinear(out[0]!);\n out[1] = rec2020FromLinear(out[1]!);\n out[2] = rec2020FromLinear(out[2]!);\n};\n\n/**\n * Convert OKLCH to gamma-encoded Rec.2020 channels without object allocation.\n * Returns [r, g, b] in [0, 1] for in-gamut colors. Out-of-gamut channels may\n * exceed this range — callers are responsible for clamping before byte encoding.\n * Uses the BT.2020 transfer function (exponent 0.45, distinct from sRGB 1/2.4).\n */\nexport const oklchToRec2020Channels = (l: number, c: number, h: number): [number, number, number] =>\n linearToRec2020Channels(...oklchToLinear(l, c, h));\n\n/** Zero-allocation sibling of oklchToRec2020Channels — writes [rr, rg, rb] into `out`. */\nexport const oklchToRec2020ChannelsInto = (out: Float64Array | number[], l: number, c: number, h: number): void => {\n oklchToLinearInto(out, l, c, h);\n linearToRec2020ChannelsInto(out, out[0]!, out[1]!, out[2]!);\n};\n\n/**\n * Returns true if the color is within the Rec.2020 gamut.\n * sRGB inputs (hex, rgb, hsl, etc.) always return true (sRGB ⊂ Rec.2020).\n */\nexport const inGamutRec2020 = (input: AnyColor): boolean => inGamutCustom(input, oklabToLinearRec2020);\n\nconst rec2020: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.toGamutRec2020 = (input: AnyColor) => {\n const mapped = toGamutCustom(input, oklabToLinearRec2020, rec2020FromLinearConverter);\n return mapped !== null ? ColordxClass._makeFromOklab(mapped) : new ColordxClass(input);\n };\n ColordxClass.prototype.toRec2020 = function () {\n return rgbToRec2020(this._rawRgb());\n };\n ColordxClass.prototype.toRec2020String = function () {\n const { r, g, b, alpha } = this.toRec2020();\n return alpha < 1 ? `color(rec2020 ${r} ${g} ${b} / ${alpha})` : `color(rec2020 ${r} ${g} ${b})`;\n };\n parsers.push(parseRec2020String, parseRec2020Object);\n formatParsers.push([parseRec2020String, 'rec2020'], [parseRec2020Object, 'rec2020']);\n};\n\nexport default rec2020;\n"]} |
@@ -1,2 +0,2 @@ | ||
| import {e,f as f$1,c,d as d$2}from'../chunk-CW7VAOXH.mjs';import {f as f$2,a}from'../chunk-MUHBYE5R.mjs';import'../chunk-HFDTK2ZP.mjs';import {d as d$1,a as a$1,c as c$1,b as b$1}from'../chunk-FXCFKFXK.mjs';import'../chunk-OD65R6MQ.mjs';import {b,a as a$2,h,i,f as f$3,g}from'../chunk-JFPP44S3.mjs';var B=.6274038959,A=.3292830384,F=.0433130657,w=.0690972894,I=.9195403951,$=.0113623156,j=.0163914389,v=.0880133079,N=.8955952532,z=1.6604910021084345,K=-0.5876411387885495,U=-0.07284986331988488,q=-0.12455047452159074,D=1.1328998971259603,H=-0.008349422604369477,J=-0.018150763354905303,M=-0.10057889800800739,Q=1.1187296613629127,O=(r,e,n,o)=>{r[0]=B*e+A*n+F*o,r[1]=w*e+I*n+$*o,r[2]=j*e+v*n+N*o;},p=(r,e,n)=>[B*r+A*e+F*n,w*r+I*e+$*n,j*r+v*e+N*n];var S=(r,e,n)=>[z*r+K*e+U*n,q*r+D*e+H*n,J*r+M*e+Q*n],E=({r,g:e,b:n,alpha:o})=>{let[c,m,b$1]=p(a$1(r/255),a$1(e/255),a$1(n/255));return {r:b(d$1(c),4),g:b(d$1(m),4),b:b(d$1(b$1),4),alpha:o,colorSpace:"rec2020"}};var P=({r,g:e,b:n,alpha:o})=>{let[c,m,b]=S(c$1(r),c$1(e),c$1(n));return {r:b$1(c)*255,g:b$1(m)*255,b:b$1(b)*255,alpha:o}},f=r=>{if(!h(r)||r.colorSpace!=="rec2020"||!i(r,["r","g","b"]))return null;let{r:e,g:n,b:o,alpha:c=1}=r;return !f$3(e)||!f$3(n)||!f$3(o)||!f$3(c)?null:P({r:g(e),g:g(n),b:g(o),alpha:a$2(g(c),0,1)})},V=/^color\(\s*rec2020\s+([+-]?\d*\.?\d+)\s+([+-]?\d*\.?\d+)\s+([+-]?\d*\.?\d+)\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,T=r=>{if(typeof r!="string")return null;let e=V.exec(r.trim());if(!e)return null;let n=e[4]===void 0?1:Number(e[4])/(e[5]?100:1);return P({r:Number(e[1]),g:Number(e[2]),b:Number(e[3]),alpha:a$2(n,0,1)})},d=(r,e,n)=>p(...f$2(r,e,n));var W=(r,e,n)=>a(...S(r,e,n)),X=(r,e,n)=>{let[o,c,m]=p(r,e,n);return [d$1(o),d$1(c),d$1(m)]},Y=(r,e,n,o)=>{O(r,e,n,o),r[0]=d$1(r[0]),r[1]=d$1(r[1]),r[2]=d$1(r[2]);},lr=(r,e$1,n)=>X(...e(r,e$1,n)),Rr=(r,e,n,o)=>{f$1(r,e,n,o),Y(r,r[0],r[1],r[2]);},sr=r=>c(r,d),Z=(r,e,n)=>{r.toGamutRec2020=o=>{let c=d$2(o,d,W);return c!==null?r._makeFromOklab(c):new r(o)},r.prototype.toRec2020=function(){return E(this._rawRgb())},r.prototype.toRec2020String=function(){let{r:o,g:c,b:m,alpha:b}=this.toRec2020();return b<1?`color(rec2020 ${o} ${c} ${m} / ${b})`:`color(rec2020 ${o} ${c} ${m})`},e.push(T,f),n.push([T,"rec2020"],[f,"rec2020"]);},ir=Z;export{ir as default,sr as inGamutRec2020,X as linearToRec2020Channels,Y as linearToRec2020ChannelsInto,lr as oklchToRec2020Channels,Rr as oklchToRec2020ChannelsInto};//# sourceMappingURL=rec2020.mjs.map | ||
| import {e,f,c,d as d$1}from'../chunk-AOK3BIZI.mjs';import {f as f$1,a}from'../chunk-OS5JUSWI.mjs';import'../chunk-OXYX6VNO.mjs';import {d,a as a$1,c as c$1,b as b$1}from'../chunk-FXCFKFXK.mjs';import'../chunk-Q3O3QQ4H.mjs';import {b,l,a as a$2,h as h$1,i,f as f$2,g,k}from'../chunk-IOXRZECH.mjs';var w=.6274038959,A=.3292830384,F=.0433130657,I=.0690972894,O=.9195403951,j=.0113623156,v=.0163914389,N=.0880133079,E=.8955952532,K=1.6604910021084345,M=-0.5876411387885495,q=-0.07284986331988488,D=-0.12455047452159074,H=1.1328998971259603,J=-0.008349422604369477,Q=-0.018150763354905303,V=-0.10057889800800739,W=1.1187296613629127,P=(r,e,n,o)=>{r[0]=w*e+A*n+F*o,r[1]=I*e+O*n+j*o,r[2]=v*e+N*n+E*o;},S=(r,e,n)=>[w*r+A*e+F*n,I*r+O*e+j*n,v*r+N*e+E*n];var T=(r,e,n)=>[K*r+M*e+q*n,D*r+H*e+J*n,Q*r+V*e+W*n],U=({r,g:e,b:n,alpha:o})=>{let[c,m,a]=S(a$1(r/255),a$1(e/255),a$1(n/255));return {r:b(d(c),4),g:b(d(m),4),b:b(d(a),4),alpha:o,colorSpace:"rec2020"}};var z=({r,g:e,b:n,alpha:o})=>{let[c,m,a]=T(c$1(r),c$1(e),c$1(n));return {r:b$1(c)*255,g:b$1(m)*255,b:b$1(a)*255,alpha:o}},_=r=>{if(!h$1(r)||r.colorSpace!=="rec2020"||!i(r,["r","g","b"]))return null;let{r:e,g:n,b:o,alpha:c=1}=r;return !f$2(e)||!f$2(n)||!f$2(o)||!f$2(c)?null:z({r:g(e),g:g(n),b:g(o),alpha:a$2(g(c),0,1)})},X=new RegExp(`^color\\(\\s*rec2020\\s+(?<r>${k})(?<rp>%?)\\s+(?<g>${k})(?<gp>%?)\\s+(?<b>${k})(?<bp>%?)\\s*(?:/\\s*(?<al>${k})(?<alp>%?)\\s*)?\\)$`,"i"),L=r=>{if(typeof r!="string")return null;let e=X.exec(r.trim())?.groups;if(!e)return null;let n=e.rp?l(e.r)/100:l(e.r),o=e.gp?l(e.g)/100:l(e.g),c=e.bp?l(e.b)/100:l(e.b),m=e.al===void 0?1:l(e.al)/(e.alp?100:1);return z({r:n,g:o,b:c,alpha:a$2(m,0,1)})},h=(r,e,n)=>S(...f$1(r,e,n));var Y=(r,e,n)=>a(...T(r,e,n)),Z=(r,e,n)=>{let[o,c,m]=S(r,e,n);return [d(o),d(c),d(m)]},rr=(r,e,n,o)=>{P(r,e,n,o),r[0]=d(r[0]),r[1]=d(r[1]),r[2]=d(r[2]);},Rr=(r,e$1,n)=>Z(...e(r,e$1,n)),ir=(r,e,n,o)=>{f(r,e,n,o),rr(r,r[0],r[1],r[2]);},pr=r=>c(r,h),er=(r,e,n)=>{r.toGamutRec2020=o=>{let c=d$1(o,h,Y);return c!==null?r._makeFromOklab(c):new r(o)},r.prototype.toRec2020=function(){return U(this._rawRgb())},r.prototype.toRec2020String=function(){let{r:o,g:c,b:m,alpha:a}=this.toRec2020();return a<1?`color(rec2020 ${o} ${c} ${m} / ${a})`:`color(rec2020 ${o} ${c} ${m})`},e.push(L,_),n.push([L,"rec2020"],[_,"rec2020"]);},gr=er;export{gr as default,pr as inGamutRec2020,Z as linearToRec2020Channels,rr as linearToRec2020ChannelsInto,Rr as oklchToRec2020Channels,ir as oklchToRec2020ChannelsInto};//# sourceMappingURL=rec2020.mjs.map | ||
| //# sourceMappingURL=rec2020.mjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/colorModels/rec2020.ts","../../src/plugins/rec2020.ts"],"names":["SR2_RR","SR2_RG","SR2_RB","SR2_GR","SR2_GG","SR2_GB","SR2_BR","SR2_BG","SR2_BB","R2S_RR","R2S_RG","R2S_RB","R2S_GR","R2S_GG","R2S_GB","R2S_BR","R2S_BG","R2S_BB","srgbLinearToRec2020LinearInto","out","r","g","b","srgbLinearToRec2020Linear","linearRec2020ToSrgb","rgbToRec2020","alpha","rr","rg","rb","srgbToLinear","round","rec2020FromLinear","rec2020ToRgbUnclamped","sr","sg","sb","rec2020ToLinear","srgbFromLinear","parseRec2020Object","input","isObject","hasKeys","isAnyNumber","sanitize","clamp","REC2020_RE","parseRec2020String","m","oklabToLinearRec2020","l","a","oklabToLinear","rec2020FromLinearConverter","linearSrgbToOklab","linearToRec2020Channels","lr","lg","lb","linearToRec2020ChannelsInto","oklchToRec2020Channels","c","h","oklchToLinear","oklchToRec2020ChannelsInto","oklchToLinearInto","inGamutRec2020","inGamutCustom","rec2020","ColordxClass","parsers","formatParsers","mapped","toGamutCustom","rec2020_default"],"mappings":"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","file":"rec2020.mjs","sourcesContent":["import { clamp, hasKeys, isAnyNumber, isObject, round, sanitize } from '../helpers.js';\nimport { rec2020FromLinear, rec2020ToLinear, srgbFromLinear, srgbToLinear } from '../transfer.js';\nimport type { Rec2020Color, RgbColor } from '../types.js';\nimport { oklabToLinear, oklabToLinearInto } from './oklab.js';\nimport { clampRgb } from './rgb.js';\n\n// Linear sRGB ↔ Linear Rec.2020 (D65 via XYZ, CSS Color 4).\n// Shared between the allocating and *Into variants.\nconst SR2_RR = 0.6274038959,\n SR2_RG = 0.3292830384,\n SR2_RB = 0.0433130657;\nconst SR2_GR = 0.0690972894,\n SR2_GG = 0.9195403951,\n SR2_GB = 0.0113623156;\nconst SR2_BR = 0.0163914389,\n SR2_BG = 0.0880133079,\n SR2_BB = 0.8955952532;\nconst R2S_RR = 1.6604910021084345,\n R2S_RG = -0.58764113878854951,\n R2S_RB = -0.072849863319884883;\nconst R2S_GR = -0.12455047452159074,\n R2S_GG = 1.1328998971259603,\n R2S_GB = -0.0083494226043694768;\nconst R2S_BR = -0.018150763354905303,\n R2S_BG = -0.10057889800800739,\n R2S_BB = 1.1187296613629127;\n\n/** Zero-allocation sibling of srgbLinearToRec2020Linear — writes into `out`. */\nexport const srgbLinearToRec2020LinearInto = (out: Float64Array | number[], r: number, g: number, b: number): void => {\n out[0] = SR2_RR * r + SR2_RG * g + SR2_RB * b;\n out[1] = SR2_GR * r + SR2_GG * g + SR2_GB * b;\n out[2] = SR2_BR * r + SR2_BG * g + SR2_BB * b;\n};\n\nexport const srgbLinearToRec2020Linear = (r: number, g: number, b: number): [number, number, number] => [\n SR2_RR * r + SR2_RG * g + SR2_RB * b,\n SR2_GR * r + SR2_GG * g + SR2_GB * b,\n SR2_BR * r + SR2_BG * g + SR2_BB * b,\n];\n\n/** Zero-allocation sibling of linearRec2020ToSrgb — writes into `out`. */\nexport const linearRec2020ToSrgbInto = (out: Float64Array | number[], r: number, g: number, b: number): void => {\n out[0] = R2S_RR * r + R2S_RG * g + R2S_RB * b;\n out[1] = R2S_GR * r + R2S_GG * g + R2S_GB * b;\n out[2] = R2S_BR * r + R2S_BG * g + R2S_BB * b;\n};\n\nexport const linearRec2020ToSrgb = (r: number, g: number, b: number): [number, number, number] => [\n R2S_RR * r + R2S_RG * g + R2S_RB * b,\n R2S_GR * r + R2S_GG * g + R2S_GB * b,\n R2S_BR * r + R2S_BG * g + R2S_BB * b,\n];\n\nexport const rgbToRec2020 = ({ r, g, b, alpha }: RgbColor): Rec2020Color => {\n const [rr, rg, rb] = srgbLinearToRec2020Linear(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n return {\n r: round(rec2020FromLinear(rr), 4),\n g: round(rec2020FromLinear(rg), 4),\n b: round(rec2020FromLinear(rb), 4),\n alpha,\n colorSpace: 'rec2020',\n };\n};\n\nexport const rec2020ToRgb = ({ r, g, b, alpha }: Rec2020Color): RgbColor => {\n const [sr, sg, sb] = linearRec2020ToSrgb(rec2020ToLinear(r), rec2020ToLinear(g), rec2020ToLinear(b));\n return clampRgb({\n r: srgbFromLinear(clamp(sr, 0, 1)) * 255,\n g: srgbFromLinear(clamp(sg, 0, 1)) * 255,\n b: srgbFromLinear(clamp(sb, 0, 1)) * 255,\n alpha,\n });\n};\n\n/** Unclamped Rec.2020 → gamma-encoded sRGB. Channels may exceed [0, 255] for out-of-sRGB-gamut colors. */\nconst rec2020ToRgbUnclamped = ({ r, g, b, alpha }: Rec2020Color): RgbColor => {\n const [sr, sg, sb] = linearRec2020ToSrgb(rec2020ToLinear(r), rec2020ToLinear(g), rec2020ToLinear(b));\n return {\n r: srgbFromLinear(sr) * 255,\n g: srgbFromLinear(sg) * 255,\n b: srgbFromLinear(sb) * 255,\n alpha,\n };\n};\n\nexport const parseRec2020Object = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if ((input as { colorSpace?: unknown }).colorSpace !== 'rec2020') return null;\n if (!hasKeys(input, ['r', 'g', 'b'])) return null;\n const { r, g, b, alpha = 1 } = input as { r: unknown; g: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(r) || !isAnyNumber(g) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return rec2020ToRgbUnclamped({\n r: sanitize(r),\n g: sanitize(g),\n b: sanitize(b),\n alpha: clamp(sanitize(alpha), 0, 1),\n colorSpace: 'rec2020',\n });\n};\n\nconst REC2020_RE =\n /^color\\(\\s*rec2020\\s+([+-]?\\d*\\.?\\d+)\\s+([+-]?\\d*\\.?\\d+)\\s+([+-]?\\d*\\.?\\d+)\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nexport const parseRec2020String = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = REC2020_RE.exec(input.trim());\n if (!m) return null;\n const alpha = m[4] === undefined ? 1 : Number(m[4]) / (m[5] ? 100 : 1);\n return rec2020ToRgbUnclamped({\n r: Number(m[1]),\n g: Number(m[2]),\n b: Number(m[3]),\n alpha: clamp(alpha, 0, 1),\n colorSpace: 'rec2020',\n });\n};\n\n/** Unclamped linear Rec.2020 channels from OKLab values. */\nexport const oklabToLinearRec2020 = (l: number, a: number, b: number): [number, number, number] =>\n srgbLinearToRec2020Linear(...oklabToLinear(l, a, b));\n\n/** Zero-allocation sibling of oklabToLinearRec2020 — writes [rr, rg, rb] into `out`. */\nexport const oklabToLinearRec2020Into = (out: Float64Array | number[], l: number, a: number, b: number): void => {\n oklabToLinearInto(out, l, a, b);\n srgbLinearToRec2020LinearInto(out, out[0]!, out[1]!, out[2]!);\n};\n","import { oklchToLinear, oklchToLinearInto } from '../channels.js';\nimport { linearSrgbToOklab } from '../colorModels/oklab.js';\nimport {\n linearRec2020ToSrgb,\n oklabToLinearRec2020,\n parseRec2020Object,\n parseRec2020String,\n rgbToRec2020,\n srgbLinearToRec2020Linear,\n srgbLinearToRec2020LinearInto,\n} from '../colorModels/rec2020.js';\nimport type { Plugin } from '../colordx.js';\nimport { inGamutCustom, toGamutCustom } from '../gamut.js';\nimport { rec2020FromLinear } from '../transfer.js';\nimport type { AnyColor, Rec2020Color } from '../types.js';\n\nconst rec2020FromLinearConverter = (r: number, g: number, b: number): [number, number, number] =>\n linearSrgbToOklab(...linearRec2020ToSrgb(r, g, b));\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toRec2020(): Rec2020Color;\n toRec2020String(): string;\n }\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace Colordx {\n function toGamutRec2020(input: AnyColor): Colordx;\n }\n}\n\n/**\n * Convert linear sRGB channels (from oklchToLinear) to gamma-encoded Rec.2020 channels.\n * This is the cheap step — only a matrix multiply + BT.2020 gamma, no cbrt.\n */\nexport const linearToRec2020Channels = (lr: number, lg: number, lb: number): [number, number, number] => {\n const [r, g, b] = srgbLinearToRec2020Linear(lr, lg, lb);\n return [rec2020FromLinear(r), rec2020FromLinear(g), rec2020FromLinear(b)];\n};\n\n/** Zero-allocation sibling of linearToRec2020Channels — writes [rr, rg, rb] (gamma-encoded, 0–1) into `out`. */\nexport const linearToRec2020ChannelsInto = (out: Float64Array | number[], lr: number, lg: number, lb: number): void => {\n srgbLinearToRec2020LinearInto(out, lr, lg, lb);\n out[0] = rec2020FromLinear(out[0]!);\n out[1] = rec2020FromLinear(out[1]!);\n out[2] = rec2020FromLinear(out[2]!);\n};\n\n/**\n * Convert OKLCH to gamma-encoded Rec.2020 channels without object allocation.\n * Returns [r, g, b] in [0, 1] for in-gamut colors. Out-of-gamut channels may\n * exceed this range — callers are responsible for clamping before byte encoding.\n * Uses the BT.2020 transfer function (exponent 0.45, distinct from sRGB 1/2.4).\n */\nexport const oklchToRec2020Channels = (l: number, c: number, h: number): [number, number, number] =>\n linearToRec2020Channels(...oklchToLinear(l, c, h));\n\n/** Zero-allocation sibling of oklchToRec2020Channels — writes [rr, rg, rb] into `out`. */\nexport const oklchToRec2020ChannelsInto = (out: Float64Array | number[], l: number, c: number, h: number): void => {\n oklchToLinearInto(out, l, c, h);\n linearToRec2020ChannelsInto(out, out[0]!, out[1]!, out[2]!);\n};\n\n/**\n * Returns true if the color is within the Rec.2020 gamut.\n * sRGB inputs (hex, rgb, hsl, etc.) always return true (sRGB ⊂ Rec.2020).\n */\nexport const inGamutRec2020 = (input: AnyColor): boolean => inGamutCustom(input, oklabToLinearRec2020);\n\nconst rec2020: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.toGamutRec2020 = (input: AnyColor) => {\n const mapped = toGamutCustom(input, oklabToLinearRec2020, rec2020FromLinearConverter);\n return mapped !== null ? ColordxClass._makeFromOklab(mapped) : new ColordxClass(input);\n };\n ColordxClass.prototype.toRec2020 = function () {\n return rgbToRec2020(this._rawRgb());\n };\n ColordxClass.prototype.toRec2020String = function () {\n const { r, g, b, alpha } = this.toRec2020();\n return alpha < 1 ? `color(rec2020 ${r} ${g} ${b} / ${alpha})` : `color(rec2020 ${r} ${g} ${b})`;\n };\n parsers.push(parseRec2020String, parseRec2020Object);\n formatParsers.push([parseRec2020String, 'rec2020'], [parseRec2020Object, 'rec2020']);\n};\n\nexport default rec2020;\n"]} | ||
| {"version":3,"sources":["../../src/colorModels/rec2020.ts","../../src/plugins/rec2020.ts"],"names":["SR2_RR","SR2_RG","SR2_RB","SR2_GR","SR2_GG","SR2_GB","SR2_BR","SR2_BG","SR2_BB","R2S_RR","R2S_RG","R2S_RB","R2S_GR","R2S_GG","R2S_GB","R2S_BR","R2S_BG","R2S_BB","srgbLinearToRec2020LinearInto","out","r","g","b","srgbLinearToRec2020Linear","linearRec2020ToSrgb","rgbToRec2020","alpha","rr","rg","rb","srgbToLinear","round","rec2020FromLinear","rec2020ToRgbUnclamped","sr","sg","sb","rec2020ToLinear","srgbFromLinear","parseRec2020Object","input","isObject","hasKeys","isAnyNumber","sanitize","clamp","REC2020_RE","NUM_OR_NONE","parseRec2020String","parseNum","gc","oklabToLinearRec2020","l","a","oklabToLinear","rec2020FromLinearConverter","linearSrgbToOklab","linearToRec2020Channels","lr","lg","lb","linearToRec2020ChannelsInto","oklchToRec2020Channels","c","h","oklchToLinear","oklchToRec2020ChannelsInto","oklchToLinearInto","inGamutRec2020","inGamutCustom","rec2020","ColordxClass","parsers","formatParsers","mapped","toGamutCustom","rec2020_default"],"mappings":"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","file":"rec2020.mjs","sourcesContent":["import { NUM_OR_NONE, clamp, hasKeys, isAnyNumber, isObject, parseNum, round, sanitize } from '../helpers.js';\nimport { rec2020FromLinear, rec2020ToLinear, srgbFromLinear, srgbToLinear } from '../transfer.js';\nimport type { Rec2020Color, RgbColor } from '../types.js';\nimport { oklabToLinear, oklabToLinearInto } from './oklab.js';\nimport { clampRgb } from './rgb.js';\n\n// Linear sRGB ↔ Linear Rec.2020 (D65 via XYZ, CSS Color 4).\n// Shared between the allocating and *Into variants.\nconst SR2_RR = 0.6274038959,\n SR2_RG = 0.3292830384,\n SR2_RB = 0.0433130657;\nconst SR2_GR = 0.0690972894,\n SR2_GG = 0.9195403951,\n SR2_GB = 0.0113623156;\nconst SR2_BR = 0.0163914389,\n SR2_BG = 0.0880133079,\n SR2_BB = 0.8955952532;\nconst R2S_RR = 1.6604910021084345,\n R2S_RG = -0.58764113878854951,\n R2S_RB = -0.072849863319884883;\nconst R2S_GR = -0.12455047452159074,\n R2S_GG = 1.1328998971259603,\n R2S_GB = -0.0083494226043694768;\nconst R2S_BR = -0.018150763354905303,\n R2S_BG = -0.10057889800800739,\n R2S_BB = 1.1187296613629127;\n\n/** Zero-allocation sibling of srgbLinearToRec2020Linear — writes into `out`. */\nexport const srgbLinearToRec2020LinearInto = (out: Float64Array | number[], r: number, g: number, b: number): void => {\n out[0] = SR2_RR * r + SR2_RG * g + SR2_RB * b;\n out[1] = SR2_GR * r + SR2_GG * g + SR2_GB * b;\n out[2] = SR2_BR * r + SR2_BG * g + SR2_BB * b;\n};\n\nexport const srgbLinearToRec2020Linear = (r: number, g: number, b: number): [number, number, number] => [\n SR2_RR * r + SR2_RG * g + SR2_RB * b,\n SR2_GR * r + SR2_GG * g + SR2_GB * b,\n SR2_BR * r + SR2_BG * g + SR2_BB * b,\n];\n\n/** Zero-allocation sibling of linearRec2020ToSrgb — writes into `out`. */\nexport const linearRec2020ToSrgbInto = (out: Float64Array | number[], r: number, g: number, b: number): void => {\n out[0] = R2S_RR * r + R2S_RG * g + R2S_RB * b;\n out[1] = R2S_GR * r + R2S_GG * g + R2S_GB * b;\n out[2] = R2S_BR * r + R2S_BG * g + R2S_BB * b;\n};\n\nexport const linearRec2020ToSrgb = (r: number, g: number, b: number): [number, number, number] => [\n R2S_RR * r + R2S_RG * g + R2S_RB * b,\n R2S_GR * r + R2S_GG * g + R2S_GB * b,\n R2S_BR * r + R2S_BG * g + R2S_BB * b,\n];\n\nexport const rgbToRec2020 = ({ r, g, b, alpha }: RgbColor): Rec2020Color => {\n const [rr, rg, rb] = srgbLinearToRec2020Linear(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n return {\n r: round(rec2020FromLinear(rr), 4),\n g: round(rec2020FromLinear(rg), 4),\n b: round(rec2020FromLinear(rb), 4),\n alpha,\n colorSpace: 'rec2020',\n };\n};\n\nexport const rec2020ToRgb = ({ r, g, b, alpha }: Rec2020Color): RgbColor => {\n const [sr, sg, sb] = linearRec2020ToSrgb(rec2020ToLinear(r), rec2020ToLinear(g), rec2020ToLinear(b));\n return clampRgb({\n r: srgbFromLinear(clamp(sr, 0, 1)) * 255,\n g: srgbFromLinear(clamp(sg, 0, 1)) * 255,\n b: srgbFromLinear(clamp(sb, 0, 1)) * 255,\n alpha,\n });\n};\n\n/** Unclamped Rec.2020 → gamma-encoded sRGB. Channels may exceed [0, 255] for out-of-sRGB-gamut colors. */\nconst rec2020ToRgbUnclamped = ({ r, g, b, alpha }: Rec2020Color): RgbColor => {\n const [sr, sg, sb] = linearRec2020ToSrgb(rec2020ToLinear(r), rec2020ToLinear(g), rec2020ToLinear(b));\n return {\n r: srgbFromLinear(sr) * 255,\n g: srgbFromLinear(sg) * 255,\n b: srgbFromLinear(sb) * 255,\n alpha,\n };\n};\n\nexport const parseRec2020Object = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if ((input as { colorSpace?: unknown }).colorSpace !== 'rec2020') return null;\n if (!hasKeys(input, ['r', 'g', 'b'])) return null;\n const { r, g, b, alpha = 1 } = input as { r: unknown; g: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(r) || !isAnyNumber(g) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return rec2020ToRgbUnclamped({\n r: sanitize(r),\n g: sanitize(g),\n b: sanitize(b),\n alpha: clamp(sanitize(alpha), 0, 1),\n colorSpace: 'rec2020',\n });\n};\n\n// CSS Color 4: color(rec2020 r g b / alpha). Channels accept number|percentage|none; 100% = 1.\nconst REC2020_RE = new RegExp(\n `^color\\\\(\\\\s*rec2020\\\\s+(?<r>${NUM_OR_NONE})(?<rp>%?)\\\\s+(?<g>${NUM_OR_NONE})(?<gp>%?)` +\n `\\\\s+(?<b>${NUM_OR_NONE})(?<bp>%?)\\\\s*(?:/\\\\s*(?<al>${NUM_OR_NONE})(?<alp>%?)\\\\s*)?\\\\)$`,\n 'i'\n);\n\nexport const parseRec2020String = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const g = REC2020_RE.exec(input.trim())?.groups;\n if (!g) return null;\n const r = g.rp ? parseNum(g.r!) / 100 : parseNum(g.r!);\n const gc = g.gp ? parseNum(g.g!) / 100 : parseNum(g.g!);\n const b = g.bp ? parseNum(g.b!) / 100 : parseNum(g.b!);\n const alpha = g.al === undefined ? 1 : parseNum(g.al) / (g.alp ? 100 : 1);\n return rec2020ToRgbUnclamped({\n r,\n g: gc,\n b,\n alpha: clamp(alpha, 0, 1),\n colorSpace: 'rec2020',\n });\n};\n\n/** Unclamped linear Rec.2020 channels from OKLab values. */\nexport const oklabToLinearRec2020 = (l: number, a: number, b: number): [number, number, number] =>\n srgbLinearToRec2020Linear(...oklabToLinear(l, a, b));\n\n/** Zero-allocation sibling of oklabToLinearRec2020 — writes [rr, rg, rb] into `out`. */\nexport const oklabToLinearRec2020Into = (out: Float64Array | number[], l: number, a: number, b: number): void => {\n oklabToLinearInto(out, l, a, b);\n srgbLinearToRec2020LinearInto(out, out[0]!, out[1]!, out[2]!);\n};\n","import { oklchToLinear, oklchToLinearInto } from '../channels.js';\nimport { linearSrgbToOklab } from '../colorModels/oklab.js';\nimport {\n linearRec2020ToSrgb,\n oklabToLinearRec2020,\n parseRec2020Object,\n parseRec2020String,\n rgbToRec2020,\n srgbLinearToRec2020Linear,\n srgbLinearToRec2020LinearInto,\n} from '../colorModels/rec2020.js';\nimport type { Plugin } from '../colordx.js';\nimport { inGamutCustom, toGamutCustom } from '../gamut.js';\nimport { rec2020FromLinear } from '../transfer.js';\nimport type { AnyColor, Rec2020Color } from '../types.js';\n\nconst rec2020FromLinearConverter = (r: number, g: number, b: number): [number, number, number] =>\n linearSrgbToOklab(...linearRec2020ToSrgb(r, g, b));\n\ndeclare module '@colordx/core' {\n interface Colordx {\n toRec2020(): Rec2020Color;\n toRec2020String(): string;\n }\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace Colordx {\n function toGamutRec2020(input: AnyColor): Colordx;\n }\n}\n\n/**\n * Convert linear sRGB channels (from oklchToLinear) to gamma-encoded Rec.2020 channels.\n * This is the cheap step — only a matrix multiply + BT.2020 gamma, no cbrt.\n */\nexport const linearToRec2020Channels = (lr: number, lg: number, lb: number): [number, number, number] => {\n const [r, g, b] = srgbLinearToRec2020Linear(lr, lg, lb);\n return [rec2020FromLinear(r), rec2020FromLinear(g), rec2020FromLinear(b)];\n};\n\n/** Zero-allocation sibling of linearToRec2020Channels — writes [rr, rg, rb] (gamma-encoded, 0–1) into `out`. */\nexport const linearToRec2020ChannelsInto = (out: Float64Array | number[], lr: number, lg: number, lb: number): void => {\n srgbLinearToRec2020LinearInto(out, lr, lg, lb);\n out[0] = rec2020FromLinear(out[0]!);\n out[1] = rec2020FromLinear(out[1]!);\n out[2] = rec2020FromLinear(out[2]!);\n};\n\n/**\n * Convert OKLCH to gamma-encoded Rec.2020 channels without object allocation.\n * Returns [r, g, b] in [0, 1] for in-gamut colors. Out-of-gamut channels may\n * exceed this range — callers are responsible for clamping before byte encoding.\n * Uses the BT.2020 transfer function (exponent 0.45, distinct from sRGB 1/2.4).\n */\nexport const oklchToRec2020Channels = (l: number, c: number, h: number): [number, number, number] =>\n linearToRec2020Channels(...oklchToLinear(l, c, h));\n\n/** Zero-allocation sibling of oklchToRec2020Channels — writes [rr, rg, rb] into `out`. */\nexport const oklchToRec2020ChannelsInto = (out: Float64Array | number[], l: number, c: number, h: number): void => {\n oklchToLinearInto(out, l, c, h);\n linearToRec2020ChannelsInto(out, out[0]!, out[1]!, out[2]!);\n};\n\n/**\n * Returns true if the color is within the Rec.2020 gamut.\n * sRGB inputs (hex, rgb, hsl, etc.) always return true (sRGB ⊂ Rec.2020).\n */\nexport const inGamutRec2020 = (input: AnyColor): boolean => inGamutCustom(input, oklabToLinearRec2020);\n\nconst rec2020: Plugin = (ColordxClass, parsers, formatParsers) => {\n ColordxClass.toGamutRec2020 = (input: AnyColor) => {\n const mapped = toGamutCustom(input, oklabToLinearRec2020, rec2020FromLinearConverter);\n return mapped !== null ? ColordxClass._makeFromOklab(mapped) : new ColordxClass(input);\n };\n ColordxClass.prototype.toRec2020 = function () {\n return rgbToRec2020(this._rawRgb());\n };\n ColordxClass.prototype.toRec2020String = function () {\n const { r, g, b, alpha } = this.toRec2020();\n return alpha < 1 ? `color(rec2020 ${r} ${g} ${b} / ${alpha})` : `color(rec2020 ${r} ${g} ${b})`;\n };\n parsers.push(parseRec2020String, parseRec2020Object);\n formatParsers.push([parseRec2020String, 'rec2020'], [parseRec2020Object, 'rec2020']);\n};\n\nexport default rec2020;\n"]} |
+1
-1
| { | ||
| "name": "@colordx/core", | ||
| "version": "5.2.0", | ||
| "version": "5.3.0", | ||
| "description": "A high-performance color library with extended support for modern color spaces including OKLCH, OKLAB, Display-P3, and more", | ||
@@ -5,0 +5,0 @@ "author": "Dmitrii Kriaklin", |
+19
-19
@@ -47,3 +47,3 @@ <p align="center"> | ||
| // Parse any CSS color string or color object, then chain conversions: | ||
| colordx('#ff0000').toRgbString(); // 'rgb(255, 0, 0)' | ||
| colordx('#ff0000').toRgbString(); // 'rgb(255 0 0)' | ||
| colordx('#ff0000').toHex(); // '#ff0000' | ||
@@ -55,3 +55,3 @@ colordx('#ff0000').toOklch(); // { l: 0.628, c: 0.2577, h: 29.23, alpha: 1 } | ||
| colordx('oklch(0.5 0.2 240)').toHex(); // '#0069c7' | ||
| colordx({ r: 255, g: 0, b: 0, alpha: 1 }).toHslString(); // 'hsl(0, 100%, 50%)' | ||
| colordx({ r: 255, g: 0, b: 0, alpha: 1 }).toHslString(); // 'hsl(0 100% 50%)' | ||
@@ -76,5 +76,5 @@ // Chain manipulations — each call returns a new immutable Colordx: | ||
| colordx('#f00'); | ||
| colordx('rgb(255, 0, 0)'); | ||
| colordx('rgb(255 0 0)'); | ||
| colordx('rgba(255, 0, 0, 0.5)'); | ||
| colordx('hsl(0, 100%, 50%)'); | ||
| colordx('hsl(0 100% 50%)'); | ||
| colordx('oklab(0.6279 0.2249 0.1257)'); | ||
@@ -101,7 +101,7 @@ colordx('oklch(0.6279 0.2577 29.23)'); | ||
| .toRgb() // { r: 255, g: 0, b: 0, alpha: 1 } | ||
| .toRgbString() // 'rgb(255, 0, 0)' | ||
| .toRgbString() // 'rgb(255 0 0)' | ||
| .toHex() // '#ff0000' | ||
| .toNumber() // 16711680 (0xff0000 — PixiJS / Discord integer format) | ||
| .toHsl() // { h: 0, s: 100, l: 50, alpha: 1 } | ||
| .toHslString() // 'hsl(0, 100%, 50%)' | ||
| .toHslString() // 'hsl(0 100% 50%)' | ||
| // toHsl accepts an optional precision argument (decimal places): | ||
@@ -111,4 +111,4 @@ colordx('#3d7a9f').toHsl() // { h: 202.65, s: 44.55, l: 43.14, alpha: 1 } — default (2) | ||
| colordx('#3d7a9f').toHsl(0) // { h: 203, s: 45, l: 43, alpha: 1 } — integers | ||
| colordx('#3d7a9f').toHslString() // 'hsl(202.65, 44.55%, 43.14%)' | ||
| colordx('#3d7a9f').toHslString(4) // 'hsl(202.6531, 44.5455%, 43.1373%)' | ||
| colordx('#3d7a9f').toHslString() // 'hsl(202.65 44.55% 43.14%)' | ||
| colordx('#3d7a9f').toHslString(4) // 'hsl(202.6531 44.5455% 43.1373%)' | ||
| // With hwb plugin loaded: | ||
@@ -172,4 +172,4 @@ .toHwb() // { h: 0, w: 0, b: 0, alpha: 1 } | ||
| getFormat('#ff0000'); // 'hex' | ||
| getFormat('rgb(255, 0, 0)'); // 'rgb' | ||
| getFormat('hsl(0, 100%, 50%)'); // 'hsl' | ||
| getFormat('rgb(255 0 0)'); // 'rgb' | ||
| getFormat('hsl(0 100% 50%)'); // 'hsl' | ||
| getFormat('oklch(0.5 0.2 240)'); // 'oklch' | ||
@@ -272,11 +272,11 @@ getFormat('oklab(0.6279 0.2249 0.1257)'); // 'oklab' | ||
| colordx(input).toOklchString(); // 'oklch(0.5 0.4 180)' | ||
| colordx(input).toRgbString(); // 'rgb(0, 152, 108)' — naive clip, matches browser | ||
| colordx(input).toRgbString(); // 'rgb(0 152 108)' — naive clip, matches browser | ||
| // 2. Map — CSS Color 4 gamut mapping (preserves lightness + hue, reduces chroma) | ||
| colordx(input).mapSrgb().toOklchString(); // 'oklch(0.5091 0.0938 177.85)' | ||
| colordx(input).mapSrgb().toRgbString(); // 'rgb(0, 119, 102)' | ||
| colordx(input).mapSrgb().toRgbString(); // 'rgb(0 119 102)' | ||
| // 3. Clamp — naive-clip into sRGB as a Colordx (matches browser, but hue drifts) | ||
| colordx(input).clampSrgb().toOklchString(); // 'oklch(0.6012 0.1276 164.3)' | ||
| colordx(input).clampSrgb().toRgbString(); // 'rgb(0, 152, 108)' — same bytes as (1) | ||
| colordx(input).clampSrgb().toRgbString(); // 'rgb(0 152 108)' — same bytes as (1) | ||
| ``` | ||
@@ -364,4 +364,4 @@ | ||
| colordx('#ff0000').toLab(); // { l: 54.29, a: 80.8, b: 69.89, alpha: 1, colorSpace: 'lab' } | ||
| colordx('#ff0000').toLabString(); // 'lab(54.29% 80.8 69.89)' | ||
| colordx('lab(54.29% 80.8 69.89)').toHex(); // '#ff0000' — lab strings are parseable | ||
| colordx('#ff0000').toLabString(); // 'lab(54.29 80.8 69.89)' | ||
| colordx('lab(54.29 80.8 69.89)').toHex(); // '#ff0000' — lab strings are parseable | ||
| colordx('#ff0000').toXyz(); // { x: 43.61, y: 22.25, z: 1.39, alpha: 1 } | ||
@@ -394,4 +394,4 @@ colordx('#ff0000').toXyzString(); // 'color(xyz-d65 43.61 22.25 1.39)' | ||
| colordx('#ff0000').toLch(); // { l: 54.29, c: 106.84, h: 40.86, alpha: 1, colorSpace: 'lch' } | ||
| colordx('#ff0000').toLchString(); // 'lch(54.29% 106.84 40.86)' | ||
| colordx('lch(54.29% 106.84 40.86)').toHex(); // '#ff0000' | ||
| colordx('#ff0000').toLchString(); // 'lch(54.29 106.84 40.86)' | ||
| colordx('lch(54.29 106.84 40.86)').toHex(); // '#ff0000' | ||
| // LCH objects require colorSpace: 'lch' to distinguish from OKLCH (which has the same l/c/h shape) | ||
@@ -442,4 +442,4 @@ colordx({ l: 50, c: 50, h: 180, alpha: 1, colorSpace: 'lch' as const }).toHex(); // parses as LCH object | ||
| colordx('#ff0000').toHsv(); // { h: 0, s: 100, v: 100, alpha: 1 } | ||
| colordx('#ff0000').toHsvString(); // 'hsv(0, 100%, 100%)' | ||
| colordx('hsv(0, 100%, 100%)').toHex(); // '#ff0000' | ||
| colordx('#ff0000').toHsvString(); // 'hsv(0 100% 100%)' | ||
| colordx('hsv(0 100% 100%)').toHex(); // '#ff0000' | ||
| colordx({ h: 0, s: 100, v: 100, alpha: 1 }).toHex(); // '#ff0000' | ||
@@ -446,0 +446,0 @@ ``` |
| 'use strict';var chunkEXPXWBLP_cjs=require('./chunk-EXPXWBLP.cjs');var c=Array.from({length:256},(t,r)=>r.toString(16).padStart(2,"0")),n=t=>(t&15)+9*(t>>6),u=(t,r)=>n(t.charCodeAt(r))<<4|n(t.charCodeAt(r+1)),g=/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,f=t=>{if(typeof t!="string")return null;let r=t.trim();if(!g.test(r))return null;let o=r.length;if(o===4||o===5){let e=n(r.charCodeAt(1)),a=n(r.charCodeAt(2)),l=n(r.charCodeAt(3)),b=o===5?n(r.charCodeAt(4)):15;return {r:e|e<<4,g:a|a<<4,b:l|l<<4,alpha:chunkEXPXWBLP_cjs.b((b|b<<4)/255,3)}}return {r:u(r,1),g:u(r,3),b:u(r,5),alpha:o===9?chunkEXPXWBLP_cjs.b(u(r,7)/255,3):1}},m=({r:t,g:r,b:o,alpha:e})=>{let a="#"+c[chunkEXPXWBLP_cjs.a(Math.round(t),0,255)]+c[chunkEXPXWBLP_cjs.a(Math.round(r),0,255)]+c[chunkEXPXWBLP_cjs.a(Math.round(o),0,255)];return e<1?a+c[chunkEXPXWBLP_cjs.a(Math.round(e*255),0,255)]:a};exports.a=f;exports.b=m;//# sourceMappingURL=chunk-5Q4QJ3KC.cjs.map | ||
| //# sourceMappingURL=chunk-5Q4QJ3KC.cjs.map |
| {"version":3,"sources":["../src/colorModels/hex.ts"],"names":["HEX_BYTE","_","i","hexNibble","c","hexByte","s","HEX_RE","parseHex","input","len","rv","gv","bv","av","round","rgbToHex","r","g","b","alpha","hex","clamp"],"mappings":"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","file":"chunk-5Q4QJ3KC.cjs","sourcesContent":["import { clamp, round } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nconst HEX_BYTE = /* #__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\nconst hexNibble = (c: number): number => (c & 0xf) + 9 * (c >> 6);\nconst hexByte = (s: string, i: number): number => (hexNibble(s.charCodeAt(i)) << 4) | hexNibble(s.charCodeAt(i + 1));\nconst HEX_RE = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;\n\nexport const parseHex = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const s = input.trim();\n if (!HEX_RE.test(s)) return null;\n const len = s.length;\n\n if (len === 4 || len === 5) {\n const rv = hexNibble(s.charCodeAt(1));\n const gv = hexNibble(s.charCodeAt(2));\n const bv = hexNibble(s.charCodeAt(3));\n const av = len === 5 ? hexNibble(s.charCodeAt(4)) : 15;\n return { r: rv | (rv << 4), g: gv | (gv << 4), b: bv | (bv << 4), alpha: round((av | (av << 4)) / 255, 3) };\n }\n\n return {\n r: hexByte(s, 1),\n g: hexByte(s, 3),\n b: hexByte(s, 5),\n alpha: len === 9 ? round(hexByte(s, 7) / 255, 3) : 1,\n };\n};\n\nexport const rgbToHex = ({ r, g, b, alpha }: RgbColor): string => {\n const hex =\n '#' +\n HEX_BYTE[clamp(Math.round(r), 0, 255)] +\n HEX_BYTE[clamp(Math.round(g), 0, 255)] +\n HEX_BYTE[clamp(Math.round(b), 0, 255)];\n return alpha < 1 ? hex + HEX_BYTE[clamp(Math.round(alpha * 255), 0, 255)] : hex;\n};\n"]} |
| 'use strict';var chunkX5FCFNQN_cjs=require('./chunk-X5FCFNQN.cjs'),chunkGYCEEHZT_cjs=require('./chunk-GYCEEHZT.cjs'),chunkEXPXWBLP_cjs=require('./chunk-EXPXWBLP.cjs');var N=.4122214708,z=.5363325363,E=.0514459929,U=.2119034982,$=.6806995451,q=.1073969566,D=.0883024619,H=.2817188376,J=.6299787005,P=.2104542553,Q=.793617785,V=-0.0040720468,W=1.9779984951,X=-2.428592205,Y=.4505937099,Z=.0259040371,nn=.7827717662,on=-0.808675766,g=.3963377774,I=.2158037573,R=-0.1055613458,S=-0.0638541728,f=-0.0894841775,d=-1.291485548,h=4.0767416613,B=-3.3077115904,O=.2309699287,x=-1.2684380041,C=2.6097574007,A=-0.3413193963,w=-0.0041960865,T=-0.7034186145,y=1.7076147009;var rn=(o,n,r)=>{let t=Math.cbrt(N*o+z*n+E*r),s=Math.cbrt(U*o+$*n+q*r),e=Math.cbrt(D*o+H*n+J*r);return [P*t+Q*s+V*e,W*t+X*s+Y*e,Z*t+nn*s+on*e]},bn=({r:o,g:n,b:r,alpha:t})=>{let[s,e,c]=rn(chunkX5FCFNQN_cjs.a(o/255),chunkX5FCFNQN_cjs.a(n/255),chunkX5FCFNQN_cjs.a(r/255));return {l:s,a:e,b:c,alpha:t}},G=({l:o,a:n,b:r,alpha:t})=>{let[s,e,c]=tn(o,n,r);return {r:chunkX5FCFNQN_cjs.b(s)*255,g:chunkX5FCFNQN_cjs.b(e)*255,b:chunkX5FCFNQN_cjs.b(c)*255,alpha:t}},ln=({l:o,a:n,b:r,alpha:t})=>{let s=o+.3963377774*n+.2158037573*r,e=o-.1055613458*n-.0638541728*r,c=o-.0894841775*n-1.291485548*r,_=s**3,b=e**3,l=c**3,j=4.0767416613*_-3.3077115904*b+.2309699287*l,F=-1.2684380041*_+2.6097574007*b-.3413193963*l,K=-0.0041960865*_-.7034186145*b+1.7076147009*l;return chunkGYCEEHZT_cjs.a({r:chunkX5FCFNQN_cjs.b(chunkEXPXWBLP_cjs.a(j,0,1))*255,g:chunkX5FCFNQN_cjs.b(chunkEXPXWBLP_cjs.a(F,0,1))*255,b:chunkX5FCFNQN_cjs.b(chunkEXPXWBLP_cjs.a(K,0,1))*255,alpha:t})},an=(o,n,r,t)=>{let s=n+g*r+I*t,e=n+R*r+S*t,c=n+f*r+d*t,_=s**3,b=e**3,l=c**3;o[0]=h*_+B*b+O*l,o[1]=x*_+C*b+A*l,o[2]=w*_+T*b+y*l;},tn=(o,n,r)=>{let t=o+g*n+I*r,s=o+R*n+S*r,e=o+f*n+d*r,c=t**3,_=s**3,b=e**3;return [h*c+B*_+O*b,x*c+C*_+A*b,w*c+T*_+y*b]},Mn=o=>{if(!chunkEXPXWBLP_cjs.h(o)||o.colorSpace==="lab"||!chunkEXPXWBLP_cjs.i(o,["l","a","b"])||"r"in o||"x"in o||"c"in o||"h"in o)return null;let{l:n,a:r,b:t,alpha:s=1}=o;return !chunkEXPXWBLP_cjs.f(n)||!chunkEXPXWBLP_cjs.f(r)||!chunkEXPXWBLP_cjs.f(t)||!chunkEXPXWBLP_cjs.f(s)||chunkEXPXWBLP_cjs.g(n)>1?null:G({l:chunkEXPXWBLP_cjs.g(n),a:chunkEXPXWBLP_cjs.g(r),b:chunkEXPXWBLP_cjs.g(t),alpha:chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.g(s),0,1)})},sn=/^oklab\(\s*(none|[+-]?\d*\.?\d+)(%?)\s+(none|[+-]?\d*\.?\d+)(%?)\s+(none|[+-]?\d*\.?\d+)(%?)\s*(?:\/\s*(none|[+-]?\d*\.?\d+)(%)?\s*)?\)$/i,M=o=>o.toLowerCase()==="none"?0:Number(o),mn=o=>{if(typeof o!="string")return null;let n=sn.exec(o.trim());if(!n)return null;let r=n[2]?M(n[1])/100:M(n[1]),t=n[4]?M(n[3])*.004:M(n[3]),s=n[6]?M(n[5])*.004:M(n[5]),e=n[7]===void 0?1:M(n[7])/(n[8]?100:1);return G({l:r,a:t,b:s,alpha:chunkEXPXWBLP_cjs.a(e,0,1)})};exports.a=rn;exports.b=bn;exports.c=G;exports.d=ln;exports.e=an;exports.f=tn;exports.g=Mn;exports.h=mn;//# sourceMappingURL=chunk-BBEOVRYB.cjs.map | ||
| //# sourceMappingURL=chunk-BBEOVRYB.cjs.map |
| {"version":3,"sources":["../src/colorModels/oklab.ts"],"names":["M1_LR","M1_LG","M1_LB","M1_MR","M1_MG","M1_MB","M1_SR","M1_SG","M1_SB","M2_L_L","M2_M_L","M2_S_L","M2_L_A","M2_M_A","M2_S_A","M2_L_B","M2_M_B","M2_S_B","M2I_A_L","M2I_B_L","M2I_A_M","M2I_B_M","M2I_A_S","M2I_B_S","M1I_L_R","M1I_M_R","M1I_S_R","M1I_L_G","M1I_M_G","M1I_S_G","M1I_L_B","M1I_M_B","M1I_S_B","linearSrgbToOklab","lr","lg","lb","lv","mv","sv","rgbToOklab","r","g","b","alpha","l","a","bv","srgbToLinear","oklabToRgbUnclamped","oklabToLinear","srgbFromLinear","oklabToRgb","l_","m_","s_","clampRgb","clamp","oklabToLinearInto","out","parseOklabObject","input","isObject","hasKeys","isAnyNumber","sanitize","OKLAB_RE","val","v","parseOklabString","m","L"],"mappings":"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","file":"chunk-BBEOVRYB.cjs","sourcesContent":["import { clamp, hasKeys, isAnyNumber, isObject, sanitize } from '../helpers.js';\nimport { srgbFromLinear, srgbToLinear } from '../transfer.js';\nimport type { OklabColor, RgbColor } from '../types.js';\nimport { clampRgb } from './rgb.js';\n\n// Björn Ottosson's OKLab matrix coefficients. Referenced by both the allocating\n// and zero-alloc (*Into) variants so the math lives in one place.\n// sRGB linear → LMS (cubed roots taken at M1 stage)\nconst M1_LR = 0.4122214708,\n M1_LG = 0.5363325363,\n M1_LB = 0.0514459929;\nconst M1_MR = 0.2119034982,\n M1_MG = 0.6806995451,\n M1_MB = 0.1073969566;\nconst M1_SR = 0.0883024619,\n M1_SG = 0.2817188376,\n M1_SB = 0.6299787005;\n// LMS' → OKLab\nconst M2_L_L = 0.2104542553,\n M2_M_L = 0.793617785,\n M2_S_L = -0.0040720468;\nconst M2_L_A = 1.9779984951,\n M2_M_A = -2.428592205,\n M2_S_A = 0.4505937099;\nconst M2_L_B = 0.0259040371,\n M2_M_B = 0.7827717662,\n M2_S_B = -0.808675766;\n// OKLab → LMS' (inverse of M2)\nconst M2I_A_L = 0.3963377774,\n M2I_B_L = 0.2158037573;\nconst M2I_A_M = -0.1055613458,\n M2I_B_M = -0.0638541728;\nconst M2I_A_S = -0.0894841775,\n M2I_B_S = -1.291485548;\n// LMS → linear sRGB (inverse of M1)\nconst M1I_L_R = 4.0767416613,\n M1I_M_R = -3.3077115904,\n M1I_S_R = 0.2309699287;\nconst M1I_L_G = -1.2684380041,\n M1I_M_G = 2.6097574007,\n M1I_S_G = -0.3413193963;\nconst M1I_L_B = -0.0041960865,\n M1I_M_B = -0.7034186145,\n M1I_S_B = 1.7076147009;\n\n/** Zero-allocation sibling of linearSrgbToOklab — writes [l, a, b] into `out`. */\nexport const linearSrgbToOklabInto = (out: Float64Array | number[], lr: number, lg: number, lb: number): void => {\n const lv = Math.cbrt(M1_LR * lr + M1_LG * lg + M1_LB * lb);\n const mv = Math.cbrt(M1_MR * lr + M1_MG * lg + M1_MB * lb);\n const sv = Math.cbrt(M1_SR * lr + M1_SG * lg + M1_SB * lb);\n out[0] = M2_L_L * lv + M2_M_L * mv + M2_S_L * sv;\n out[1] = M2_L_A * lv + M2_M_A * mv + M2_S_A * sv;\n out[2] = M2_L_B * lv + M2_M_B * mv + M2_S_B * sv;\n};\n\n/** Convert linear sRGB channels to OKLab (Björn Ottosson). No gamma, no clamping. */\nexport const linearSrgbToOklab = (lr: number, lg: number, lb: number): [number, number, number] => {\n const lv = Math.cbrt(M1_LR * lr + M1_LG * lg + M1_LB * lb);\n const mv = Math.cbrt(M1_MR * lr + M1_MG * lg + M1_MB * lb);\n const sv = Math.cbrt(M1_SR * lr + M1_SG * lg + M1_SB * lb);\n return [\n M2_L_L * lv + M2_M_L * mv + M2_S_L * sv,\n M2_L_A * lv + M2_M_A * mv + M2_S_A * sv,\n M2_L_B * lv + M2_M_B * mv + M2_S_B * sv,\n ];\n};\n\nexport const rgbToOklab = ({ r, g, b, alpha }: RgbColor): OklabColor => {\n const [l, a, bv] = linearSrgbToOklab(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n return { l, a, b: bv, alpha };\n};\n\n/** Unclamped OKLab → gamma-encoded sRGB. Channels may exceed [0, 255] for out-of-sRGB-gamut colors. */\nexport const oklabToRgbUnclamped = ({ l, a, b, alpha }: OklabColor): RgbColor => {\n const [lr, lg, lb] = oklabToLinear(l, a, b);\n return {\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n };\n};\n\nexport const oklabToRgb = ({ l, a, b, alpha }: OklabColor): RgbColor => {\n const l_ = l + 0.3963377774 * a + 0.2158037573 * b;\n const m_ = l - 0.1055613458 * a - 0.0638541728 * b;\n const s_ = l - 0.0894841775 * a - 1.291485548 * b;\n\n const lv = l_ ** 3;\n const mv = m_ ** 3;\n const sv = s_ ** 3;\n\n const r = 4.0767416613 * lv - 3.3077115904 * mv + 0.2309699287 * sv;\n const g = -1.2684380041 * lv + 2.6097574007 * mv - 0.3413193963 * sv;\n const bv = -0.0041960865 * lv - 0.7034186145 * mv + 1.7076147009 * sv;\n\n return clampRgb({\n r: srgbFromLinear(clamp(r, 0, 1)) * 255,\n g: srgbFromLinear(clamp(g, 0, 1)) * 255,\n b: srgbFromLinear(clamp(bv, 0, 1)) * 255,\n alpha,\n });\n};\n\n/** Zero-allocation sibling of oklabToLinear — writes [lr, lg, lb] into `out`. */\nexport const oklabToLinearInto = (out: Float64Array | number[], l: number, a: number, b: number): void => {\n const l_ = l + M2I_A_L * a + M2I_B_L * b;\n const m_ = l + M2I_A_M * a + M2I_B_M * b;\n const s_ = l + M2I_A_S * a + M2I_B_S * b;\n const lv = l_ ** 3,\n mv = m_ ** 3,\n sv = s_ ** 3;\n out[0] = M1I_L_R * lv + M1I_M_R * mv + M1I_S_R * sv;\n out[1] = M1I_L_G * lv + M1I_M_G * mv + M1I_S_G * sv;\n out[2] = M1I_L_B * lv + M1I_M_B * mv + M1I_S_B * sv;\n};\n\n/** Unclamped linear sRGB channels from OKLab values. Channels may exceed [0, 1] for out-of-gamut colors. */\nexport const oklabToLinear = (l: number, a: number, b: number): [number, number, number] => {\n const l_ = l + M2I_A_L * a + M2I_B_L * b;\n const m_ = l + M2I_A_M * a + M2I_B_M * b;\n const s_ = l + M2I_A_S * a + M2I_B_S * b;\n const lv = l_ ** 3,\n mv = m_ ** 3,\n sv = s_ ** 3;\n return [\n M1I_L_R * lv + M1I_M_R * mv + M1I_S_R * sv,\n M1I_L_G * lv + M1I_M_G * mv + M1I_S_G * sv,\n M1I_L_B * lv + M1I_M_B * mv + M1I_S_B * sv,\n ];\n};\n\nexport const parseOklabObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n // Objects with colorSpace: 'lab' are CIE Lab, not OKLab — let parseLabObject handle them.\n if ((input as { colorSpace?: unknown }).colorSpace === 'lab') return null;\n if (!hasKeys(input, ['l', 'a', 'b'])) return null;\n if ('r' in input || 'x' in input || 'c' in input || 'h' in input) return null;\n const { l, a, b, alpha = 1 } = input as { l: unknown; a: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(a) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n if (sanitize(l) > 1) return null; // OKLab L is always [0, 1]; reject CIE Lab values passed without colorSpace branding\n return oklabToRgbUnclamped({\n l: sanitize(l),\n a: sanitize(a),\n b: sanitize(b),\n alpha: clamp(sanitize(alpha), 0, 1),\n });\n};\n\nconst OKLAB_RE =\n /^oklab\\(\\s*(none|[+-]?\\d*\\.?\\d+)(%?)\\s+(none|[+-]?\\d*\\.?\\d+)(%?)\\s+(none|[+-]?\\d*\\.?\\d+)(%?)\\s*(?:\\/\\s*(none|[+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nconst val = (v: string): number => (v.toLowerCase() === 'none' ? 0 : Number(v));\n\nexport const parseOklabString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = OKLAB_RE.exec(input.trim());\n if (!m) return null;\n const L = m[2] ? val(m[1]!) / 100 : val(m[1]!);\n const a = m[4] ? val(m[3]!) * 0.004 : val(m[3]!); // CSS Color 4: 100% = 0.4, so 1% = 0.004\n const b = m[6] ? val(m[5]!) * 0.004 : val(m[5]!);\n const alpha = m[7] === undefined ? 1 : val(m[7]) / (m[8] ? 100 : 1);\n return oklabToRgbUnclamped({ l: L, a, b, alpha: clamp(alpha, 0, 1) });\n};\n"]} |
| import {f,e,a}from'./chunk-MUHBYE5R.mjs';import {d,b as b$1}from'./chunk-HFDTK2ZP.mjs';import {b}from'./chunk-FXCFKFXK.mjs';import {d as d$1,a as a$1}from'./chunk-JFPP44S3.mjs';var K=/^oklch\(\s*([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,q=/^oklab\(\s*([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(%?)\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,C=e=>{if(typeof e=="object"&&e!==null){let r=e;if("l"in r&&"a"in r&&"b"in r&&r.colorSpace!=="lab"&&!("c"in r)&&!("r"in r)){let n=e;if(typeof n.l=="number"&&typeof n.a=="number"&&typeof n.b=="number"&&typeof n.alpha=="number")return {l:n.l,a:n.a,b:n.b,alpha:n.alpha}}if("l"in r&&"c"in r&&"h"in r&&r.colorSpace!=="lch"&&!("a"in r)&&!("r"in r)){let n=e;if(typeof n.l=="number"&&typeof n.c=="number"&&typeof n.h=="number"){let o=n.h*Math.PI/180;return {l:n.l,a:n.c*Math.cos(o),b:n.c*Math.sin(o),alpha:n.alpha}}}if(r.colorSpace==="lab"){let n=e;if(typeof n.l!="number"||typeof n.a!="number"||typeof n.b!="number")return null;let{x:o,y:t,z:b}=d(n),[u,l,p]=b$1(o,t,b),[m,d$1,k]=a(u,l,p);return {l:m,a:d$1,b:k,alpha:typeof n.alpha=="number"?n.alpha:1}}return null}if(typeof e=="string"){let r=K.exec(e);if(r){let n=r[2]?Number(r[1])/100:Number(r[1]),o=r[4]?Number(r[3])*.004:Number(r[3]),t=r[6]?.toLowerCase()??"deg",u=Number(r[5])*(d$1[t]??1)*Math.PI/180,l=r[7]===void 0?1:Number(r[7])/(r[8]?100:1);return {l:n,a:o*Math.cos(u),b:o*Math.sin(u),alpha:l}}if(r=q.exec(e),r){let n=r[2]?Number(r[1])/100:Number(r[1]),o=r[4]?Number(r[3])*.004:Number(r[3]),t=r[6]?Number(r[5])*.004:Number(r[5]),b=r[7]===void 0?1:Number(r[7])/(r[8]?100:1);return {l:n,a:o,b:t,alpha:b}}return null}return null},c=5e-4,D=(e,r,n)=>e>=-c&&e<=1+c&&r>=-c&&r<=1+c&&n>=-c&&n<=1+c,O=(e,r,n)=>e>=0&&e<=1&&r>=0&&r<=1&&n>=0&&n<=1,Q=e=>{let r=C(e);if(r===null)return true;let[n,o,t]=f(r.l,r.a,r.b);return D(n,o,t)},E=.02,U=1e-4,F=(e,r)=>{let n=e[0]-r[0],o=e[1]-r[1],t=e[2]-r[2];return Math.sqrt(n*n+o*o+t*t)},_=(e,r,n,o,t,b)=>{if(e>=1)return {l:1,a:0,b:0,alpha:o};if(e<=0)return {l:0,a:0,b:0,alpha:o};let[u,l,p]=t(e,r,n);if(O(u,l,p))return {l:e,a:r,b:n,alpha:o};let m=b(a$1(u,0,1),a$1(l,0,1),a$1(p,0,1));if(F(m,[e,r,n])<=E)return {l:m[0],a:m[1],b:m[2],alpha:o};let d=Math.atan2(n,r),k=Math.sqrt(r*r+n*n),f=0,L=k,M=true,y=m;for(;L-f>U;){let i=(f+L)/2,N=i*Math.cos(d),x=i*Math.sin(d),[A,T,R]=t(e,N,x);if(M&&O(A,T,R)){f=i;continue}let I=b(a$1(A,0,1),a$1(T,0,1),a$1(R,0,1));y=I,F(I,[e,N,x])<=E?(f=i,M=false):L=i;}return {l:y[0],a:y[1],b:y[2],alpha:o}},V=e=>{let r=C(e);if(r===null)return null;let{l:n,a:o,b:t,alpha:b}=r;return _(n,o,t,b,f,a)},W=(e,r)=>{let n=C(e);if(n===null)return true;let[o,t,b]=r(n.l,n.a,n.b);return D(o,t,b)},Y=(e,r,n)=>{let o=C(e);if(o===null)return null;let{l:t,a:b,b:u,alpha:l}=o;return _(t,b,u,l,r,n)};var P=Math.PI/180,j=(e,r,n)=>{let o=n*P;return f(e,r*Math.cos(o),r*Math.sin(o))},z=(e$1,r,n,o)=>{let t=o*P;e(e$1,r,n*Math.cos(t),n*Math.sin(t));},er=(e,r,n)=>{let[o,t,b$1]=j(e,r,n);return [b(o),b(t),b(b$1)]},or=(e,r,n,o)=>{z(e,r,n,o),e[0]=b(e[0]),e[1]=b(e[1]),e[2]=b(e[2]);},tr=(e,r,n)=>{let[o,t,b$1]=j(e,r,n);return [[o,t,b$1],[b(o),b(t),b(b$1)]]},br=(e,r,n,o,t)=>{z(e,n,o,t),r[0]=b(e[0]),r[1]=b(e[1]),r[2]=b(e[2]);};export{Q as a,V as b,W as c,Y as d,j as e,z as f,er as g,or as h,tr as i,br as j};//# sourceMappingURL=chunk-CW7VAOXH.mjs.map | ||
| //# sourceMappingURL=chunk-CW7VAOXH.mjs.map |
| {"version":3,"sources":["../src/gamut.ts","../src/channels.ts"],"names":["OKLCH_RE","OKLAB_RE","getRawOklab","input","obj","c","hRad","x","y","z","labToXyz","lr","lg","lb","xyzD50ToLinearSrgb","ol","oa","ob","linearSrgbToOklab","m","l","unit","ANGLE_UNITS","alpha","a","b","EPS","isLinearInGamut","r","g","strictInGamut","inGamutSrgb","raw","oklabToLinear","JND","GAMUT_EPSILON","deltaEOK","lab1","lab2","dl","da","db","cssGamutMap","toLinear","fromLinear","r0","g0","b0","clip0","clamp","C","lo","hi","minInGamut","lastClip","mid","ma","mb","clipOklab","toGamutSrgbRaw","inGamutCustom","toGamutCustom","DEG_TO_RAD","oklchToLinear","h","oklchToLinearInto","out","oklabToLinearInto","oklchToRgbChannels","srgbFromLinear","oklchToRgbChannelsInto","oklchToLinearAndSrgb","oklchToLinearAndSrgbInto","linOut","srgbOut"],"mappings":"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","file":"chunk-CW7VAOXH.mjs","sourcesContent":["import { labToXyz } from './colorModels/lab.js';\nimport { linearSrgbToOklab, oklabToLinear } from './colorModels/oklab.js';\nimport { xyzD50ToLinearSrgb } from './colorModels/xyz.js';\nimport { ANGLE_UNITS, clamp } from './helpers.js';\nimport type { AnyColor, LabColor, OklabColor, OklchColor } from './types.js';\n\nconst OKLCH_RE =\n /^oklch\\(\\s*([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nconst OKLAB_RE =\n /^oklab\\(\\s*([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(%?)\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\n/**\n * Extract raw OKLab {l, a, b, alpha} without clamping.\n * Returns null for inputs that are already sRGB-bounded (hex, rgb, hsl, hsv, hwb, etc.).\n */\nconst getRawOklab = (input: AnyColor): { l: number; a: number; b: number; alpha: number } | null => {\n if (typeof input === 'object' && input !== null) {\n const obj = input as unknown as Record<string, unknown>;\n // OklabColor: l/a/b present, no 'lab' colorSpace brand\n if ('l' in obj && 'a' in obj && 'b' in obj && obj.colorSpace !== 'lab' && !('c' in obj) && !('r' in obj)) {\n const c = input as OklabColor;\n if (\n typeof c.l === 'number' &&\n typeof c.a === 'number' &&\n typeof c.b === 'number' &&\n typeof c.alpha === 'number'\n ) {\n return { l: c.l, a: c.a, b: c.b, alpha: c.alpha };\n }\n }\n // OklchColor: l/c/h present, no 'lch' colorSpace brand\n if ('l' in obj && 'c' in obj && 'h' in obj && obj.colorSpace !== 'lch' && !('a' in obj) && !('r' in obj)) {\n const c = input as OklchColor;\n if (typeof c.l === 'number' && typeof c.c === 'number' && typeof c.h === 'number') {\n const hRad = (c.h * Math.PI) / 180;\n return { l: c.l, a: c.c * Math.cos(hRad), b: c.c * Math.sin(hRad), alpha: c.alpha };\n }\n }\n // LabColor: convert Lab (D50) → XYZ D50 → D65 → linear sRGB → OKLab (no clamping)\n if (obj.colorSpace === 'lab') {\n const c = input as LabColor;\n if (typeof c.l !== 'number' || typeof c.a !== 'number' || typeof c.b !== 'number') return null;\n const { x, y, z } = labToXyz(c);\n const [lr, lg, lb] = xyzD50ToLinearSrgb(x, y, z);\n const [ol, oa, ob] = linearSrgbToOklab(lr, lg, lb);\n return { l: ol, a: oa, b: ob, alpha: typeof c.alpha === 'number' ? c.alpha : 1 };\n }\n return null;\n }\n\n if (typeof input === 'string') {\n let m = OKLCH_RE.exec(input);\n if (m) {\n const l = m[2] ? Number(m[1]) / 100 : Number(m[1]);\n const c = m[4] ? Number(m[3]) * 0.004 : Number(m[3]);\n const unit = m[6]?.toLowerCase() ?? 'deg';\n const hDeg = Number(m[5]) * (ANGLE_UNITS[unit] ?? 1);\n const hRad = (hDeg * Math.PI) / 180;\n const alpha = m[7] === undefined ? 1 : Number(m[7]) / (m[8] ? 100 : 1);\n return { l, a: c * Math.cos(hRad), b: c * Math.sin(hRad), alpha };\n }\n m = OKLAB_RE.exec(input);\n if (m) {\n const l = m[2] ? Number(m[1]) / 100 : Number(m[1]);\n const a = m[4] ? Number(m[3]) * 0.004 : Number(m[3]);\n const b = m[6] ? Number(m[5]) * 0.004 : Number(m[5]);\n const alpha = m[7] === undefined ? 1 : Number(m[7]) / (m[8] ? 100 : 1);\n return { l, a, b, alpha };\n }\n return null;\n }\n\n return null;\n};\n\n// Tolerance for inGamut* checks — NOT used in gamut mapping, which uses strict bounds.\n// Covers two sources of error:\n// 1. Matrix floating-point noise: accumulated cbrt + matrix error is ~3e-10\n// 2. Value rounding: OKLCH stored at 4 dp (L, C) / 2 dp (H) produces linear-sRGB\n// deviations up to 4.4e-4 on sRGB boundary colors (exhaustive scan of all 256^3 sRGB\n// values confirms this). EPS = 5e-4 absorbs all rounding artifacts while staying below\n// ~1.6 gamma-encoded steps (imperceptible), and correctly rejects genuine out-of-gamut\n// colors (typically 1e-3 and above).\nconst EPS = 5e-4;\n\nconst isLinearInGamut = (r: number, g: number, b: number): boolean =>\n r >= -EPS && r <= 1 + EPS && g >= -EPS && g <= 1 + EPS && b >= -EPS && b <= 1 + EPS;\n\nconst strictInGamut = (r: number, g: number, b: number): boolean =>\n r >= 0 && r <= 1 && g >= 0 && g <= 1 && b >= 0 && b <= 1;\n\n/**\n * Returns true if the color is within the sRGB gamut.\n * Always true for hex, rgb, hsl, hsv, and hwb inputs.\n * For oklch/oklab inputs, checks whether the computed linear sRGB channels are in [0, 1].\n */\nexport const inGamutSrgb = (input: AnyColor): boolean => {\n const raw = getRawOklab(input);\n if (raw === null) return true;\n const [r, g, b] = oklabToLinear(raw.l, raw.a, raw.b);\n return isLinearInGamut(r, g, b);\n};\n\n// CSS Color 4 gamut mapping constants\n// https://www.w3.org/TR/css-color-4/#css-gamut-mapping\nconst JND = 0.02;\nconst GAMUT_EPSILON = 0.0001;\n\n/** Euclidean distance in OKLab — the CSS Color 4 deltaEOK metric. */\nconst deltaEOK = (lab1: readonly [number, number, number], lab2: readonly [number, number, number]): number => {\n const dl = lab1[0] - lab2[0];\n const da = lab1[1] - lab2[1];\n const db = lab1[2] - lab2[2];\n return Math.sqrt(dl * dl + da * da + db * db);\n};\n\nexport type LinearConverter = (l: number, a: number, b: number) => [number, number, number];\nexport type FromLinearConverter = (r: number, g: number, b: number) => [number, number, number];\n\n/**\n * CSS Color 4 gamut mapping algorithm.\n * Binary-searches for the highest chroma where clip(color) is within JND (0.02 deltaEOK)\n * of the chroma-reduced color, then returns the clipped result.\n * This preserves lightness and hue while accepting only perceptually negligible clip error.\n *\n * toLinear: OKLab → unclamped linear target-space channels\n * fromLinear: linear target-space channels → OKLab (used to measure deltaEOK of clipped color)\n */\nconst cssGamutMap = (\n l: number,\n a: number,\n b: number,\n alpha: number,\n toLinear: LinearConverter,\n fromLinear: FromLinearConverter\n): OklabColor => {\n if (l >= 1) return { l: 1, a: 0, b: 0, alpha };\n if (l <= 0) return { l: 0, a: 0, b: 0, alpha };\n\n const [r0, g0, b0] = toLinear(l, a, b);\n if (strictInGamut(r0, g0, b0)) return { l, a, b, alpha };\n\n // Early exit: if the simple clip is already within JND, use it directly\n const clip0 = fromLinear(clamp(r0, 0, 1), clamp(g0, 0, 1), clamp(b0, 0, 1));\n if (deltaEOK(clip0, [l, a, b]) <= JND) {\n return { l: clip0[0], a: clip0[1], b: clip0[2], alpha };\n }\n\n const hRad = Math.atan2(b, a);\n const C = Math.sqrt(a * a + b * b);\n let lo = 0;\n let hi = C;\n let minInGamut = true;\n let lastClip: readonly [number, number, number] = clip0;\n\n while (hi - lo > GAMUT_EPSILON) {\n const mid = (lo + hi) / 2;\n const ma = mid * Math.cos(hRad);\n const mb = mid * Math.sin(hRad);\n const [lr, lg, lb] = toLinear(l, ma, mb);\n\n if (minInGamut && strictInGamut(lr, lg, lb)) {\n lo = mid;\n continue;\n }\n\n const clipOklab = fromLinear(clamp(lr, 0, 1), clamp(lg, 0, 1), clamp(lb, 0, 1));\n lastClip = clipOklab;\n const E = deltaEOK(clipOklab, [l, ma, mb]);\n\n if (E <= JND) {\n lo = mid;\n minInGamut = false;\n } else {\n hi = mid;\n }\n }\n\n return { l: lastClip[0], a: lastClip[1], b: lastClip[2], alpha };\n};\n\n/**\n * Maps an out-of-sRGB-gamut color using the CSS Color 4 algorithm.\n * Returns null for sRGB-bounded inputs (hex, rgb, hsl, etc.) — pass through unchanged.\n * Returns the mapped OklabColor otherwise.\n */\nexport const toGamutSrgbRaw = (input: AnyColor): OklabColor | null => {\n const raw = getRawOklab(input);\n if (raw === null) return null;\n const { l, a, b, alpha } = raw;\n return cssGamutMap(l, a, b, alpha, oklabToLinear, linearSrgbToOklab);\n};\n\nexport const inGamutCustom = (input: AnyColor, toLinear: LinearConverter): boolean => {\n const raw = getRawOklab(input);\n // sRGB-bounded inputs (hex, rgb, hsl, etc.) are always inside the wider P3/Rec.2020 gamut\n if (raw === null) return true;\n const [r, g, b] = toLinear(raw.l, raw.a, raw.b);\n return isLinearInGamut(r, g, b);\n};\n\n/**\n * Maps an out-of-gamut color into a custom gamut using the CSS Color 4 gamut mapping algorithm.\n * Returns null for sRGB-bounded inputs (hex, rgb, hsl, etc.) — pass through unchanged.\n * Returns the mapped OklabColor otherwise.\n * toLinear: OKLab → unclamped linear target-space channels\n * fromLinear: linear target-space channels → OKLab (for deltaEOK of clipped colors)\n */\nexport const toGamutCustom = (\n input: AnyColor,\n toLinear: LinearConverter,\n fromLinear: FromLinearConverter\n): OklabColor | null => {\n const raw = getRawOklab(input);\n if (raw === null) return null;\n const { l, a, b, alpha } = raw;\n return cssGamutMap(l, a, b, alpha, toLinear, fromLinear);\n};\n","import { oklabToLinear, oklabToLinearInto } from './colorModels/oklab.js';\nimport { srgbFromLinear } from './transfer.js';\n\nconst DEG_TO_RAD = Math.PI / 180;\n\n/**\n * Convert OKLCH to unclamped linear sRGB channels without object allocation.\n * This is the shared expensive step (OKLCH → OKLab → linear sRGB via 3× cbrt + matrix).\n * Use this when you need multiple color spaces from the same color — compute once,\n * then pass to linearToP3Channels / linearToRec2020Channels (from their plugins) to avoid duplicate work.\n *\n * In-gamut sRGB colors have all channels in [0, 1]. Channels outside this range\n * indicate an out-of-gamut color — use as a free gamut check.\n */\nexport const oklchToLinear = (l: number, c: number, h: number): [number, number, number] => {\n const hRad = h * DEG_TO_RAD;\n return oklabToLinear(l, c * Math.cos(hRad), c * Math.sin(hRad));\n};\n\n/** Zero-allocation sibling of oklchToLinear — writes [lr, lg, lb] into `out`. */\nexport const oklchToLinearInto = (out: Float64Array | number[], l: number, c: number, h: number): void => {\n const hRad = h * DEG_TO_RAD;\n oklabToLinearInto(out, l, c * Math.cos(hRad), c * Math.sin(hRad));\n};\n\n/**\n * Convert OKLCH to gamma-encoded sRGB channels without object allocation.\n * Returns [r, g, b] in [0, 1] for in-gamut colors. Out-of-gamut channels may\n * exceed this range — callers are responsible for clamping before byte encoding.\n */\nexport const oklchToRgbChannels = (l: number, c: number, h: number): [number, number, number] => {\n const [r, g, b] = oklchToLinear(l, c, h);\n return [srgbFromLinear(r), srgbFromLinear(g), srgbFromLinear(b)];\n};\n\n/** Zero-allocation sibling of oklchToRgbChannels — writes [r, g, b] (gamma-encoded, 0–1) into `out`. */\nexport const oklchToRgbChannelsInto = (out: Float64Array | number[], l: number, c: number, h: number): void => {\n oklchToLinearInto(out, l, c, h);\n out[0] = srgbFromLinear(out[0]!);\n out[1] = srgbFromLinear(out[1]!);\n out[2] = srgbFromLinear(out[2]!);\n};\n\n/**\n * Convert OKLCH to both linear and gamma-encoded sRGB channels in a single pass.\n * Avoids recomputing the expensive OKLCH → OKLab → linear step when you need both.\n *\n * Linear channels are useful for gamut checks (all in [0,1] = in sRGB gamut)\n * and as input to P3/Rec2020 conversion matrices.\n * Gamma channels are ready for display on an sRGB canvas (still need clamping for out-of-gamut).\n *\n * Returns [[lr, lg, lb], [sr, sg, sb]] — both in [0, 1] for in-gamut colors.\n */\nexport const oklchToLinearAndSrgb = (\n l: number,\n c: number,\n h: number\n): [[number, number, number], [number, number, number]] => {\n const [lr, lg, lb] = oklchToLinear(l, c, h);\n return [\n [lr, lg, lb],\n [srgbFromLinear(lr), srgbFromLinear(lg), srgbFromLinear(lb)],\n ];\n};\n\n/**\n * Zero-allocation sibling of oklchToLinearAndSrgb — writes linear channels into `linOut`\n * and gamma-encoded sRGB channels into `srgbOut`. The two buffers must be distinct.\n */\nexport const oklchToLinearAndSrgbInto = (\n linOut: Float64Array | number[],\n srgbOut: Float64Array | number[],\n l: number,\n c: number,\n h: number\n): void => {\n oklchToLinearInto(linOut, l, c, h);\n srgbOut[0] = srgbFromLinear(linOut[0]!);\n srgbOut[1] = srgbFromLinear(linOut[1]!);\n srgbOut[2] = srgbFromLinear(linOut[2]!);\n};\n"]} |
| 'use strict';var chunkBBEOVRYB_cjs=require('./chunk-BBEOVRYB.cjs'),chunkIHOZOJHA_cjs=require('./chunk-IHOZOJHA.cjs'),chunkX5FCFNQN_cjs=require('./chunk-X5FCFNQN.cjs'),chunkEXPXWBLP_cjs=require('./chunk-EXPXWBLP.cjs');var K=/^oklch\(\s*([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,q=/^oklab\(\s*([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(%?)\s+([+-]?\d*\.?\d+)(%?)\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,C=e=>{if(typeof e=="object"&&e!==null){let r=e;if("l"in r&&"a"in r&&"b"in r&&r.colorSpace!=="lab"&&!("c"in r)&&!("r"in r)){let n=e;if(typeof n.l=="number"&&typeof n.a=="number"&&typeof n.b=="number"&&typeof n.alpha=="number")return {l:n.l,a:n.a,b:n.b,alpha:n.alpha}}if("l"in r&&"c"in r&&"h"in r&&r.colorSpace!=="lch"&&!("a"in r)&&!("r"in r)){let n=e;if(typeof n.l=="number"&&typeof n.c=="number"&&typeof n.h=="number"){let o=n.h*Math.PI/180;return {l:n.l,a:n.c*Math.cos(o),b:n.c*Math.sin(o),alpha:n.alpha}}}if(r.colorSpace==="lab"){let n=e;if(typeof n.l!="number"||typeof n.a!="number"||typeof n.b!="number")return null;let{x:o,y:t,z:b}=chunkIHOZOJHA_cjs.d(n),[u,l,p]=chunkIHOZOJHA_cjs.b(o,t,b),[m,d,k]=chunkBBEOVRYB_cjs.a(u,l,p);return {l:m,a:d,b:k,alpha:typeof n.alpha=="number"?n.alpha:1}}return null}if(typeof e=="string"){let r=K.exec(e);if(r){let n=r[2]?Number(r[1])/100:Number(r[1]),o=r[4]?Number(r[3])*.004:Number(r[3]),t=r[6]?.toLowerCase()??"deg",u=Number(r[5])*(chunkEXPXWBLP_cjs.d[t]??1)*Math.PI/180,l=r[7]===void 0?1:Number(r[7])/(r[8]?100:1);return {l:n,a:o*Math.cos(u),b:o*Math.sin(u),alpha:l}}if(r=q.exec(e),r){let n=r[2]?Number(r[1])/100:Number(r[1]),o=r[4]?Number(r[3])*.004:Number(r[3]),t=r[6]?Number(r[5])*.004:Number(r[5]),b=r[7]===void 0?1:Number(r[7])/(r[8]?100:1);return {l:n,a:o,b:t,alpha:b}}return null}return null},c=5e-4,D=(e,r,n)=>e>=-c&&e<=1+c&&r>=-c&&r<=1+c&&n>=-c&&n<=1+c,O=(e,r,n)=>e>=0&&e<=1&&r>=0&&r<=1&&n>=0&&n<=1,Q=e=>{let r=C(e);if(r===null)return true;let[n,o,t]=chunkBBEOVRYB_cjs.f(r.l,r.a,r.b);return D(n,o,t)},E=.02,U=1e-4,F=(e,r)=>{let n=e[0]-r[0],o=e[1]-r[1],t=e[2]-r[2];return Math.sqrt(n*n+o*o+t*t)},_=(e,r,n,o,t,b)=>{if(e>=1)return {l:1,a:0,b:0,alpha:o};if(e<=0)return {l:0,a:0,b:0,alpha:o};let[u,l,p]=t(e,r,n);if(O(u,l,p))return {l:e,a:r,b:n,alpha:o};let m=b(chunkEXPXWBLP_cjs.a(u,0,1),chunkEXPXWBLP_cjs.a(l,0,1),chunkEXPXWBLP_cjs.a(p,0,1));if(F(m,[e,r,n])<=E)return {l:m[0],a:m[1],b:m[2],alpha:o};let d=Math.atan2(n,r),k=Math.sqrt(r*r+n*n),f=0,L=k,M=true,y=m;for(;L-f>U;){let i=(f+L)/2,N=i*Math.cos(d),x=i*Math.sin(d),[A,T,R]=t(e,N,x);if(M&&O(A,T,R)){f=i;continue}let I=b(chunkEXPXWBLP_cjs.a(A,0,1),chunkEXPXWBLP_cjs.a(T,0,1),chunkEXPXWBLP_cjs.a(R,0,1));y=I,F(I,[e,N,x])<=E?(f=i,M=false):L=i;}return {l:y[0],a:y[1],b:y[2],alpha:o}},V=e=>{let r=C(e);if(r===null)return null;let{l:n,a:o,b:t,alpha:b}=r;return _(n,o,t,b,chunkBBEOVRYB_cjs.f,chunkBBEOVRYB_cjs.a)},W=(e,r)=>{let n=C(e);if(n===null)return true;let[o,t,b]=r(n.l,n.a,n.b);return D(o,t,b)},Y=(e,r,n)=>{let o=C(e);if(o===null)return null;let{l:t,a:b,b:u,alpha:l}=o;return _(t,b,u,l,r,n)};var P=Math.PI/180,j=(e,r,n)=>{let o=n*P;return chunkBBEOVRYB_cjs.f(e,r*Math.cos(o),r*Math.sin(o))},z=(e,r,n,o)=>{let t=o*P;chunkBBEOVRYB_cjs.e(e,r,n*Math.cos(t),n*Math.sin(t));},er=(e,r,n)=>{let[o,t,b]=j(e,r,n);return [chunkX5FCFNQN_cjs.b(o),chunkX5FCFNQN_cjs.b(t),chunkX5FCFNQN_cjs.b(b)]},or=(e,r,n,o)=>{z(e,r,n,o),e[0]=chunkX5FCFNQN_cjs.b(e[0]),e[1]=chunkX5FCFNQN_cjs.b(e[1]),e[2]=chunkX5FCFNQN_cjs.b(e[2]);},tr=(e,r,n)=>{let[o,t,b]=j(e,r,n);return [[o,t,b],[chunkX5FCFNQN_cjs.b(o),chunkX5FCFNQN_cjs.b(t),chunkX5FCFNQN_cjs.b(b)]]},br=(e,r,n,o,t)=>{z(e,n,o,t),r[0]=chunkX5FCFNQN_cjs.b(e[0]),r[1]=chunkX5FCFNQN_cjs.b(e[1]),r[2]=chunkX5FCFNQN_cjs.b(e[2]);};exports.a=Q;exports.b=V;exports.c=W;exports.d=Y;exports.e=j;exports.f=z;exports.g=er;exports.h=or;exports.i=tr;exports.j=br;//# sourceMappingURL=chunk-EPG4VVQB.cjs.map | ||
| //# sourceMappingURL=chunk-EPG4VVQB.cjs.map |
| {"version":3,"sources":["../src/gamut.ts","../src/channels.ts"],"names":["OKLCH_RE","OKLAB_RE","getRawOklab","input","obj","c","hRad","x","y","z","labToXyz","lr","lg","lb","xyzD50ToLinearSrgb","ol","oa","ob","linearSrgbToOklab","m","l","unit","ANGLE_UNITS","alpha","a","b","EPS","isLinearInGamut","r","g","strictInGamut","inGamutSrgb","raw","oklabToLinear","JND","GAMUT_EPSILON","deltaEOK","lab1","lab2","dl","da","db","cssGamutMap","toLinear","fromLinear","r0","g0","b0","clip0","clamp","C","lo","hi","minInGamut","lastClip","mid","ma","mb","clipOklab","toGamutSrgbRaw","inGamutCustom","toGamutCustom","DEG_TO_RAD","oklchToLinear","h","oklchToLinearInto","out","oklabToLinearInto","oklchToRgbChannels","srgbFromLinear","oklchToRgbChannelsInto","oklchToLinearAndSrgb","oklchToLinearAndSrgbInto","linOut","srgbOut"],"mappings":"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","file":"chunk-EPG4VVQB.cjs","sourcesContent":["import { labToXyz } from './colorModels/lab.js';\nimport { linearSrgbToOklab, oklabToLinear } from './colorModels/oklab.js';\nimport { xyzD50ToLinearSrgb } from './colorModels/xyz.js';\nimport { ANGLE_UNITS, clamp } from './helpers.js';\nimport type { AnyColor, LabColor, OklabColor, OklchColor } from './types.js';\n\nconst OKLCH_RE =\n /^oklch\\(\\s*([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nconst OKLAB_RE =\n /^oklab\\(\\s*([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(%?)\\s+([+-]?\\d*\\.?\\d+)(%?)\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\n/**\n * Extract raw OKLab {l, a, b, alpha} without clamping.\n * Returns null for inputs that are already sRGB-bounded (hex, rgb, hsl, hsv, hwb, etc.).\n */\nconst getRawOklab = (input: AnyColor): { l: number; a: number; b: number; alpha: number } | null => {\n if (typeof input === 'object' && input !== null) {\n const obj = input as unknown as Record<string, unknown>;\n // OklabColor: l/a/b present, no 'lab' colorSpace brand\n if ('l' in obj && 'a' in obj && 'b' in obj && obj.colorSpace !== 'lab' && !('c' in obj) && !('r' in obj)) {\n const c = input as OklabColor;\n if (\n typeof c.l === 'number' &&\n typeof c.a === 'number' &&\n typeof c.b === 'number' &&\n typeof c.alpha === 'number'\n ) {\n return { l: c.l, a: c.a, b: c.b, alpha: c.alpha };\n }\n }\n // OklchColor: l/c/h present, no 'lch' colorSpace brand\n if ('l' in obj && 'c' in obj && 'h' in obj && obj.colorSpace !== 'lch' && !('a' in obj) && !('r' in obj)) {\n const c = input as OklchColor;\n if (typeof c.l === 'number' && typeof c.c === 'number' && typeof c.h === 'number') {\n const hRad = (c.h * Math.PI) / 180;\n return { l: c.l, a: c.c * Math.cos(hRad), b: c.c * Math.sin(hRad), alpha: c.alpha };\n }\n }\n // LabColor: convert Lab (D50) → XYZ D50 → D65 → linear sRGB → OKLab (no clamping)\n if (obj.colorSpace === 'lab') {\n const c = input as LabColor;\n if (typeof c.l !== 'number' || typeof c.a !== 'number' || typeof c.b !== 'number') return null;\n const { x, y, z } = labToXyz(c);\n const [lr, lg, lb] = xyzD50ToLinearSrgb(x, y, z);\n const [ol, oa, ob] = linearSrgbToOklab(lr, lg, lb);\n return { l: ol, a: oa, b: ob, alpha: typeof c.alpha === 'number' ? c.alpha : 1 };\n }\n return null;\n }\n\n if (typeof input === 'string') {\n let m = OKLCH_RE.exec(input);\n if (m) {\n const l = m[2] ? Number(m[1]) / 100 : Number(m[1]);\n const c = m[4] ? Number(m[3]) * 0.004 : Number(m[3]);\n const unit = m[6]?.toLowerCase() ?? 'deg';\n const hDeg = Number(m[5]) * (ANGLE_UNITS[unit] ?? 1);\n const hRad = (hDeg * Math.PI) / 180;\n const alpha = m[7] === undefined ? 1 : Number(m[7]) / (m[8] ? 100 : 1);\n return { l, a: c * Math.cos(hRad), b: c * Math.sin(hRad), alpha };\n }\n m = OKLAB_RE.exec(input);\n if (m) {\n const l = m[2] ? Number(m[1]) / 100 : Number(m[1]);\n const a = m[4] ? Number(m[3]) * 0.004 : Number(m[3]);\n const b = m[6] ? Number(m[5]) * 0.004 : Number(m[5]);\n const alpha = m[7] === undefined ? 1 : Number(m[7]) / (m[8] ? 100 : 1);\n return { l, a, b, alpha };\n }\n return null;\n }\n\n return null;\n};\n\n// Tolerance for inGamut* checks — NOT used in gamut mapping, which uses strict bounds.\n// Covers two sources of error:\n// 1. Matrix floating-point noise: accumulated cbrt + matrix error is ~3e-10\n// 2. Value rounding: OKLCH stored at 4 dp (L, C) / 2 dp (H) produces linear-sRGB\n// deviations up to 4.4e-4 on sRGB boundary colors (exhaustive scan of all 256^3 sRGB\n// values confirms this). EPS = 5e-4 absorbs all rounding artifacts while staying below\n// ~1.6 gamma-encoded steps (imperceptible), and correctly rejects genuine out-of-gamut\n// colors (typically 1e-3 and above).\nconst EPS = 5e-4;\n\nconst isLinearInGamut = (r: number, g: number, b: number): boolean =>\n r >= -EPS && r <= 1 + EPS && g >= -EPS && g <= 1 + EPS && b >= -EPS && b <= 1 + EPS;\n\nconst strictInGamut = (r: number, g: number, b: number): boolean =>\n r >= 0 && r <= 1 && g >= 0 && g <= 1 && b >= 0 && b <= 1;\n\n/**\n * Returns true if the color is within the sRGB gamut.\n * Always true for hex, rgb, hsl, hsv, and hwb inputs.\n * For oklch/oklab inputs, checks whether the computed linear sRGB channels are in [0, 1].\n */\nexport const inGamutSrgb = (input: AnyColor): boolean => {\n const raw = getRawOklab(input);\n if (raw === null) return true;\n const [r, g, b] = oklabToLinear(raw.l, raw.a, raw.b);\n return isLinearInGamut(r, g, b);\n};\n\n// CSS Color 4 gamut mapping constants\n// https://www.w3.org/TR/css-color-4/#css-gamut-mapping\nconst JND = 0.02;\nconst GAMUT_EPSILON = 0.0001;\n\n/** Euclidean distance in OKLab — the CSS Color 4 deltaEOK metric. */\nconst deltaEOK = (lab1: readonly [number, number, number], lab2: readonly [number, number, number]): number => {\n const dl = lab1[0] - lab2[0];\n const da = lab1[1] - lab2[1];\n const db = lab1[2] - lab2[2];\n return Math.sqrt(dl * dl + da * da + db * db);\n};\n\nexport type LinearConverter = (l: number, a: number, b: number) => [number, number, number];\nexport type FromLinearConverter = (r: number, g: number, b: number) => [number, number, number];\n\n/**\n * CSS Color 4 gamut mapping algorithm.\n * Binary-searches for the highest chroma where clip(color) is within JND (0.02 deltaEOK)\n * of the chroma-reduced color, then returns the clipped result.\n * This preserves lightness and hue while accepting only perceptually negligible clip error.\n *\n * toLinear: OKLab → unclamped linear target-space channels\n * fromLinear: linear target-space channels → OKLab (used to measure deltaEOK of clipped color)\n */\nconst cssGamutMap = (\n l: number,\n a: number,\n b: number,\n alpha: number,\n toLinear: LinearConverter,\n fromLinear: FromLinearConverter\n): OklabColor => {\n if (l >= 1) return { l: 1, a: 0, b: 0, alpha };\n if (l <= 0) return { l: 0, a: 0, b: 0, alpha };\n\n const [r0, g0, b0] = toLinear(l, a, b);\n if (strictInGamut(r0, g0, b0)) return { l, a, b, alpha };\n\n // Early exit: if the simple clip is already within JND, use it directly\n const clip0 = fromLinear(clamp(r0, 0, 1), clamp(g0, 0, 1), clamp(b0, 0, 1));\n if (deltaEOK(clip0, [l, a, b]) <= JND) {\n return { l: clip0[0], a: clip0[1], b: clip0[2], alpha };\n }\n\n const hRad = Math.atan2(b, a);\n const C = Math.sqrt(a * a + b * b);\n let lo = 0;\n let hi = C;\n let minInGamut = true;\n let lastClip: readonly [number, number, number] = clip0;\n\n while (hi - lo > GAMUT_EPSILON) {\n const mid = (lo + hi) / 2;\n const ma = mid * Math.cos(hRad);\n const mb = mid * Math.sin(hRad);\n const [lr, lg, lb] = toLinear(l, ma, mb);\n\n if (minInGamut && strictInGamut(lr, lg, lb)) {\n lo = mid;\n continue;\n }\n\n const clipOklab = fromLinear(clamp(lr, 0, 1), clamp(lg, 0, 1), clamp(lb, 0, 1));\n lastClip = clipOklab;\n const E = deltaEOK(clipOklab, [l, ma, mb]);\n\n if (E <= JND) {\n lo = mid;\n minInGamut = false;\n } else {\n hi = mid;\n }\n }\n\n return { l: lastClip[0], a: lastClip[1], b: lastClip[2], alpha };\n};\n\n/**\n * Maps an out-of-sRGB-gamut color using the CSS Color 4 algorithm.\n * Returns null for sRGB-bounded inputs (hex, rgb, hsl, etc.) — pass through unchanged.\n * Returns the mapped OklabColor otherwise.\n */\nexport const toGamutSrgbRaw = (input: AnyColor): OklabColor | null => {\n const raw = getRawOklab(input);\n if (raw === null) return null;\n const { l, a, b, alpha } = raw;\n return cssGamutMap(l, a, b, alpha, oklabToLinear, linearSrgbToOklab);\n};\n\nexport const inGamutCustom = (input: AnyColor, toLinear: LinearConverter): boolean => {\n const raw = getRawOklab(input);\n // sRGB-bounded inputs (hex, rgb, hsl, etc.) are always inside the wider P3/Rec.2020 gamut\n if (raw === null) return true;\n const [r, g, b] = toLinear(raw.l, raw.a, raw.b);\n return isLinearInGamut(r, g, b);\n};\n\n/**\n * Maps an out-of-gamut color into a custom gamut using the CSS Color 4 gamut mapping algorithm.\n * Returns null for sRGB-bounded inputs (hex, rgb, hsl, etc.) — pass through unchanged.\n * Returns the mapped OklabColor otherwise.\n * toLinear: OKLab → unclamped linear target-space channels\n * fromLinear: linear target-space channels → OKLab (for deltaEOK of clipped colors)\n */\nexport const toGamutCustom = (\n input: AnyColor,\n toLinear: LinearConverter,\n fromLinear: FromLinearConverter\n): OklabColor | null => {\n const raw = getRawOklab(input);\n if (raw === null) return null;\n const { l, a, b, alpha } = raw;\n return cssGamutMap(l, a, b, alpha, toLinear, fromLinear);\n};\n","import { oklabToLinear, oklabToLinearInto } from './colorModels/oklab.js';\nimport { srgbFromLinear } from './transfer.js';\n\nconst DEG_TO_RAD = Math.PI / 180;\n\n/**\n * Convert OKLCH to unclamped linear sRGB channels without object allocation.\n * This is the shared expensive step (OKLCH → OKLab → linear sRGB via 3× cbrt + matrix).\n * Use this when you need multiple color spaces from the same color — compute once,\n * then pass to linearToP3Channels / linearToRec2020Channels (from their plugins) to avoid duplicate work.\n *\n * In-gamut sRGB colors have all channels in [0, 1]. Channels outside this range\n * indicate an out-of-gamut color — use as a free gamut check.\n */\nexport const oklchToLinear = (l: number, c: number, h: number): [number, number, number] => {\n const hRad = h * DEG_TO_RAD;\n return oklabToLinear(l, c * Math.cos(hRad), c * Math.sin(hRad));\n};\n\n/** Zero-allocation sibling of oklchToLinear — writes [lr, lg, lb] into `out`. */\nexport const oklchToLinearInto = (out: Float64Array | number[], l: number, c: number, h: number): void => {\n const hRad = h * DEG_TO_RAD;\n oklabToLinearInto(out, l, c * Math.cos(hRad), c * Math.sin(hRad));\n};\n\n/**\n * Convert OKLCH to gamma-encoded sRGB channels without object allocation.\n * Returns [r, g, b] in [0, 1] for in-gamut colors. Out-of-gamut channels may\n * exceed this range — callers are responsible for clamping before byte encoding.\n */\nexport const oklchToRgbChannels = (l: number, c: number, h: number): [number, number, number] => {\n const [r, g, b] = oklchToLinear(l, c, h);\n return [srgbFromLinear(r), srgbFromLinear(g), srgbFromLinear(b)];\n};\n\n/** Zero-allocation sibling of oklchToRgbChannels — writes [r, g, b] (gamma-encoded, 0–1) into `out`. */\nexport const oklchToRgbChannelsInto = (out: Float64Array | number[], l: number, c: number, h: number): void => {\n oklchToLinearInto(out, l, c, h);\n out[0] = srgbFromLinear(out[0]!);\n out[1] = srgbFromLinear(out[1]!);\n out[2] = srgbFromLinear(out[2]!);\n};\n\n/**\n * Convert OKLCH to both linear and gamma-encoded sRGB channels in a single pass.\n * Avoids recomputing the expensive OKLCH → OKLab → linear step when you need both.\n *\n * Linear channels are useful for gamut checks (all in [0,1] = in sRGB gamut)\n * and as input to P3/Rec2020 conversion matrices.\n * Gamma channels are ready for display on an sRGB canvas (still need clamping for out-of-gamut).\n *\n * Returns [[lr, lg, lb], [sr, sg, sb]] — both in [0, 1] for in-gamut colors.\n */\nexport const oklchToLinearAndSrgb = (\n l: number,\n c: number,\n h: number\n): [[number, number, number], [number, number, number]] => {\n const [lr, lg, lb] = oklchToLinear(l, c, h);\n return [\n [lr, lg, lb],\n [srgbFromLinear(lr), srgbFromLinear(lg), srgbFromLinear(lb)],\n ];\n};\n\n/**\n * Zero-allocation sibling of oklchToLinearAndSrgb — writes linear channels into `linOut`\n * and gamma-encoded sRGB channels into `srgbOut`. The two buffers must be distinct.\n */\nexport const oklchToLinearAndSrgbInto = (\n linOut: Float64Array | number[],\n srgbOut: Float64Array | number[],\n l: number,\n c: number,\n h: number\n): void => {\n oklchToLinearInto(linOut, l, c, h);\n srgbOut[0] = srgbFromLinear(linOut[0]!);\n srgbOut[1] = srgbFromLinear(linOut[1]!);\n srgbOut[2] = srgbFromLinear(linOut[2]!);\n};\n"]} |
| 'use strict';var o=(n,e,r)=>Math.min(Math.max(n,e),r),t=(n,e=0)=>{let r=10**e;return Math.round(r*n)/r},u=n=>n>=0&&n<360?n:(n%360+360)%360,s={deg:1,grad:.9,turn:360,rad:360/(2*Math.PI)},m=n=>typeof n=="number"&&!Number.isNaN(n)&&Number.isFinite(n),b=n=>typeof n=="number",i=n=>Number.isNaN(n)?0:n,c=n=>typeof n=="object"&&n!==null&&!Array.isArray(n),a=(n,e)=>e.every(r=>r in n);exports.a=o;exports.b=t;exports.c=u;exports.d=s;exports.e=m;exports.f=b;exports.g=i;exports.h=c;exports.i=a;//# sourceMappingURL=chunk-EXPXWBLP.cjs.map | ||
| //# sourceMappingURL=chunk-EXPXWBLP.cjs.map |
| {"version":3,"sources":["../src/helpers.ts"],"names":["clamp","min","max","round","d","p","normalizeHue","h","ANGLE_UNITS","isNumber","isAnyNumber","sanitize","isObject","v","hasKeys","obj","keys","k"],"mappings":"aAAO,IAAMA,CAAAA,CAAQ,CAAC,CAAA,CAAWC,CAAAA,CAAaC,IAAwB,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGD,CAAG,EAAGC,CAAG,CAAA,CAEvFC,CAAAA,CAAQ,CAAC,CAAA,CAAWC,CAAAA,CAAI,IAAc,CACjD,IAAMC,CAAAA,CAAI,EAAA,EAAMD,CAAAA,CAChB,OAAO,KAAK,KAAA,CAAMC,CAAAA,CAAI,CAAC,CAAA,CAAIA,CAC7B,EAIaC,CAAAA,CAAgBC,CAAAA,EAAuBA,CAAAA,EAAK,CAAA,EAAKA,CAAAA,CAAI,GAAA,CAAMA,GAAMA,CAAAA,CAAI,GAAA,CAAO,GAAA,EAAO,GAAA,CAEnFC,CAAAA,CAAsC,CAAE,IAAK,CAAA,CAAG,IAAA,CAAM,EAAA,CAAK,IAAA,CAAM,GAAA,CAAK,GAAA,CAAK,KAAO,CAAA,CAAI,IAAA,CAAK,GAAI,CAAA,CAE/FC,CAAAA,CAAY,GAA4B,OAAO,CAAA,EAAM,QAAA,EAAY,CAAC,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAK,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,CAGtGC,CAAAA,CAAe,GAA4B,OAAO,CAAA,EAAM,QAAA,CAGxDC,CAAAA,CAAY,CAAA,EAAuB,MAAA,CAAO,MAAM,CAAC,CAAA,CAAI,EAAI,CAAA,CAEzDC,CAAAA,CAAYC,GACvB,OAAOA,CAAAA,EAAM,QAAA,EAAYA,CAAAA,GAAM,IAAA,EAAQ,CAAC,MAAM,OAAA,CAAQA,CAAC,CAAA,CAE5CC,CAAAA,CAAU,CAAmBC,CAAAA,CAA8BC,IACtEA,CAAAA,CAAK,KAAA,CAAOC,CAAAA,EAAMA,CAAAA,IAAKF,CAAG","file":"chunk-EXPXWBLP.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 => {\n const p = 10 ** d;\n return Math.round(p * n) / p;\n};\n\n// Normalize hue to [0, 360). Avoids (h + 360) % 360 which can lose precision\n// when h is already in [0, 360) due to binary floating-point subtraction.\nexport const normalizeHue = (h: number): number => (h >= 0 && h < 360 ? h : ((h % 360) + 360) % 360);\n\nexport const ANGLE_UNITS: Record<string, number> = { deg: 1, grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) };\n\nexport const isNumber = (n: unknown): n is number => typeof n === 'number' && !Number.isNaN(n) && Number.isFinite(n);\n\n// Accepts any JS number type (including NaN/±Infinity); use sanitize() before clamping\nexport const isAnyNumber = (n: unknown): n is number => typeof n === 'number';\n\n// Replace NaN with 0; ±Infinity is left for clamp() to handle naturally\nexport const sanitize = (n: number): number => (Number.isNaN(n) ? 0 : 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"]} |
| 'use strict';var chunkEXPXWBLP_cjs=require('./chunk-EXPXWBLP.cjs');var f=r=>({r:chunkEXPXWBLP_cjs.a(r.r,0,255),g:chunkEXPXWBLP_cjs.a(r.g,0,255),b:chunkEXPXWBLP_cjs.a(r.b,0,255),alpha:chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.b(r.alpha,3),0,1)}),y=r=>{if(!chunkEXPXWBLP_cjs.h(r))return null;let n=r.colorSpace;if(n==="display-p3"||n==="rec2020"||!chunkEXPXWBLP_cjs.i(r,["r","g","b"]))return null;let{r:t,g:a,b:e,alpha:s=1}=r;return !chunkEXPXWBLP_cjs.f(t)||!chunkEXPXWBLP_cjs.f(a)||!chunkEXPXWBLP_cjs.f(e)||!chunkEXPXWBLP_cjs.f(s)?null:f({r:chunkEXPXWBLP_cjs.g(t),g:chunkEXPXWBLP_cjs.g(a),b:chunkEXPXWBLP_cjs.g(e),alpha:chunkEXPXWBLP_cjs.g(s)})},o="[+-]?\\d*\\.?\\d+",k=new RegExp(`^rgba?\\(\\s*(${o})(%?)\\s*(?:,\\s*(${o})(%?)\\s*,\\s*(${o})(%?)(?:\\s*,\\s*(${o})(%?))?\\s*|\\s+(${o})(%?)\\s+(${o})(%?)(?:\\s*/\\s*(${o})(%?))?\\s*)\\)$`,"i"),x=r=>{if(typeof r!="string")return null;let n=k.exec(r.trim());if(!n)return null;let t=!!n[2],a=t?Number(n[1])/100*255:Number(n[1]),e=n[3]??n[9],s=!!(n[4]??n[10]),w=s?Number(e)/100*255:Number(e),b=n[5]??n[11],p=!!(n[6]??n[12]),N=p?Number(b)/100*255:Number(b);if(t!==s||s!==p)return null;let g=n[7]??n[13],$=!!(n[8]??n[14]),h=g===void 0?1:Number(g)/($?100:1);return f({r:a,g:w,b:N,alpha:h})};exports.a=f;exports.b=y;exports.c=x;//# sourceMappingURL=chunk-GYCEEHZT.cjs.map | ||
| //# sourceMappingURL=chunk-GYCEEHZT.cjs.map |
| {"version":3,"sources":["../src/colorModels/rgb.ts"],"names":["clampRgb","rgb","clamp","round","parseRgbObject","input","isObject","cs","hasKeys","r","g","b","alpha","isAnyNumber","sanitize","N","RGB_RE","parseRgbString","m","rPct","gRaw","gPct","bRaw","bPct","rawA","aPct"],"mappings":"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","file":"chunk-GYCEEHZT.cjs","sourcesContent":["import { clamp, hasKeys, isAnyNumber, isObject, round, sanitize } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nexport const clampRgb = (rgb: RgbColor): RgbColor => ({\n r: clamp(rgb.r, 0, 255),\n g: clamp(rgb.g, 0, 255),\n b: clamp(rgb.b, 0, 255),\n alpha: clamp(round(rgb.alpha, 3), 0, 1),\n});\n\nexport const parseRgbObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n const cs = (input as { colorSpace?: unknown }).colorSpace;\n if (cs === 'display-p3' || cs === 'rec2020') return null;\n if (!hasKeys(input, ['r', 'g', 'b'])) return null;\n const { r, g, b, alpha = 1 } = input as { r: unknown; g: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(r) || !isAnyNumber(g) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return clampRgb({ r: sanitize(r), g: sanitize(g), b: sanitize(b), alpha: sanitize(alpha) });\n};\n\n// Matches both legacy comma syntax: rgb(255, 0, 0) / rgba(255, 0, 0, 0.5)\n// and modern space syntax: rgb(255 0 0) / rgb(255 0 0 / 0.5)\n// Also supports percentage-based channels: rgb(100%, 0%, 0%) / rgb(100% 0% 0%)\nconst N = '[+-]?\\\\d*\\\\.?\\\\d+';\nconst RGB_RE = new RegExp(\n `^rgba?\\\\(\\\\s*(${N})(%?)\\\\s*(?:` +\n // comma branch: r,g,b and optional alpha\n `,\\\\s*(${N})(%?)\\\\s*,\\\\s*(${N})(%?)(?:\\\\s*,\\\\s*(${N})(%?))?\\\\s*` +\n `|` +\n // space branch: r g b and optional /alpha\n `\\\\s+(${N})(%?)\\\\s+(${N})(%?)(?:\\\\s*/\\\\s*(${N})(%?))?\\\\s*` +\n `)\\\\)$`,\n 'i'\n);\n\nexport const parseRgbString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = RGB_RE.exec(input.trim());\n if (!m) return null;\n\n // comma branch: m[1]r m[2]r% m[3]g m[4]g% m[5]b m[6]b% m[7]a m[8]a%\n // space branch: m[1]r m[2]r% m[9]g m[10]g% m[11]b m[12]b% m[13]a m[14]a%\n const rPct = !!m[2];\n const r = rPct ? (Number(m[1]) / 100) * 255 : Number(m[1]);\n\n const gRaw = m[3] ?? m[9];\n const gPct = !!(m[4] ?? m[10]);\n const g = gPct ? (Number(gRaw) / 100) * 255 : Number(gRaw);\n\n const bRaw = m[5] ?? m[11];\n const bPct = !!(m[6] ?? m[12]);\n const b = bPct ? (Number(bRaw) / 100) * 255 : Number(bRaw);\n\n // CSS requires r/g/b to be all-numbers or all-percentages, not mixed\n if (rPct !== gPct || gPct !== bPct) return null;\n\n const rawA = m[7] ?? m[13];\n const aPct = !!(m[8] ?? m[14]);\n const alpha = rawA === undefined ? 1 : Number(rawA) / (aPct ? 100 : 1);\n\n return clampRgb({ r, g, b, alpha });\n};\n"]} |
| import {a,b as b$1}from'./chunk-FXCFKFXK.mjs';import {a as a$2}from'./chunk-OD65R6MQ.mjs';import {a as a$1,b,h,i,e,f,g}from'./chunk-JFPP44S3.mjs';var Y=96.4295675298354,Z=100,q=82.51046025104603,F=({r:o,g:t,b:r,alpha:s})=>{let n=a(o/255),a$2=a(t/255),c=a(r/255),e=100*(.4123907992659595*n+.35758433938387796*a$2+.1804807884018343*c),l=100*(.21263900587151036*n+.7151686787677559*a$2+.07219231536073371*c),p=100*(.01933081871559185*n+.11919477979462599*a$2+.9505321522496606*c);return {x:1.0479297925449969*e+.022946870601609652*l-.05019226628920524*p,y:.02962780877005599*e+.9904344267538799*l-.017073799063418826*p,z:-0.009243040646204504*e+.015055191490298152*l+.7518742814281371*p,alpha:a$1(b(s,3),0,1)}},s0=.955473421488075,a0=-0.02309845494876471,c0=.06325924320057072,l0=-0.0283697093338637,e0=1.0099953980813041,b0=.021041441191917323,p0=.012314014864481998,u0=-0.020507649298898964,m0=1.330365926242124,h0=.032409699419045215,C0=-0.015373831775700935,g0=-0.004986107602930032,y0=-0.009692436362808799,i0=.018759675015077207,d0=.0004155505740717561,x0=.000556300796969936,X0=-0.002039769588889766,f0=.010569715142428786;var v=(o,t,r)=>{let s=s0*o+a0*t+c0*r,n=l0*o+e0*t+b0*r,a=p0*o+u0*t+m0*r;return [h0*s+C0*n+g0*a,y0*s+i0*n+d0*a,x0*s+X0*n+f0*a]},U=({x:o,y:t,z:r,alpha:s})=>{let[n,a,c]=v(o,t,r);return a$2({r:b$1(n)*255,g:b$1(a)*255,b:b$1(c)*255,alpha:s})},_0=({x:o,y:t,z:r,alpha:s})=>{let[n,a,c]=v(o,t,r);return {r:b$1(n)*255,g:b$1(a)*255,b:b$1(c)*255,alpha:s}},w0=o=>{if(!h(o)||!i(o,["x","y","z"]))return null;let{x:t,y:r,z:s,alpha:n=1}=o;return !e(t)||!e(r)||!e(s)||!e(n)?null:_0({x:t,y:r,z:s,alpha:a$1(n,0,1)})};var R0=.3127/.329*100,L0=100,z0=(1-.3127-.329)/.329*100,G=216/24389,L=24389/27,y=o=>o>G?Math.cbrt(o):(L*o+16)/116,M0=({x:o,y:t,z:r,alpha:s})=>{let n=y(t/Z);return {l:116*n-16,a:500*(y(o/Y)-n)||0,b:200*(n-y(r/q))||0,alpha:b(s,3),colorSpace:"lab"}},T0=({l:o,a:t,b:r,alpha:s})=>{let n=(o+16)/116,a=t/500+n,c=n-r/200;return {x:(a**3>G?a**3:(116*a-16)/L)*Y,y:(o>8?n**3:o/L)*Z,z:(c**3>G?c**3:(116*c-16)/L)*q,alpha:s}},G0=o=>M0(F(o)),N0=({r:o,g:t,b:r,alpha:s})=>{let n=a(o/255),a$1=a(t/255),c=a(r/255),e=100*(.4123907992659595*n+.35758433938387796*a$1+.1804807884018343*c),l=100*(.21263900587151036*n+.7151686787677559*a$1+.07219231536073371*c),p=100*(.01933081871559185*n+.11919477979462599*a$1+.9505321522496606*c),i=y(l/L0);return {l:116*i-16,a:500*(y(e/R0)-i)||0,b:200*(i-y(p/z0))||0,alpha:b(s,3),colorSpace:"lab"}},j0=(o,t)=>{let{l:r,a:s,b:n}=o,{l:a,a:c,b:e}=t,l=Math.PI/180,p=180/Math.PI,i=Math.sqrt(s**2+n**2),J=Math.sqrt(c**2+e**2),N=((i+J)/2)**7,j=.5*(1-Math.sqrt(N/(N+25**7))),z=s*(1+j),M=c*(1+j),T=Math.sqrt(z**2+n**2),B=Math.sqrt(M**2+e**2),D=(T+B)/2,S=z===0&&n===0?0:Math.atan2(n,z)*p,k=M===0&&e===0?0:Math.atan2(e,M)*p,C=S<0?S+360:S,g=k<0?k+360:k,w=g-C,W=Math.abs(g-C);W>180&&g<=C?w+=360:W>180&&g>C&&(w-=360);let A=(r+a)/2,b=C+g;W<=180?b/=2:b=(C+g<360?b+360:b-360)/2;let Q=1-.17*Math.cos(l*(b-30))+.24*Math.cos(2*l*b)+.32*Math.cos(l*(3*b+6))-.2*Math.cos(l*(4*b-63)),V=a-r,O=B-T,P=2*Math.sin(l*w/2)*Math.sqrt(T*B),o0=1+.015*(A-50)**2/Math.sqrt(20+(A-50)**2),I=1+.045*D,E=1+.015*D*Q,H=D**7,n0=2*Math.sqrt(H/(H+25**7)),t0=30*Math.exp(-(((b-275)/25)**2)),r0=-n0*Math.sin(2*l*t0);return Math.sqrt((V/o0)**2+(O/I)**2+(P/E)**2+r0*(O/I)*(P/E))},$=o=>U(T0(o)),B0=/^lab\(\s*([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)\s+([+-]?\d*\.?\d+)\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,A0=o=>{if(typeof o!="string")return null;let t=B0.exec(o.trim());if(!t)return null;let r=t[4]===void 0?1:Number(t[4])/(t[5]?100:1);return $({l:a$1(Number(t[1]),0,100),a:Number(t[2]),b:Number(t[3]),alpha:a$1(r,0,1)})},O0=o=>{if(!h(o)||o.colorSpace!=="lab"||!i(o,["l","a","b"]))return null;let{l:t,a:r,b:s,alpha:n=1}=o;return !f(t)||!f(r)||!f(s)||!f(n)?null:$({l:a$1(g(t),0,100),a:g(r),b:g(s),alpha:a$1(g(n),0,1)})};export{F as a,v as b,w0 as c,T0 as d,G0 as e,N0 as f,j0 as g,$ as h,A0 as i,O0 as j};//# sourceMappingURL=chunk-HFDTK2ZP.mjs.map | ||
| //# sourceMappingURL=chunk-HFDTK2ZP.mjs.map |
| {"version":3,"sources":["../src/colorModels/xyz.ts","../src/colorModels/lab.ts"],"names":["D50_WX","D50_WY","D50_WZ","rgbToXyz","r","g","b","alpha","lr","srgbToLinear","lg","lb","xd65","yd65","zd65","clamp","round","B_XR","B_XG","B_XB","B_YR","B_YG","B_YB","B_ZR","B_ZG","B_ZB","X_RX","X_RY","X_RZ","X_GX","X_GY","X_GZ","X_BX","X_BY","X_BZ","xyzD50ToLinearSrgb","x","y","z","xyzToRgb","clampRgb","srgbFromLinear","xyzToRgbUnclamped","parseXyzObject","input","isObject","hasKeys","isNumber","D65_WX","D65_WY","D65_WZ","EPSILON","KAPPA","f","t","xyzToLab","fy","labToXyz","l","a","fx","fz","rgbToLab","rgb","rgbToLabD65","deltaE2000","lab1","lab2","L1","a1","b1","L2","a2","b2","rad","deg","C1","C2","Cab","G","a1p","a2p","C1p","C2p","Cp","h1p","h2p","h1","h2","dhp","absDh","Lm","Hm","T","dLp","dCp","dHp","SL","SC","SH","RC7","RC","dTheta","RT","labToRgb","lab","LAB_RE","parseLabString","m","parseLabObject","isAnyNumber","sanitize"],"mappings":"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","file":"chunk-HFDTK2ZP.mjs","sourcesContent":["import { clamp, hasKeys, isNumber, isObject, round } from '../helpers.js';\nimport { srgbFromLinear, srgbToLinear } from '../transfer.js';\nimport type { RgbColor, XyzColor } from '../types.js';\nimport { clampRgb } from './rgb.js';\n\n// D50 white point (CSS Color 4: xy = 0.3457/0.3585)\nexport const D50_WX = 96.42956752983539;\nexport const D50_WY = 100;\nexport const D50_WZ = 82.51046025104603;\n\nexport const rgbToXyz = ({ r, g, b, alpha }: RgbColor): XyzColor => {\n const lr = srgbToLinear(r / 255),\n lg = srgbToLinear(g / 255),\n lb = srgbToLinear(b / 255);\n // sRGB → XYZ D65 (CSS Color 4 exact rational fractions)\n const xd65 = 100 * (0.41239079926595951 * lr + 0.35758433938387796 * lg + 0.18048078840183429 * lb);\n const yd65 = 100 * (0.21263900587151036 * lr + 0.71516867876775592 * lg + 0.072192315360733714 * lb);\n const zd65 = 100 * (0.019330818715591849 * lr + 0.11919477979462599 * lg + 0.95053215224966059 * lb);\n // D65 → D50 (Bradford, CSS Color 4)\n return {\n x: 1.0479297925449969 * xd65 + 0.022946870601609652 * yd65 - 0.05019226628920524 * zd65,\n y: 0.02962780877005599 * xd65 + 0.9904344267538799 * yd65 - 0.017073799063418826 * zd65,\n z: -0.009243040646204504 * xd65 + 0.015055191490298152 * yd65 + 0.7518742814281371 * zd65,\n alpha: clamp(round(alpha, 3), 0, 1),\n };\n};\n\n// Bradford D50→D65 and XYZ(D65)→linear sRGB matrices (CSS Color 4).\n// Shared between the allocating and *Into variants to keep coefficients in one place.\nconst B_XR = 0.955473421488075,\n B_XG = -0.02309845494876471,\n B_XB = 0.06325924320057072;\nconst B_YR = -0.0283697093338637,\n B_YG = 1.0099953980813041,\n B_YB = 0.021041441191917323;\nconst B_ZR = 0.012314014864481998,\n B_ZG = -0.020507649298898964,\n B_ZB = 1.330365926242124;\nconst X_RX = 0.032409699419045213,\n X_RY = -0.015373831775700935,\n X_RZ = -0.0049861076029300327;\nconst X_GX = -0.0096924363628087984,\n X_GY = 0.018759675015077206,\n X_GZ = 0.00041555057407175612;\nconst X_BX = 0.00055630079696993608,\n X_BY = -0.0020397695888897657,\n X_BZ = 0.010569715142428786;\n\n/** Zero-allocation sibling of xyzD50ToLinearSrgb — writes [lr, lg, lb] into `out`. */\nexport const xyzD50ToLinearSrgbInto = (out: Float64Array | number[], x: number, y: number, z: number): void => {\n const xd65 = B_XR * x + B_XG * y + B_XB * z;\n const yd65 = B_YR * x + B_YG * y + B_YB * z;\n const zd65 = B_ZR * x + B_ZG * y + B_ZB * z;\n out[0] = X_RX * xd65 + X_RY * yd65 + X_RZ * zd65;\n out[1] = X_GX * xd65 + X_GY * yd65 + X_GZ * zd65;\n out[2] = X_BX * xd65 + X_BY * yd65 + X_BZ * zd65;\n};\n\n/** XYZ D50 → linear sRGB (no gamma, no clamping). x/y/z are in 0–100 scale. */\nexport const xyzD50ToLinearSrgb = (x: number, y: number, z: number): [number, number, number] => {\n const xd65 = B_XR * x + B_XG * y + B_XB * z;\n const yd65 = B_YR * x + B_YG * y + B_YB * z;\n const zd65 = B_ZR * x + B_ZG * y + B_ZB * z;\n return [\n X_RX * xd65 + X_RY * yd65 + X_RZ * zd65,\n X_GX * xd65 + X_GY * yd65 + X_GZ * zd65,\n X_BX * xd65 + X_BY * yd65 + X_BZ * zd65,\n ];\n};\n\nexport const xyzToRgb = ({ x, y, z, alpha }: XyzColor): RgbColor => {\n const [lr, lg, lb] = xyzD50ToLinearSrgb(x, y, z);\n return clampRgb({\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n });\n};\n\n/** Unclamped XYZ D50 → gamma-encoded sRGB. Channels may exceed [0, 255] for out-of-sRGB-gamut colors. */\nconst xyzToRgbUnclamped = ({ x, y, z, alpha }: XyzColor): RgbColor => {\n const [lr, lg, lb] = xyzD50ToLinearSrgb(x, y, z);\n return {\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n };\n};\n\nexport const parseXyzObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['x', 'y', 'z'])) return null;\n const { x, y, z, alpha = 1 } = input as { x: unknown; y: unknown; z: unknown; alpha?: unknown };\n if (!isNumber(x) || !isNumber(y) || !isNumber(z) || !isNumber(alpha)) return null;\n return xyzToRgbUnclamped({\n x,\n y,\n z,\n alpha: clamp(alpha, 0, 1),\n });\n};\n","import { clamp, hasKeys, isAnyNumber, isObject, round, sanitize } from '../helpers.js';\nimport { srgbToLinear } from '../transfer.js';\nimport type { LabColor, RgbColor, XyzColor } from '../types.js';\nimport { D50_WX as WX, D50_WY as WY, D50_WZ as WZ, rgbToXyz, xyzToRgb } from './xyz.js';\n\n// D65 white point derived from CIE chromaticity (x=0.3127, y=0.329)\nconst D65_WX = (0.3127 / 0.329) * 100;\nconst D65_WY = 100;\nconst D65_WZ = ((1 - 0.3127 - 0.329) / 0.329) * 100;\n\nconst EPSILON = 216 / 24389;\nconst KAPPA = 24389 / 27;\n\nconst f = (t: number) => (t > EPSILON ? Math.cbrt(t) : (KAPPA * t + 16) / 116);\n\nexport const xyzToLab = ({ x, y, z, alpha }: XyzColor): LabColor => {\n const fy = f(y / WY);\n return {\n l: 116 * fy - 16,\n a: 500 * (f(x / WX) - fy) || 0, // || 0 suppresses −0; NaN is impossible since WX/WZ are non-zero constants\n b: 200 * (fy - f(z / WZ)) || 0,\n alpha: round(alpha, 3),\n colorSpace: 'lab' as const,\n };\n};\n\nexport const labToXyz = ({ l, a, b, alpha }: LabColor): XyzColor => {\n const fy = (l + 16) / 116;\n const fx = a / 500 + fy;\n const fz = fy - b / 200;\n return {\n x: (fx ** 3 > EPSILON ? fx ** 3 : (116 * fx - 16) / KAPPA) * WX,\n y: (l > 8 ? fy ** 3 : l / KAPPA) * WY,\n z: (fz ** 3 > EPSILON ? fz ** 3 : (116 * fz - 16) / KAPPA) * WZ,\n alpha,\n };\n};\n\nexport const rgbToLab = (rgb: RgbColor): LabColor => xyzToLab(rgbToXyz(rgb));\n\n/** RGB → CIE Lab using D65 white point (screen-native; used for perceptual difference). */\nexport const rgbToLabD65 = ({ r, g, b, alpha }: RgbColor): LabColor => {\n const lr = srgbToLinear(r / 255),\n lg = srgbToLinear(g / 255),\n lb = srgbToLinear(b / 255);\n const x = 100 * (0.41239079926595951 * lr + 0.35758433938387796 * lg + 0.18048078840183429 * lb);\n const y = 100 * (0.21263900587151036 * lr + 0.71516867876775592 * lg + 0.072192315360733714 * lb);\n const z = 100 * (0.019330818715591849 * lr + 0.11919477979462599 * lg + 0.95053215224966059 * lb);\n const fy = f(y / D65_WY);\n return {\n l: 116 * fy - 16,\n a: 500 * (f(x / D65_WX) - fy) || 0,\n b: 200 * (fy - f(z / D65_WZ)) || 0,\n alpha: round(alpha, 3),\n colorSpace: 'lab' as const,\n };\n};\n\nexport const deltaE2000 = (lab1: LabColor, lab2: LabColor): number => {\n const { l: L1, a: a1, b: b1 } = lab1;\n const { l: L2, a: a2, b: b2 } = lab2;\n const rad = Math.PI / 180;\n const deg = 180 / Math.PI;\n\n const C1 = Math.sqrt(a1 ** 2 + b1 ** 2);\n const C2 = Math.sqrt(a2 ** 2 + b2 ** 2);\n const Cab = ((C1 + C2) / 2) ** 7;\n const G = 0.5 * (1 - Math.sqrt(Cab / (Cab + 25 ** 7)));\n const a1p = a1 * (1 + G);\n const a2p = a2 * (1 + G);\n const C1p = Math.sqrt(a1p ** 2 + b1 ** 2);\n const C2p = Math.sqrt(a2p ** 2 + b2 ** 2);\n const Cp = (C1p + C2p) / 2;\n\n const h1p = a1p === 0 && b1 === 0 ? 0 : Math.atan2(b1, a1p) * deg;\n const h2p = a2p === 0 && b2 === 0 ? 0 : Math.atan2(b2, a2p) * deg;\n const h1 = h1p < 0 ? h1p + 360 : h1p;\n const h2 = h2p < 0 ? h2p + 360 : h2p;\n\n let dhp = h2 - h1;\n const absDh = Math.abs(h2 - h1);\n if (absDh > 180 && h2 <= h1) dhp += 360;\n else if (absDh > 180 && h2 > h1) dhp -= 360;\n\n const Lm = (L1 + L2) / 2;\n let Hm = h1 + h2;\n if (absDh <= 180) Hm /= 2;\n else Hm = (h1 + h2 < 360 ? Hm + 360 : Hm - 360) / 2;\n\n const T =\n 1 -\n 0.17 * Math.cos(rad * (Hm - 30)) +\n 0.24 * Math.cos(2 * rad * Hm) +\n 0.32 * Math.cos(rad * (3 * Hm + 6)) -\n 0.2 * Math.cos(rad * (4 * Hm - 63));\n\n const dLp = L2 - L1;\n const dCp = C2p - C1p;\n const dHp = 2 * Math.sin((rad * dhp) / 2) * Math.sqrt(C1p * C2p);\n\n const SL = 1 + (0.015 * (Lm - 50) ** 2) / Math.sqrt(20 + (Lm - 50) ** 2);\n const SC = 1 + 0.045 * Cp;\n const SH = 1 + 0.015 * Cp * T;\n\n const RC7 = Cp ** 7;\n const RC = 2 * Math.sqrt(RC7 / (RC7 + 25 ** 7));\n const dTheta = 30 * Math.exp(-(((Hm - 275) / 25) ** 2));\n const RT = -RC * Math.sin(2 * rad * dTheta);\n\n return Math.sqrt((dLp / SL) ** 2 + (dCp / SC) ** 2 + (dHp / SH) ** 2 + RT * (dCp / SC) * (dHp / SH));\n};\n\nexport const labToRgb = (lab: LabColor): RgbColor => xyzToRgb(labToXyz(lab));\n\nconst LAB_RE =\n /^lab\\(\\s*([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)\\s+([+-]?\\d*\\.?\\d+)\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nexport const parseLabString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = LAB_RE.exec(input.trim());\n if (!m) return null;\n const alpha = m[4] === undefined ? 1 : Number(m[4]) / (m[5] ? 100 : 1);\n return labToRgb({\n l: clamp(Number(m[1]), 0, 100),\n a: Number(m[2]),\n b: Number(m[3]),\n alpha: clamp(alpha, 0, 1),\n colorSpace: 'lab',\n });\n};\n\nexport const parseLabObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if ((input as { colorSpace?: unknown }).colorSpace !== 'lab') return null;\n if (!hasKeys(input, ['l', 'a', 'b'])) return null;\n const { l, a, b, alpha = 1 } = input as { l: unknown; a: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(a) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return labToRgb({\n l: clamp(sanitize(l), 0, 100),\n a: sanitize(a),\n b: sanitize(b),\n alpha: clamp(sanitize(alpha), 0, 1),\n colorSpace: 'lab',\n });\n};\n"]} |
| 'use strict';var chunkX5FCFNQN_cjs=require('./chunk-X5FCFNQN.cjs'),chunkGYCEEHZT_cjs=require('./chunk-GYCEEHZT.cjs'),chunkEXPXWBLP_cjs=require('./chunk-EXPXWBLP.cjs');var Y=96.4295675298354,Z=100,q=82.51046025104603,F=({r:o,g:t,b:r,alpha:s})=>{let n=chunkX5FCFNQN_cjs.a(o/255),a=chunkX5FCFNQN_cjs.a(t/255),c=chunkX5FCFNQN_cjs.a(r/255),e=100*(.4123907992659595*n+.35758433938387796*a+.1804807884018343*c),l=100*(.21263900587151036*n+.7151686787677559*a+.07219231536073371*c),p=100*(.01933081871559185*n+.11919477979462599*a+.9505321522496606*c);return {x:1.0479297925449969*e+.022946870601609652*l-.05019226628920524*p,y:.02962780877005599*e+.9904344267538799*l-.017073799063418826*p,z:-0.009243040646204504*e+.015055191490298152*l+.7518742814281371*p,alpha:chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.b(s,3),0,1)}},s0=.955473421488075,a0=-0.02309845494876471,c0=.06325924320057072,l0=-0.0283697093338637,e0=1.0099953980813041,b0=.021041441191917323,p0=.012314014864481998,u0=-0.020507649298898964,m0=1.330365926242124,h0=.032409699419045215,C0=-0.015373831775700935,g0=-0.004986107602930032,y0=-0.009692436362808799,i0=.018759675015077207,d0=.0004155505740717561,x0=.000556300796969936,X0=-0.002039769588889766,f0=.010569715142428786;var v=(o,t,r)=>{let s=s0*o+a0*t+c0*r,n=l0*o+e0*t+b0*r,a=p0*o+u0*t+m0*r;return [h0*s+C0*n+g0*a,y0*s+i0*n+d0*a,x0*s+X0*n+f0*a]},U=({x:o,y:t,z:r,alpha:s})=>{let[n,a,c]=v(o,t,r);return chunkGYCEEHZT_cjs.a({r:chunkX5FCFNQN_cjs.b(n)*255,g:chunkX5FCFNQN_cjs.b(a)*255,b:chunkX5FCFNQN_cjs.b(c)*255,alpha:s})},_0=({x:o,y:t,z:r,alpha:s})=>{let[n,a,c]=v(o,t,r);return {r:chunkX5FCFNQN_cjs.b(n)*255,g:chunkX5FCFNQN_cjs.b(a)*255,b:chunkX5FCFNQN_cjs.b(c)*255,alpha:s}},w0=o=>{if(!chunkEXPXWBLP_cjs.h(o)||!chunkEXPXWBLP_cjs.i(o,["x","y","z"]))return null;let{x:t,y:r,z:s,alpha:n=1}=o;return !chunkEXPXWBLP_cjs.e(t)||!chunkEXPXWBLP_cjs.e(r)||!chunkEXPXWBLP_cjs.e(s)||!chunkEXPXWBLP_cjs.e(n)?null:_0({x:t,y:r,z:s,alpha:chunkEXPXWBLP_cjs.a(n,0,1)})};var R0=.3127/.329*100,L0=100,z0=(1-.3127-.329)/.329*100,G=216/24389,L=24389/27,y=o=>o>G?Math.cbrt(o):(L*o+16)/116,M0=({x:o,y:t,z:r,alpha:s})=>{let n=y(t/Z);return {l:116*n-16,a:500*(y(o/Y)-n)||0,b:200*(n-y(r/q))||0,alpha:chunkEXPXWBLP_cjs.b(s,3),colorSpace:"lab"}},T0=({l:o,a:t,b:r,alpha:s})=>{let n=(o+16)/116,a=t/500+n,c=n-r/200;return {x:(a**3>G?a**3:(116*a-16)/L)*Y,y:(o>8?n**3:o/L)*Z,z:(c**3>G?c**3:(116*c-16)/L)*q,alpha:s}},G0=o=>M0(F(o)),N0=({r:o,g:t,b:r,alpha:s})=>{let n=chunkX5FCFNQN_cjs.a(o/255),a=chunkX5FCFNQN_cjs.a(t/255),c=chunkX5FCFNQN_cjs.a(r/255),e=100*(.4123907992659595*n+.35758433938387796*a+.1804807884018343*c),l=100*(.21263900587151036*n+.7151686787677559*a+.07219231536073371*c),p=100*(.01933081871559185*n+.11919477979462599*a+.9505321522496606*c),i=y(l/L0);return {l:116*i-16,a:500*(y(e/R0)-i)||0,b:200*(i-y(p/z0))||0,alpha:chunkEXPXWBLP_cjs.b(s,3),colorSpace:"lab"}},j0=(o,t)=>{let{l:r,a:s,b:n}=o,{l:a,a:c,b:e}=t,l=Math.PI/180,p=180/Math.PI,i=Math.sqrt(s**2+n**2),J=Math.sqrt(c**2+e**2),N=((i+J)/2)**7,j=.5*(1-Math.sqrt(N/(N+25**7))),z=s*(1+j),M=c*(1+j),T=Math.sqrt(z**2+n**2),B=Math.sqrt(M**2+e**2),D=(T+B)/2,S=z===0&&n===0?0:Math.atan2(n,z)*p,k=M===0&&e===0?0:Math.atan2(e,M)*p,C=S<0?S+360:S,g=k<0?k+360:k,w=g-C,W=Math.abs(g-C);W>180&&g<=C?w+=360:W>180&&g>C&&(w-=360);let A=(r+a)/2,b=C+g;W<=180?b/=2:b=(C+g<360?b+360:b-360)/2;let Q=1-.17*Math.cos(l*(b-30))+.24*Math.cos(2*l*b)+.32*Math.cos(l*(3*b+6))-.2*Math.cos(l*(4*b-63)),V=a-r,O=B-T,P=2*Math.sin(l*w/2)*Math.sqrt(T*B),o0=1+.015*(A-50)**2/Math.sqrt(20+(A-50)**2),I=1+.045*D,E=1+.015*D*Q,H=D**7,n0=2*Math.sqrt(H/(H+25**7)),t0=30*Math.exp(-(((b-275)/25)**2)),r0=-n0*Math.sin(2*l*t0);return Math.sqrt((V/o0)**2+(O/I)**2+(P/E)**2+r0*(O/I)*(P/E))},$=o=>U(T0(o)),B0=/^lab\(\s*([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)\s+([+-]?\d*\.?\d+)\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,A0=o=>{if(typeof o!="string")return null;let t=B0.exec(o.trim());if(!t)return null;let r=t[4]===void 0?1:Number(t[4])/(t[5]?100:1);return $({l:chunkEXPXWBLP_cjs.a(Number(t[1]),0,100),a:Number(t[2]),b:Number(t[3]),alpha:chunkEXPXWBLP_cjs.a(r,0,1)})},O0=o=>{if(!chunkEXPXWBLP_cjs.h(o)||o.colorSpace!=="lab"||!chunkEXPXWBLP_cjs.i(o,["l","a","b"]))return null;let{l:t,a:r,b:s,alpha:n=1}=o;return !chunkEXPXWBLP_cjs.f(t)||!chunkEXPXWBLP_cjs.f(r)||!chunkEXPXWBLP_cjs.f(s)||!chunkEXPXWBLP_cjs.f(n)?null:$({l:chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.g(t),0,100),a:chunkEXPXWBLP_cjs.g(r),b:chunkEXPXWBLP_cjs.g(s),alpha:chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.g(n),0,1)})};exports.a=F;exports.b=v;exports.c=w0;exports.d=T0;exports.e=G0;exports.f=N0;exports.g=j0;exports.h=$;exports.i=A0;exports.j=O0;//# sourceMappingURL=chunk-IHOZOJHA.cjs.map | ||
| //# sourceMappingURL=chunk-IHOZOJHA.cjs.map |
| {"version":3,"sources":["../src/colorModels/xyz.ts","../src/colorModels/lab.ts"],"names":["D50_WX","D50_WY","D50_WZ","rgbToXyz","r","g","b","alpha","lr","srgbToLinear","lg","lb","xd65","yd65","zd65","clamp","round","B_XR","B_XG","B_XB","B_YR","B_YG","B_YB","B_ZR","B_ZG","B_ZB","X_RX","X_RY","X_RZ","X_GX","X_GY","X_GZ","X_BX","X_BY","X_BZ","xyzD50ToLinearSrgb","x","y","z","xyzToRgb","clampRgb","srgbFromLinear","xyzToRgbUnclamped","parseXyzObject","input","isObject","hasKeys","isNumber","D65_WX","D65_WY","D65_WZ","EPSILON","KAPPA","f","t","xyzToLab","fy","labToXyz","l","a","fx","fz","rgbToLab","rgb","rgbToLabD65","deltaE2000","lab1","lab2","L1","a1","b1","L2","a2","b2","rad","deg","C1","C2","Cab","G","a1p","a2p","C1p","C2p","Cp","h1p","h2p","h1","h2","dhp","absDh","Lm","Hm","T","dLp","dCp","dHp","SL","SC","SH","RC7","RC","dTheta","RT","labToRgb","lab","LAB_RE","parseLabString","m","parseLabObject","isAnyNumber","sanitize"],"mappings":"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","file":"chunk-IHOZOJHA.cjs","sourcesContent":["import { clamp, hasKeys, isNumber, isObject, round } from '../helpers.js';\nimport { srgbFromLinear, srgbToLinear } from '../transfer.js';\nimport type { RgbColor, XyzColor } from '../types.js';\nimport { clampRgb } from './rgb.js';\n\n// D50 white point (CSS Color 4: xy = 0.3457/0.3585)\nexport const D50_WX = 96.42956752983539;\nexport const D50_WY = 100;\nexport const D50_WZ = 82.51046025104603;\n\nexport const rgbToXyz = ({ r, g, b, alpha }: RgbColor): XyzColor => {\n const lr = srgbToLinear(r / 255),\n lg = srgbToLinear(g / 255),\n lb = srgbToLinear(b / 255);\n // sRGB → XYZ D65 (CSS Color 4 exact rational fractions)\n const xd65 = 100 * (0.41239079926595951 * lr + 0.35758433938387796 * lg + 0.18048078840183429 * lb);\n const yd65 = 100 * (0.21263900587151036 * lr + 0.71516867876775592 * lg + 0.072192315360733714 * lb);\n const zd65 = 100 * (0.019330818715591849 * lr + 0.11919477979462599 * lg + 0.95053215224966059 * lb);\n // D65 → D50 (Bradford, CSS Color 4)\n return {\n x: 1.0479297925449969 * xd65 + 0.022946870601609652 * yd65 - 0.05019226628920524 * zd65,\n y: 0.02962780877005599 * xd65 + 0.9904344267538799 * yd65 - 0.017073799063418826 * zd65,\n z: -0.009243040646204504 * xd65 + 0.015055191490298152 * yd65 + 0.7518742814281371 * zd65,\n alpha: clamp(round(alpha, 3), 0, 1),\n };\n};\n\n// Bradford D50→D65 and XYZ(D65)→linear sRGB matrices (CSS Color 4).\n// Shared between the allocating and *Into variants to keep coefficients in one place.\nconst B_XR = 0.955473421488075,\n B_XG = -0.02309845494876471,\n B_XB = 0.06325924320057072;\nconst B_YR = -0.0283697093338637,\n B_YG = 1.0099953980813041,\n B_YB = 0.021041441191917323;\nconst B_ZR = 0.012314014864481998,\n B_ZG = -0.020507649298898964,\n B_ZB = 1.330365926242124;\nconst X_RX = 0.032409699419045213,\n X_RY = -0.015373831775700935,\n X_RZ = -0.0049861076029300327;\nconst X_GX = -0.0096924363628087984,\n X_GY = 0.018759675015077206,\n X_GZ = 0.00041555057407175612;\nconst X_BX = 0.00055630079696993608,\n X_BY = -0.0020397695888897657,\n X_BZ = 0.010569715142428786;\n\n/** Zero-allocation sibling of xyzD50ToLinearSrgb — writes [lr, lg, lb] into `out`. */\nexport const xyzD50ToLinearSrgbInto = (out: Float64Array | number[], x: number, y: number, z: number): void => {\n const xd65 = B_XR * x + B_XG * y + B_XB * z;\n const yd65 = B_YR * x + B_YG * y + B_YB * z;\n const zd65 = B_ZR * x + B_ZG * y + B_ZB * z;\n out[0] = X_RX * xd65 + X_RY * yd65 + X_RZ * zd65;\n out[1] = X_GX * xd65 + X_GY * yd65 + X_GZ * zd65;\n out[2] = X_BX * xd65 + X_BY * yd65 + X_BZ * zd65;\n};\n\n/** XYZ D50 → linear sRGB (no gamma, no clamping). x/y/z are in 0–100 scale. */\nexport const xyzD50ToLinearSrgb = (x: number, y: number, z: number): [number, number, number] => {\n const xd65 = B_XR * x + B_XG * y + B_XB * z;\n const yd65 = B_YR * x + B_YG * y + B_YB * z;\n const zd65 = B_ZR * x + B_ZG * y + B_ZB * z;\n return [\n X_RX * xd65 + X_RY * yd65 + X_RZ * zd65,\n X_GX * xd65 + X_GY * yd65 + X_GZ * zd65,\n X_BX * xd65 + X_BY * yd65 + X_BZ * zd65,\n ];\n};\n\nexport const xyzToRgb = ({ x, y, z, alpha }: XyzColor): RgbColor => {\n const [lr, lg, lb] = xyzD50ToLinearSrgb(x, y, z);\n return clampRgb({\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n });\n};\n\n/** Unclamped XYZ D50 → gamma-encoded sRGB. Channels may exceed [0, 255] for out-of-sRGB-gamut colors. */\nconst xyzToRgbUnclamped = ({ x, y, z, alpha }: XyzColor): RgbColor => {\n const [lr, lg, lb] = xyzD50ToLinearSrgb(x, y, z);\n return {\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n };\n};\n\nexport const parseXyzObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if (!hasKeys(input, ['x', 'y', 'z'])) return null;\n const { x, y, z, alpha = 1 } = input as { x: unknown; y: unknown; z: unknown; alpha?: unknown };\n if (!isNumber(x) || !isNumber(y) || !isNumber(z) || !isNumber(alpha)) return null;\n return xyzToRgbUnclamped({\n x,\n y,\n z,\n alpha: clamp(alpha, 0, 1),\n });\n};\n","import { clamp, hasKeys, isAnyNumber, isObject, round, sanitize } from '../helpers.js';\nimport { srgbToLinear } from '../transfer.js';\nimport type { LabColor, RgbColor, XyzColor } from '../types.js';\nimport { D50_WX as WX, D50_WY as WY, D50_WZ as WZ, rgbToXyz, xyzToRgb } from './xyz.js';\n\n// D65 white point derived from CIE chromaticity (x=0.3127, y=0.329)\nconst D65_WX = (0.3127 / 0.329) * 100;\nconst D65_WY = 100;\nconst D65_WZ = ((1 - 0.3127 - 0.329) / 0.329) * 100;\n\nconst EPSILON = 216 / 24389;\nconst KAPPA = 24389 / 27;\n\nconst f = (t: number) => (t > EPSILON ? Math.cbrt(t) : (KAPPA * t + 16) / 116);\n\nexport const xyzToLab = ({ x, y, z, alpha }: XyzColor): LabColor => {\n const fy = f(y / WY);\n return {\n l: 116 * fy - 16,\n a: 500 * (f(x / WX) - fy) || 0, // || 0 suppresses −0; NaN is impossible since WX/WZ are non-zero constants\n b: 200 * (fy - f(z / WZ)) || 0,\n alpha: round(alpha, 3),\n colorSpace: 'lab' as const,\n };\n};\n\nexport const labToXyz = ({ l, a, b, alpha }: LabColor): XyzColor => {\n const fy = (l + 16) / 116;\n const fx = a / 500 + fy;\n const fz = fy - b / 200;\n return {\n x: (fx ** 3 > EPSILON ? fx ** 3 : (116 * fx - 16) / KAPPA) * WX,\n y: (l > 8 ? fy ** 3 : l / KAPPA) * WY,\n z: (fz ** 3 > EPSILON ? fz ** 3 : (116 * fz - 16) / KAPPA) * WZ,\n alpha,\n };\n};\n\nexport const rgbToLab = (rgb: RgbColor): LabColor => xyzToLab(rgbToXyz(rgb));\n\n/** RGB → CIE Lab using D65 white point (screen-native; used for perceptual difference). */\nexport const rgbToLabD65 = ({ r, g, b, alpha }: RgbColor): LabColor => {\n const lr = srgbToLinear(r / 255),\n lg = srgbToLinear(g / 255),\n lb = srgbToLinear(b / 255);\n const x = 100 * (0.41239079926595951 * lr + 0.35758433938387796 * lg + 0.18048078840183429 * lb);\n const y = 100 * (0.21263900587151036 * lr + 0.71516867876775592 * lg + 0.072192315360733714 * lb);\n const z = 100 * (0.019330818715591849 * lr + 0.11919477979462599 * lg + 0.95053215224966059 * lb);\n const fy = f(y / D65_WY);\n return {\n l: 116 * fy - 16,\n a: 500 * (f(x / D65_WX) - fy) || 0,\n b: 200 * (fy - f(z / D65_WZ)) || 0,\n alpha: round(alpha, 3),\n colorSpace: 'lab' as const,\n };\n};\n\nexport const deltaE2000 = (lab1: LabColor, lab2: LabColor): number => {\n const { l: L1, a: a1, b: b1 } = lab1;\n const { l: L2, a: a2, b: b2 } = lab2;\n const rad = Math.PI / 180;\n const deg = 180 / Math.PI;\n\n const C1 = Math.sqrt(a1 ** 2 + b1 ** 2);\n const C2 = Math.sqrt(a2 ** 2 + b2 ** 2);\n const Cab = ((C1 + C2) / 2) ** 7;\n const G = 0.5 * (1 - Math.sqrt(Cab / (Cab + 25 ** 7)));\n const a1p = a1 * (1 + G);\n const a2p = a2 * (1 + G);\n const C1p = Math.sqrt(a1p ** 2 + b1 ** 2);\n const C2p = Math.sqrt(a2p ** 2 + b2 ** 2);\n const Cp = (C1p + C2p) / 2;\n\n const h1p = a1p === 0 && b1 === 0 ? 0 : Math.atan2(b1, a1p) * deg;\n const h2p = a2p === 0 && b2 === 0 ? 0 : Math.atan2(b2, a2p) * deg;\n const h1 = h1p < 0 ? h1p + 360 : h1p;\n const h2 = h2p < 0 ? h2p + 360 : h2p;\n\n let dhp = h2 - h1;\n const absDh = Math.abs(h2 - h1);\n if (absDh > 180 && h2 <= h1) dhp += 360;\n else if (absDh > 180 && h2 > h1) dhp -= 360;\n\n const Lm = (L1 + L2) / 2;\n let Hm = h1 + h2;\n if (absDh <= 180) Hm /= 2;\n else Hm = (h1 + h2 < 360 ? Hm + 360 : Hm - 360) / 2;\n\n const T =\n 1 -\n 0.17 * Math.cos(rad * (Hm - 30)) +\n 0.24 * Math.cos(2 * rad * Hm) +\n 0.32 * Math.cos(rad * (3 * Hm + 6)) -\n 0.2 * Math.cos(rad * (4 * Hm - 63));\n\n const dLp = L2 - L1;\n const dCp = C2p - C1p;\n const dHp = 2 * Math.sin((rad * dhp) / 2) * Math.sqrt(C1p * C2p);\n\n const SL = 1 + (0.015 * (Lm - 50) ** 2) / Math.sqrt(20 + (Lm - 50) ** 2);\n const SC = 1 + 0.045 * Cp;\n const SH = 1 + 0.015 * Cp * T;\n\n const RC7 = Cp ** 7;\n const RC = 2 * Math.sqrt(RC7 / (RC7 + 25 ** 7));\n const dTheta = 30 * Math.exp(-(((Hm - 275) / 25) ** 2));\n const RT = -RC * Math.sin(2 * rad * dTheta);\n\n return Math.sqrt((dLp / SL) ** 2 + (dCp / SC) ** 2 + (dHp / SH) ** 2 + RT * (dCp / SC) * (dHp / SH));\n};\n\nexport const labToRgb = (lab: LabColor): RgbColor => xyzToRgb(labToXyz(lab));\n\nconst LAB_RE =\n /^lab\\(\\s*([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)\\s+([+-]?\\d*\\.?\\d+)\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nexport const parseLabString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = LAB_RE.exec(input.trim());\n if (!m) return null;\n const alpha = m[4] === undefined ? 1 : Number(m[4]) / (m[5] ? 100 : 1);\n return labToRgb({\n l: clamp(Number(m[1]), 0, 100),\n a: Number(m[2]),\n b: Number(m[3]),\n alpha: clamp(alpha, 0, 1),\n colorSpace: 'lab',\n });\n};\n\nexport const parseLabObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n if ((input as { colorSpace?: unknown }).colorSpace !== 'lab') return null;\n if (!hasKeys(input, ['l', 'a', 'b'])) return null;\n const { l, a, b, alpha = 1 } = input as { l: unknown; a: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(a) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return labToRgb({\n l: clamp(sanitize(l), 0, 100),\n a: sanitize(a),\n b: sanitize(b),\n alpha: clamp(sanitize(alpha), 0, 1),\n colorSpace: 'lab',\n });\n};\n"]} |
| var o=(n,e,r)=>Math.min(Math.max(n,e),r),t=(n,e=0)=>{let r=10**e;return Math.round(r*n)/r},u=n=>n>=0&&n<360?n:(n%360+360)%360,s={deg:1,grad:.9,turn:360,rad:360/(2*Math.PI)},m=n=>typeof n=="number"&&!Number.isNaN(n)&&Number.isFinite(n),b=n=>typeof n=="number",i=n=>Number.isNaN(n)?0:n,c=n=>typeof n=="object"&&n!==null&&!Array.isArray(n),a=(n,e)=>e.every(r=>r in n);export{o as a,t as b,u as c,s as d,m as e,b as f,i as g,c as h,a as i};//# sourceMappingURL=chunk-JFPP44S3.mjs.map | ||
| //# sourceMappingURL=chunk-JFPP44S3.mjs.map |
| {"version":3,"sources":["../src/helpers.ts"],"names":["clamp","min","max","round","d","p","normalizeHue","h","ANGLE_UNITS","isNumber","isAnyNumber","sanitize","isObject","v","hasKeys","obj","keys","k"],"mappings":"AAAO,IAAMA,CAAAA,CAAQ,CAAC,CAAA,CAAWC,CAAAA,CAAaC,IAAwB,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGD,CAAG,EAAGC,CAAG,CAAA,CAEvFC,CAAAA,CAAQ,CAAC,CAAA,CAAWC,CAAAA,CAAI,IAAc,CACjD,IAAMC,CAAAA,CAAI,EAAA,EAAMD,CAAAA,CAChB,OAAO,KAAK,KAAA,CAAMC,CAAAA,CAAI,CAAC,CAAA,CAAIA,CAC7B,EAIaC,CAAAA,CAAgBC,CAAAA,EAAuBA,CAAAA,EAAK,CAAA,EAAKA,CAAAA,CAAI,GAAA,CAAMA,GAAMA,CAAAA,CAAI,GAAA,CAAO,GAAA,EAAO,GAAA,CAEnFC,CAAAA,CAAsC,CAAE,IAAK,CAAA,CAAG,IAAA,CAAM,EAAA,CAAK,IAAA,CAAM,GAAA,CAAK,GAAA,CAAK,KAAO,CAAA,CAAI,IAAA,CAAK,GAAI,CAAA,CAE/FC,CAAAA,CAAY,GAA4B,OAAO,CAAA,EAAM,QAAA,EAAY,CAAC,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAK,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,CAGtGC,CAAAA,CAAe,GAA4B,OAAO,CAAA,EAAM,QAAA,CAGxDC,CAAAA,CAAY,CAAA,EAAuB,MAAA,CAAO,MAAM,CAAC,CAAA,CAAI,EAAI,CAAA,CAEzDC,CAAAA,CAAYC,GACvB,OAAOA,CAAAA,EAAM,QAAA,EAAYA,CAAAA,GAAM,IAAA,EAAQ,CAAC,MAAM,OAAA,CAAQA,CAAC,CAAA,CAE5CC,CAAAA,CAAU,CAAmBC,CAAAA,CAA8BC,IACtEA,CAAAA,CAAK,KAAA,CAAOC,CAAAA,EAAMA,CAAAA,IAAKF,CAAG","file":"chunk-JFPP44S3.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 => {\n const p = 10 ** d;\n return Math.round(p * n) / p;\n};\n\n// Normalize hue to [0, 360). Avoids (h + 360) % 360 which can lose precision\n// when h is already in [0, 360) due to binary floating-point subtraction.\nexport const normalizeHue = (h: number): number => (h >= 0 && h < 360 ? h : ((h % 360) + 360) % 360);\n\nexport const ANGLE_UNITS: Record<string, number> = { deg: 1, grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) };\n\nexport const isNumber = (n: unknown): n is number => typeof n === 'number' && !Number.isNaN(n) && Number.isFinite(n);\n\n// Accepts any JS number type (including NaN/±Infinity); use sanitize() before clamping\nexport const isAnyNumber = (n: unknown): n is number => typeof n === 'number';\n\n// Replace NaN with 0; ±Infinity is left for clamp() to handle naturally\nexport const sanitize = (n: number): number => (Number.isNaN(n) ? 0 : 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"]} |
| 'use strict';var chunkGYCEEHZT_cjs=require('./chunk-GYCEEHZT.cjs'),chunkEXPXWBLP_cjs=require('./chunk-EXPXWBLP.cjs');var N=r=>({h:chunkEXPXWBLP_cjs.c(r.h),s:chunkEXPXWBLP_cjs.a(r.s,0,100),v:chunkEXPXWBLP_cjs.a(r.v,0,100),alpha:chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.b(r.alpha,3),0,1)}),f={h:0,s:0,v:0,alpha:0},y=({r,g:n,b:l,alpha:u})=>{let t=r/255,s=n/255,e=l/255,a=Math.max(t,s,e),c=Math.min(t,s,e),b=a-c,v=a===0?0:b/a,k=0;if(a!==c)switch(a){case t:k=((s-e)/b+(s<e?6:0))/6;break;case s:k=((e-t)/b+2)/6;break;case e:k=((t-s)/b+4)/6;break}let C=k*360;return f.h=C>=0&&C<360?C:(C%360+360)%360,f.s=chunkEXPXWBLP_cjs.a(v*100,0,100),f.v=chunkEXPXWBLP_cjs.a(a*100,0,100),f.alpha=chunkEXPXWBLP_cjs.a(chunkEXPXWBLP_cjs.b(u,3),0,1),f},j=r=>{let{h:n,s:l,v:u,alpha:t}=y(r),s=chunkEXPXWBLP_cjs.b(n,2);return {h:s>=360?0:s,s:chunkEXPXWBLP_cjs.b(l,2),v:chunkEXPXWBLP_cjs.b(u,2),alpha:t}},o=[0,0,0],$=({h:r,s:n,v:l,alpha:u})=>{let t=n/100,s=l/100,e=Math.floor(r/60%6),a=r/60-Math.floor(r/60),c=s*(1-t),b=s*(1-a*t),v=s*(1-(1-a)*t);switch(e){case 0:o[0]=s,o[1]=v,o[2]=c;break;case 1:o[0]=b,o[1]=s,o[2]=c;break;case 2:o[0]=c,o[1]=s,o[2]=v;break;case 3:o[0]=c,o[1]=b,o[2]=s;break;case 4:o[0]=v,o[1]=c,o[2]=s;break;default:o[0]=s,o[1]=c,o[2]=b;break}return chunkGYCEEHZT_cjs.a({r:o[0]*255,g:o[1]*255,b:o[2]*255,alpha:u})},p="[+-]?\\d*\\.?\\d+",M=new RegExp(`^hsva?\\(\\s*(${p})(deg|rad|grad|turn)?\\s*(?:,\\s*(${p})%\\s*,\\s*(${p})%(?:\\s*,\\s*(${p})(%?)?\\s*)?|\\s+(${p})(%?)\\s+(${p})(%?)(?:\\s*/\\s*(${p})(%?)?\\s*)?)\\)$`,"i"),A=r=>{if(typeof r!="string")return null;let n=M.exec(r.trim());if(!n)return null;let l=n[2]?.toLowerCase()??"deg",u=Number(n[1])*(chunkEXPXWBLP_cjs.d[l]??1),t=Number(n[3]??n[7]),s=Number(n[4]??n[9]),e=n[5]??n[11],a=!!(n[6]??n[12]),c=e===void 0?1:Number(e)/(a?100:1);return $(N({h:u,s:t,v:s,alpha:c}))},E=r=>{if(!chunkEXPXWBLP_cjs.h(r)||!chunkEXPXWBLP_cjs.i(r,["h","s","v"]))return null;let{h:n,s:l,v:u,alpha:t=1}=r;return !chunkEXPXWBLP_cjs.f(n)||!chunkEXPXWBLP_cjs.f(l)||!chunkEXPXWBLP_cjs.f(u)||!chunkEXPXWBLP_cjs.f(t)?null:$(N({h:chunkEXPXWBLP_cjs.g(n),s:chunkEXPXWBLP_cjs.g(l),v:chunkEXPXWBLP_cjs.g(u),alpha:chunkEXPXWBLP_cjs.g(t)}))};exports.a=y;exports.b=j;exports.c=$;exports.d=A;exports.e=E;//# sourceMappingURL=chunk-KP3R2XXN.cjs.map | ||
| //# sourceMappingURL=chunk-KP3R2XXN.cjs.map |
| {"version":3,"sources":["../src/colorModels/hsv.ts"],"names":["clampHsv","hsv","normalizeHue","clamp","round","_hsvBuf","rgbToHsvRaw","g","b","alpha","rn","gn","bn","max","min","d","s","h","hDeg","rgbToHsv","rgb","v","hr","_RGB","hsvToRgb","sn","vn","i","f","p","q","t","clampRgb","N","HSV_RE","parseHsvString","input","m","unit","ANGLE_UNITS","rawA","isPercent","parseHsvObject","isObject","hasKeys","isAnyNumber","sanitize"],"mappings":"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","file":"chunk-KP3R2XXN.cjs","sourcesContent":["import { ANGLE_UNITS, clamp, hasKeys, isAnyNumber, isObject, normalizeHue, round, sanitize } from '../helpers.js';\nimport type { HsvColor, RgbColor } from '../types.js';\nimport { clampRgb } from './rgb.js';\n\nexport const clampHsv = (hsv: HsvColor): HsvColor => ({\n h: normalizeHue(hsv.h),\n s: clamp(hsv.s, 0, 100),\n v: clamp(hsv.v, 0, 100),\n alpha: clamp(round(hsv.alpha, 3), 0, 1),\n});\n\n// Shared write buffer for rgbToHsvRaw — callers must destructure immediately, never store the reference.\nconst _hsvBuf: HsvColor = { h: 0, s: 0, v: 0, alpha: 0 };\n\nexport const rgbToHsvRaw = ({ r, g, b, alpha }: 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 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 const hDeg = h * 360;\n _hsvBuf.h = hDeg >= 0 && hDeg < 360 ? hDeg : ((hDeg % 360) + 360) % 360;\n _hsvBuf.s = clamp(s * 100, 0, 100);\n _hsvBuf.v = clamp(max * 100, 0, 100);\n _hsvBuf.alpha = clamp(round(alpha, 3), 0, 1);\n return _hsvBuf;\n};\n\nexport const rgbToHsv = (rgb: RgbColor): HsvColor => {\n const { h, s, v, alpha } = rgbToHsvRaw(rgb);\n const hr = round(h, 2);\n // round() can push a value just below 360 to 360.00 due to floating-point; clamp back to 0.\n return { h: hr >= 360 ? 0 : hr, s: round(s, 2), v: round(v, 2), alpha };\n};\n\nconst _RGB = [0, 0, 0] as [number, number, number];\n\nexport const hsvToRgb = ({ h, s, v, alpha }: 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 switch (i) {\n case 0:\n _RGB[0] = vn;\n _RGB[1] = t;\n _RGB[2] = p;\n break;\n case 1:\n _RGB[0] = q;\n _RGB[1] = vn;\n _RGB[2] = p;\n break;\n case 2:\n _RGB[0] = p;\n _RGB[1] = vn;\n _RGB[2] = t;\n break;\n case 3:\n _RGB[0] = p;\n _RGB[1] = q;\n _RGB[2] = vn;\n break;\n case 4:\n _RGB[0] = t;\n _RGB[1] = p;\n _RGB[2] = vn;\n break;\n default: // case 5 — not an error handler; i is always 0–5 for h in [0, 360)\n _RGB[0] = vn;\n _RGB[1] = p;\n _RGB[2] = q;\n break;\n }\n\n return clampRgb({ r: _RGB[0] * 255, g: _RGB[1] * 255, b: _RGB[2] * 255, alpha });\n};\n\nconst N = '[+-]?\\\\d*\\\\.?\\\\d+';\n// HSV/HSVA is a non-standard, library-defined syntax (not part of any CSS spec).\n// Format mirrors HSL for consistency: hsv(h, s%, v%) / hsv(h s% v% / alpha).\nconst HSV_RE = new RegExp(\n `^hsva?\\\\(\\\\s*(${N})(deg|rad|grad|turn)?\\\\s*(?:` +\n `,\\\\s*(${N})%\\\\s*,\\\\s*(${N})%(?:\\\\s*,\\\\s*(${N})(%?)?\\\\s*)?` +\n `|` +\n `\\\\s+(${N})(%?)\\\\s+(${N})(%?)(?:\\\\s*/\\\\s*(${N})(%?)?\\\\s*)?` +\n `)\\\\)$`,\n 'i'\n);\n\nexport const parseHsvString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = HSV_RE.exec(input.trim());\n if (!m) return null;\n const unit = m[2]?.toLowerCase() ?? 'deg';\n const h = Number(m[1]) * (ANGLE_UNITS[unit] ?? 1);\n const s = Number(m[3] ?? m[7]);\n const v = Number(m[4] ?? m[9]);\n const rawA = m[5] ?? m[11];\n const isPercent = !!(m[6] ?? m[12]);\n const alpha = rawA === undefined ? 1 : Number(rawA) / (isPercent ? 100 : 1);\n return hsvToRgb(clampHsv({ h, s, v, alpha }));\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, alpha = 1 } = input as { h: unknown; s: unknown; v: unknown; alpha?: unknown };\n if (!isAnyNumber(h) || !isAnyNumber(s) || !isAnyNumber(v) || !isAnyNumber(alpha)) return null;\n return hsvToRgb(clampHsv({ h: sanitize(h), s: sanitize(s), v: sanitize(v), alpha: sanitize(alpha) }));\n};\n"]} |
| import {a,b}from'./chunk-FXCFKFXK.mjs';import {a as a$1}from'./chunk-OD65R6MQ.mjs';import {a as a$2,h as h$1,i,f as f$1,g as g$1}from'./chunk-JFPP44S3.mjs';var N=.4122214708,z=.5363325363,E=.0514459929,U=.2119034982,$=.6806995451,q=.1073969566,D=.0883024619,H=.2817188376,J=.6299787005,P=.2104542553,Q=.793617785,V=-0.0040720468,W=1.9779984951,X=-2.428592205,Y=.4505937099,Z=.0259040371,nn=.7827717662,on=-0.808675766,g=.3963377774,I=.2158037573,R=-0.1055613458,S=-0.0638541728,f=-0.0894841775,d=-1.291485548,h=4.0767416613,B=-3.3077115904,O=.2309699287,x=-1.2684380041,C=2.6097574007,A=-0.3413193963,w=-0.0041960865,T=-0.7034186145,y=1.7076147009;var rn=(o,n,r)=>{let t=Math.cbrt(N*o+z*n+E*r),s=Math.cbrt(U*o+$*n+q*r),e=Math.cbrt(D*o+H*n+J*r);return [P*t+Q*s+V*e,W*t+X*s+Y*e,Z*t+nn*s+on*e]},bn=({r:o,g:n,b:r,alpha:t})=>{let[s,e,c]=rn(a(o/255),a(n/255),a(r/255));return {l:s,a:e,b:c,alpha:t}},G=({l:o,a:n,b:r,alpha:t})=>{let[s,e,c]=tn(o,n,r);return {r:b(s)*255,g:b(e)*255,b:b(c)*255,alpha:t}},ln=({l:o,a:n,b:r,alpha:t})=>{let s=o+.3963377774*n+.2158037573*r,e=o-.1055613458*n-.0638541728*r,c=o-.0894841775*n-1.291485548*r,_=s**3,b$1=e**3,l=c**3,j=4.0767416613*_-3.3077115904*b$1+.2309699287*l,F=-1.2684380041*_+2.6097574007*b$1-.3413193963*l,K=-0.0041960865*_-.7034186145*b$1+1.7076147009*l;return a$1({r:b(a$2(j,0,1))*255,g:b(a$2(F,0,1))*255,b:b(a$2(K,0,1))*255,alpha:t})},an=(o,n,r,t)=>{let s=n+g*r+I*t,e=n+R*r+S*t,c=n+f*r+d*t,_=s**3,b=e**3,l=c**3;o[0]=h*_+B*b+O*l,o[1]=x*_+C*b+A*l,o[2]=w*_+T*b+y*l;},tn=(o,n,r)=>{let t=o+g*n+I*r,s=o+R*n+S*r,e=o+f*n+d*r,c=t**3,_=s**3,b=e**3;return [h*c+B*_+O*b,x*c+C*_+A*b,w*c+T*_+y*b]},Mn=o=>{if(!h$1(o)||o.colorSpace==="lab"||!i(o,["l","a","b"])||"r"in o||"x"in o||"c"in o||"h"in o)return null;let{l:n,a:r,b:t,alpha:s=1}=o;return !f$1(n)||!f$1(r)||!f$1(t)||!f$1(s)||g$1(n)>1?null:G({l:g$1(n),a:g$1(r),b:g$1(t),alpha:a$2(g$1(s),0,1)})},sn=/^oklab\(\s*(none|[+-]?\d*\.?\d+)(%?)\s+(none|[+-]?\d*\.?\d+)(%?)\s+(none|[+-]?\d*\.?\d+)(%?)\s*(?:\/\s*(none|[+-]?\d*\.?\d+)(%)?\s*)?\)$/i,M=o=>o.toLowerCase()==="none"?0:Number(o),mn=o=>{if(typeof o!="string")return null;let n=sn.exec(o.trim());if(!n)return null;let r=n[2]?M(n[1])/100:M(n[1]),t=n[4]?M(n[3])*.004:M(n[3]),s=n[6]?M(n[5])*.004:M(n[5]),e=n[7]===void 0?1:M(n[7])/(n[8]?100:1);return G({l:r,a:t,b:s,alpha:a$2(e,0,1)})};export{rn as a,bn as b,G as c,ln as d,an as e,tn as f,Mn as g,mn as h};//# sourceMappingURL=chunk-MUHBYE5R.mjs.map | ||
| //# sourceMappingURL=chunk-MUHBYE5R.mjs.map |
| {"version":3,"sources":["../src/colorModels/oklab.ts"],"names":["M1_LR","M1_LG","M1_LB","M1_MR","M1_MG","M1_MB","M1_SR","M1_SG","M1_SB","M2_L_L","M2_M_L","M2_S_L","M2_L_A","M2_M_A","M2_S_A","M2_L_B","M2_M_B","M2_S_B","M2I_A_L","M2I_B_L","M2I_A_M","M2I_B_M","M2I_A_S","M2I_B_S","M1I_L_R","M1I_M_R","M1I_S_R","M1I_L_G","M1I_M_G","M1I_S_G","M1I_L_B","M1I_M_B","M1I_S_B","linearSrgbToOklab","lr","lg","lb","lv","mv","sv","rgbToOklab","r","g","b","alpha","l","a","bv","srgbToLinear","oklabToRgbUnclamped","oklabToLinear","srgbFromLinear","oklabToRgb","l_","m_","s_","clampRgb","clamp","oklabToLinearInto","out","parseOklabObject","input","isObject","hasKeys","isAnyNumber","sanitize","OKLAB_RE","val","v","parseOklabString","m","L"],"mappings":"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","file":"chunk-MUHBYE5R.mjs","sourcesContent":["import { clamp, hasKeys, isAnyNumber, isObject, sanitize } from '../helpers.js';\nimport { srgbFromLinear, srgbToLinear } from '../transfer.js';\nimport type { OklabColor, RgbColor } from '../types.js';\nimport { clampRgb } from './rgb.js';\n\n// Björn Ottosson's OKLab matrix coefficients. Referenced by both the allocating\n// and zero-alloc (*Into) variants so the math lives in one place.\n// sRGB linear → LMS (cubed roots taken at M1 stage)\nconst M1_LR = 0.4122214708,\n M1_LG = 0.5363325363,\n M1_LB = 0.0514459929;\nconst M1_MR = 0.2119034982,\n M1_MG = 0.6806995451,\n M1_MB = 0.1073969566;\nconst M1_SR = 0.0883024619,\n M1_SG = 0.2817188376,\n M1_SB = 0.6299787005;\n// LMS' → OKLab\nconst M2_L_L = 0.2104542553,\n M2_M_L = 0.793617785,\n M2_S_L = -0.0040720468;\nconst M2_L_A = 1.9779984951,\n M2_M_A = -2.428592205,\n M2_S_A = 0.4505937099;\nconst M2_L_B = 0.0259040371,\n M2_M_B = 0.7827717662,\n M2_S_B = -0.808675766;\n// OKLab → LMS' (inverse of M2)\nconst M2I_A_L = 0.3963377774,\n M2I_B_L = 0.2158037573;\nconst M2I_A_M = -0.1055613458,\n M2I_B_M = -0.0638541728;\nconst M2I_A_S = -0.0894841775,\n M2I_B_S = -1.291485548;\n// LMS → linear sRGB (inverse of M1)\nconst M1I_L_R = 4.0767416613,\n M1I_M_R = -3.3077115904,\n M1I_S_R = 0.2309699287;\nconst M1I_L_G = -1.2684380041,\n M1I_M_G = 2.6097574007,\n M1I_S_G = -0.3413193963;\nconst M1I_L_B = -0.0041960865,\n M1I_M_B = -0.7034186145,\n M1I_S_B = 1.7076147009;\n\n/** Zero-allocation sibling of linearSrgbToOklab — writes [l, a, b] into `out`. */\nexport const linearSrgbToOklabInto = (out: Float64Array | number[], lr: number, lg: number, lb: number): void => {\n const lv = Math.cbrt(M1_LR * lr + M1_LG * lg + M1_LB * lb);\n const mv = Math.cbrt(M1_MR * lr + M1_MG * lg + M1_MB * lb);\n const sv = Math.cbrt(M1_SR * lr + M1_SG * lg + M1_SB * lb);\n out[0] = M2_L_L * lv + M2_M_L * mv + M2_S_L * sv;\n out[1] = M2_L_A * lv + M2_M_A * mv + M2_S_A * sv;\n out[2] = M2_L_B * lv + M2_M_B * mv + M2_S_B * sv;\n};\n\n/** Convert linear sRGB channels to OKLab (Björn Ottosson). No gamma, no clamping. */\nexport const linearSrgbToOklab = (lr: number, lg: number, lb: number): [number, number, number] => {\n const lv = Math.cbrt(M1_LR * lr + M1_LG * lg + M1_LB * lb);\n const mv = Math.cbrt(M1_MR * lr + M1_MG * lg + M1_MB * lb);\n const sv = Math.cbrt(M1_SR * lr + M1_SG * lg + M1_SB * lb);\n return [\n M2_L_L * lv + M2_M_L * mv + M2_S_L * sv,\n M2_L_A * lv + M2_M_A * mv + M2_S_A * sv,\n M2_L_B * lv + M2_M_B * mv + M2_S_B * sv,\n ];\n};\n\nexport const rgbToOklab = ({ r, g, b, alpha }: RgbColor): OklabColor => {\n const [l, a, bv] = linearSrgbToOklab(srgbToLinear(r / 255), srgbToLinear(g / 255), srgbToLinear(b / 255));\n return { l, a, b: bv, alpha };\n};\n\n/** Unclamped OKLab → gamma-encoded sRGB. Channels may exceed [0, 255] for out-of-sRGB-gamut colors. */\nexport const oklabToRgbUnclamped = ({ l, a, b, alpha }: OklabColor): RgbColor => {\n const [lr, lg, lb] = oklabToLinear(l, a, b);\n return {\n r: srgbFromLinear(lr) * 255,\n g: srgbFromLinear(lg) * 255,\n b: srgbFromLinear(lb) * 255,\n alpha,\n };\n};\n\nexport const oklabToRgb = ({ l, a, b, alpha }: OklabColor): RgbColor => {\n const l_ = l + 0.3963377774 * a + 0.2158037573 * b;\n const m_ = l - 0.1055613458 * a - 0.0638541728 * b;\n const s_ = l - 0.0894841775 * a - 1.291485548 * b;\n\n const lv = l_ ** 3;\n const mv = m_ ** 3;\n const sv = s_ ** 3;\n\n const r = 4.0767416613 * lv - 3.3077115904 * mv + 0.2309699287 * sv;\n const g = -1.2684380041 * lv + 2.6097574007 * mv - 0.3413193963 * sv;\n const bv = -0.0041960865 * lv - 0.7034186145 * mv + 1.7076147009 * sv;\n\n return clampRgb({\n r: srgbFromLinear(clamp(r, 0, 1)) * 255,\n g: srgbFromLinear(clamp(g, 0, 1)) * 255,\n b: srgbFromLinear(clamp(bv, 0, 1)) * 255,\n alpha,\n });\n};\n\n/** Zero-allocation sibling of oklabToLinear — writes [lr, lg, lb] into `out`. */\nexport const oklabToLinearInto = (out: Float64Array | number[], l: number, a: number, b: number): void => {\n const l_ = l + M2I_A_L * a + M2I_B_L * b;\n const m_ = l + M2I_A_M * a + M2I_B_M * b;\n const s_ = l + M2I_A_S * a + M2I_B_S * b;\n const lv = l_ ** 3,\n mv = m_ ** 3,\n sv = s_ ** 3;\n out[0] = M1I_L_R * lv + M1I_M_R * mv + M1I_S_R * sv;\n out[1] = M1I_L_G * lv + M1I_M_G * mv + M1I_S_G * sv;\n out[2] = M1I_L_B * lv + M1I_M_B * mv + M1I_S_B * sv;\n};\n\n/** Unclamped linear sRGB channels from OKLab values. Channels may exceed [0, 1] for out-of-gamut colors. */\nexport const oklabToLinear = (l: number, a: number, b: number): [number, number, number] => {\n const l_ = l + M2I_A_L * a + M2I_B_L * b;\n const m_ = l + M2I_A_M * a + M2I_B_M * b;\n const s_ = l + M2I_A_S * a + M2I_B_S * b;\n const lv = l_ ** 3,\n mv = m_ ** 3,\n sv = s_ ** 3;\n return [\n M1I_L_R * lv + M1I_M_R * mv + M1I_S_R * sv,\n M1I_L_G * lv + M1I_M_G * mv + M1I_S_G * sv,\n M1I_L_B * lv + M1I_M_B * mv + M1I_S_B * sv,\n ];\n};\n\nexport const parseOklabObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n // Objects with colorSpace: 'lab' are CIE Lab, not OKLab — let parseLabObject handle them.\n if ((input as { colorSpace?: unknown }).colorSpace === 'lab') return null;\n if (!hasKeys(input, ['l', 'a', 'b'])) return null;\n if ('r' in input || 'x' in input || 'c' in input || 'h' in input) return null;\n const { l, a, b, alpha = 1 } = input as { l: unknown; a: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(l) || !isAnyNumber(a) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n if (sanitize(l) > 1) return null; // OKLab L is always [0, 1]; reject CIE Lab values passed without colorSpace branding\n return oklabToRgbUnclamped({\n l: sanitize(l),\n a: sanitize(a),\n b: sanitize(b),\n alpha: clamp(sanitize(alpha), 0, 1),\n });\n};\n\nconst OKLAB_RE =\n /^oklab\\(\\s*(none|[+-]?\\d*\\.?\\d+)(%?)\\s+(none|[+-]?\\d*\\.?\\d+)(%?)\\s+(none|[+-]?\\d*\\.?\\d+)(%?)\\s*(?:\\/\\s*(none|[+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i;\n\nconst val = (v: string): number => (v.toLowerCase() === 'none' ? 0 : Number(v));\n\nexport const parseOklabString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = OKLAB_RE.exec(input.trim());\n if (!m) return null;\n const L = m[2] ? val(m[1]!) / 100 : val(m[1]!);\n const a = m[4] ? val(m[3]!) * 0.004 : val(m[3]!); // CSS Color 4: 100% = 0.4, so 1% = 0.004\n const b = m[6] ? val(m[5]!) * 0.004 : val(m[5]!);\n const alpha = m[7] === undefined ? 1 : val(m[7]) / (m[8] ? 100 : 1);\n return oklabToRgbUnclamped({ l: L, a, b, alpha: clamp(alpha, 0, 1) });\n};\n"]} |
| import {a,b,h,i,f as f$1,g}from'./chunk-JFPP44S3.mjs';var f=r=>({r:a(r.r,0,255),g:a(r.g,0,255),b:a(r.b,0,255),alpha:a(b(r.alpha,3),0,1)}),y=r=>{if(!h(r))return null;let n=r.colorSpace;if(n==="display-p3"||n==="rec2020"||!i(r,["r","g","b"]))return null;let{r:t,g:a,b:e,alpha:s=1}=r;return !f$1(t)||!f$1(a)||!f$1(e)||!f$1(s)?null:f({r:g(t),g:g(a),b:g(e),alpha:g(s)})},o="[+-]?\\d*\\.?\\d+",k=new RegExp(`^rgba?\\(\\s*(${o})(%?)\\s*(?:,\\s*(${o})(%?)\\s*,\\s*(${o})(%?)(?:\\s*,\\s*(${o})(%?))?\\s*|\\s+(${o})(%?)\\s+(${o})(%?)(?:\\s*/\\s*(${o})(%?))?\\s*)\\)$`,"i"),x=r=>{if(typeof r!="string")return null;let n=k.exec(r.trim());if(!n)return null;let t=!!n[2],a=t?Number(n[1])/100*255:Number(n[1]),e=n[3]??n[9],s=!!(n[4]??n[10]),w=s?Number(e)/100*255:Number(e),b=n[5]??n[11],p=!!(n[6]??n[12]),N=p?Number(b)/100*255:Number(b);if(t!==s||s!==p)return null;let g=n[7]??n[13],$=!!(n[8]??n[14]),h=g===void 0?1:Number(g)/($?100:1);return f({r:a,g:w,b:N,alpha:h})};export{f as a,y as b,x as c};//# sourceMappingURL=chunk-OD65R6MQ.mjs.map | ||
| //# sourceMappingURL=chunk-OD65R6MQ.mjs.map |
| {"version":3,"sources":["../src/colorModels/rgb.ts"],"names":["clampRgb","rgb","clamp","round","parseRgbObject","input","isObject","cs","hasKeys","r","g","b","alpha","isAnyNumber","sanitize","N","RGB_RE","parseRgbString","m","rPct","gRaw","gPct","bRaw","bPct","rawA","aPct"],"mappings":"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","file":"chunk-OD65R6MQ.mjs","sourcesContent":["import { clamp, hasKeys, isAnyNumber, isObject, round, sanitize } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nexport const clampRgb = (rgb: RgbColor): RgbColor => ({\n r: clamp(rgb.r, 0, 255),\n g: clamp(rgb.g, 0, 255),\n b: clamp(rgb.b, 0, 255),\n alpha: clamp(round(rgb.alpha, 3), 0, 1),\n});\n\nexport const parseRgbObject = (input: unknown): RgbColor | null => {\n if (!isObject(input)) return null;\n const cs = (input as { colorSpace?: unknown }).colorSpace;\n if (cs === 'display-p3' || cs === 'rec2020') return null;\n if (!hasKeys(input, ['r', 'g', 'b'])) return null;\n const { r, g, b, alpha = 1 } = input as { r: unknown; g: unknown; b: unknown; alpha?: unknown };\n if (!isAnyNumber(r) || !isAnyNumber(g) || !isAnyNumber(b) || !isAnyNumber(alpha)) return null;\n return clampRgb({ r: sanitize(r), g: sanitize(g), b: sanitize(b), alpha: sanitize(alpha) });\n};\n\n// Matches both legacy comma syntax: rgb(255, 0, 0) / rgba(255, 0, 0, 0.5)\n// and modern space syntax: rgb(255 0 0) / rgb(255 0 0 / 0.5)\n// Also supports percentage-based channels: rgb(100%, 0%, 0%) / rgb(100% 0% 0%)\nconst N = '[+-]?\\\\d*\\\\.?\\\\d+';\nconst RGB_RE = new RegExp(\n `^rgba?\\\\(\\\\s*(${N})(%?)\\\\s*(?:` +\n // comma branch: r,g,b and optional alpha\n `,\\\\s*(${N})(%?)\\\\s*,\\\\s*(${N})(%?)(?:\\\\s*,\\\\s*(${N})(%?))?\\\\s*` +\n `|` +\n // space branch: r g b and optional /alpha\n `\\\\s+(${N})(%?)\\\\s+(${N})(%?)(?:\\\\s*/\\\\s*(${N})(%?))?\\\\s*` +\n `)\\\\)$`,\n 'i'\n);\n\nexport const parseRgbString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = RGB_RE.exec(input.trim());\n if (!m) return null;\n\n // comma branch: m[1]r m[2]r% m[3]g m[4]g% m[5]b m[6]b% m[7]a m[8]a%\n // space branch: m[1]r m[2]r% m[9]g m[10]g% m[11]b m[12]b% m[13]a m[14]a%\n const rPct = !!m[2];\n const r = rPct ? (Number(m[1]) / 100) * 255 : Number(m[1]);\n\n const gRaw = m[3] ?? m[9];\n const gPct = !!(m[4] ?? m[10]);\n const g = gPct ? (Number(gRaw) / 100) * 255 : Number(gRaw);\n\n const bRaw = m[5] ?? m[11];\n const bPct = !!(m[6] ?? m[12]);\n const b = bPct ? (Number(bRaw) / 100) * 255 : Number(bRaw);\n\n // CSS requires r/g/b to be all-numbers or all-percentages, not mixed\n if (rPct !== gPct || gPct !== bPct) return null;\n\n const rawA = m[7] ?? m[13];\n const aPct = !!(m[8] ?? m[14]);\n const alpha = rawA === undefined ? 1 : Number(rawA) / (aPct ? 100 : 1);\n\n return clampRgb({ r, g, b, alpha });\n};\n"]} |
| import {a as a$1}from'./chunk-OD65R6MQ.mjs';import {a,b,d,h,i,f as f$1,g,c}from'./chunk-JFPP44S3.mjs';var N=r=>({h:c(r.h),s:a(r.s,0,100),v:a(r.v,0,100),alpha:a(b(r.alpha,3),0,1)}),f={h:0,s:0,v:0,alpha:0},y=({r,g:n,b:l,alpha:u})=>{let t=r/255,s=n/255,e=l/255,a$1=Math.max(t,s,e),c=Math.min(t,s,e),b$1=a$1-c,v=a$1===0?0:b$1/a$1,k=0;if(a$1!==c)switch(a$1){case t:k=((s-e)/b$1+(s<e?6:0))/6;break;case s:k=((e-t)/b$1+2)/6;break;case e:k=((t-s)/b$1+4)/6;break}let C=k*360;return f.h=C>=0&&C<360?C:(C%360+360)%360,f.s=a(v*100,0,100),f.v=a(a$1*100,0,100),f.alpha=a(b(u,3),0,1),f},j=r=>{let{h:n,s:l,v:u,alpha:t}=y(r),s=b(n,2);return {h:s>=360?0:s,s:b(l,2),v:b(u,2),alpha:t}},o=[0,0,0],$=({h:r,s:n,v:l,alpha:u})=>{let t=n/100,s=l/100,e=Math.floor(r/60%6),a=r/60-Math.floor(r/60),c=s*(1-t),b=s*(1-a*t),v=s*(1-(1-a)*t);switch(e){case 0:o[0]=s,o[1]=v,o[2]=c;break;case 1:o[0]=b,o[1]=s,o[2]=c;break;case 2:o[0]=c,o[1]=s,o[2]=v;break;case 3:o[0]=c,o[1]=b,o[2]=s;break;case 4:o[0]=v,o[1]=c,o[2]=s;break;default:o[0]=s,o[1]=c,o[2]=b;break}return a$1({r:o[0]*255,g:o[1]*255,b:o[2]*255,alpha:u})},p="[+-]?\\d*\\.?\\d+",M=new RegExp(`^hsva?\\(\\s*(${p})(deg|rad|grad|turn)?\\s*(?:,\\s*(${p})%\\s*,\\s*(${p})%(?:\\s*,\\s*(${p})(%?)?\\s*)?|\\s+(${p})(%?)\\s+(${p})(%?)(?:\\s*/\\s*(${p})(%?)?\\s*)?)\\)$`,"i"),A=r=>{if(typeof r!="string")return null;let n=M.exec(r.trim());if(!n)return null;let l=n[2]?.toLowerCase()??"deg",u=Number(n[1])*(d[l]??1),t=Number(n[3]??n[7]),s=Number(n[4]??n[9]),e=n[5]??n[11],a=!!(n[6]??n[12]),c=e===void 0?1:Number(e)/(a?100:1);return $(N({h:u,s:t,v:s,alpha:c}))},E=r=>{if(!h(r)||!i(r,["h","s","v"]))return null;let{h:n,s:l,v:u,alpha:t=1}=r;return !f$1(n)||!f$1(l)||!f$1(u)||!f$1(t)?null:$(N({h:g(n),s:g(l),v:g(u),alpha:g(t)}))};export{y as a,j as b,$ as c,A as d,E as e};//# sourceMappingURL=chunk-OYLVEKC4.mjs.map | ||
| //# sourceMappingURL=chunk-OYLVEKC4.mjs.map |
| {"version":3,"sources":["../src/colorModels/hsv.ts"],"names":["clampHsv","hsv","normalizeHue","clamp","round","_hsvBuf","rgbToHsvRaw","g","b","alpha","rn","gn","bn","max","min","d","s","h","hDeg","rgbToHsv","rgb","v","hr","_RGB","hsvToRgb","sn","vn","i","f","p","q","t","clampRgb","N","HSV_RE","parseHsvString","input","m","unit","ANGLE_UNITS","rawA","isPercent","parseHsvObject","isObject","hasKeys","isAnyNumber","sanitize"],"mappings":"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","file":"chunk-OYLVEKC4.mjs","sourcesContent":["import { ANGLE_UNITS, clamp, hasKeys, isAnyNumber, isObject, normalizeHue, round, sanitize } from '../helpers.js';\nimport type { HsvColor, RgbColor } from '../types.js';\nimport { clampRgb } from './rgb.js';\n\nexport const clampHsv = (hsv: HsvColor): HsvColor => ({\n h: normalizeHue(hsv.h),\n s: clamp(hsv.s, 0, 100),\n v: clamp(hsv.v, 0, 100),\n alpha: clamp(round(hsv.alpha, 3), 0, 1),\n});\n\n// Shared write buffer for rgbToHsvRaw — callers must destructure immediately, never store the reference.\nconst _hsvBuf: HsvColor = { h: 0, s: 0, v: 0, alpha: 0 };\n\nexport const rgbToHsvRaw = ({ r, g, b, alpha }: 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 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 const hDeg = h * 360;\n _hsvBuf.h = hDeg >= 0 && hDeg < 360 ? hDeg : ((hDeg % 360) + 360) % 360;\n _hsvBuf.s = clamp(s * 100, 0, 100);\n _hsvBuf.v = clamp(max * 100, 0, 100);\n _hsvBuf.alpha = clamp(round(alpha, 3), 0, 1);\n return _hsvBuf;\n};\n\nexport const rgbToHsv = (rgb: RgbColor): HsvColor => {\n const { h, s, v, alpha } = rgbToHsvRaw(rgb);\n const hr = round(h, 2);\n // round() can push a value just below 360 to 360.00 due to floating-point; clamp back to 0.\n return { h: hr >= 360 ? 0 : hr, s: round(s, 2), v: round(v, 2), alpha };\n};\n\nconst _RGB = [0, 0, 0] as [number, number, number];\n\nexport const hsvToRgb = ({ h, s, v, alpha }: 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 switch (i) {\n case 0:\n _RGB[0] = vn;\n _RGB[1] = t;\n _RGB[2] = p;\n break;\n case 1:\n _RGB[0] = q;\n _RGB[1] = vn;\n _RGB[2] = p;\n break;\n case 2:\n _RGB[0] = p;\n _RGB[1] = vn;\n _RGB[2] = t;\n break;\n case 3:\n _RGB[0] = p;\n _RGB[1] = q;\n _RGB[2] = vn;\n break;\n case 4:\n _RGB[0] = t;\n _RGB[1] = p;\n _RGB[2] = vn;\n break;\n default: // case 5 — not an error handler; i is always 0–5 for h in [0, 360)\n _RGB[0] = vn;\n _RGB[1] = p;\n _RGB[2] = q;\n break;\n }\n\n return clampRgb({ r: _RGB[0] * 255, g: _RGB[1] * 255, b: _RGB[2] * 255, alpha });\n};\n\nconst N = '[+-]?\\\\d*\\\\.?\\\\d+';\n// HSV/HSVA is a non-standard, library-defined syntax (not part of any CSS spec).\n// Format mirrors HSL for consistency: hsv(h, s%, v%) / hsv(h s% v% / alpha).\nconst HSV_RE = new RegExp(\n `^hsva?\\\\(\\\\s*(${N})(deg|rad|grad|turn)?\\\\s*(?:` +\n `,\\\\s*(${N})%\\\\s*,\\\\s*(${N})%(?:\\\\s*,\\\\s*(${N})(%?)?\\\\s*)?` +\n `|` +\n `\\\\s+(${N})(%?)\\\\s+(${N})(%?)(?:\\\\s*/\\\\s*(${N})(%?)?\\\\s*)?` +\n `)\\\\)$`,\n 'i'\n);\n\nexport const parseHsvString = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const m = HSV_RE.exec(input.trim());\n if (!m) return null;\n const unit = m[2]?.toLowerCase() ?? 'deg';\n const h = Number(m[1]) * (ANGLE_UNITS[unit] ?? 1);\n const s = Number(m[3] ?? m[7]);\n const v = Number(m[4] ?? m[9]);\n const rawA = m[5] ?? m[11];\n const isPercent = !!(m[6] ?? m[12]);\n const alpha = rawA === undefined ? 1 : Number(rawA) / (isPercent ? 100 : 1);\n return hsvToRgb(clampHsv({ h, s, v, alpha }));\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, alpha = 1 } = input as { h: unknown; s: unknown; v: unknown; alpha?: unknown };\n if (!isAnyNumber(h) || !isAnyNumber(s) || !isAnyNumber(v) || !isAnyNumber(alpha)) return null;\n return hsvToRgb(clampHsv({ h: sanitize(h), s: sanitize(s), v: sanitize(v), alpha: sanitize(alpha) }));\n};\n"]} |
| import {b,a}from'./chunk-JFPP44S3.mjs';var c=Array.from({length:256},(t,r)=>r.toString(16).padStart(2,"0")),n=t=>(t&15)+9*(t>>6),u=(t,r)=>n(t.charCodeAt(r))<<4|n(t.charCodeAt(r+1)),g=/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,f=t=>{if(typeof t!="string")return null;let r=t.trim();if(!g.test(r))return null;let o=r.length;if(o===4||o===5){let e=n(r.charCodeAt(1)),a=n(r.charCodeAt(2)),l=n(r.charCodeAt(3)),b$1=o===5?n(r.charCodeAt(4)):15;return {r:e|e<<4,g:a|a<<4,b:l|l<<4,alpha:b((b$1|b$1<<4)/255,3)}}return {r:u(r,1),g:u(r,3),b:u(r,5),alpha:o===9?b(u(r,7)/255,3):1}},m=({r:t,g:r,b:o,alpha:e})=>{let a$1="#"+c[a(Math.round(t),0,255)]+c[a(Math.round(r),0,255)]+c[a(Math.round(o),0,255)];return e<1?a$1+c[a(Math.round(e*255),0,255)]:a$1};export{f as a,m as b};//# sourceMappingURL=chunk-QP4SFM6Z.mjs.map | ||
| //# sourceMappingURL=chunk-QP4SFM6Z.mjs.map |
| {"version":3,"sources":["../src/colorModels/hex.ts"],"names":["HEX_BYTE","_","i","hexNibble","c","hexByte","s","HEX_RE","parseHex","input","len","rv","gv","bv","av","round","rgbToHex","r","g","b","alpha","hex","clamp"],"mappings":"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","file":"chunk-QP4SFM6Z.mjs","sourcesContent":["import { clamp, round } from '../helpers.js';\nimport type { RgbColor } from '../types.js';\n\nconst HEX_BYTE = /* #__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\nconst hexNibble = (c: number): number => (c & 0xf) + 9 * (c >> 6);\nconst hexByte = (s: string, i: number): number => (hexNibble(s.charCodeAt(i)) << 4) | hexNibble(s.charCodeAt(i + 1));\nconst HEX_RE = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;\n\nexport const parseHex = (input: unknown): RgbColor | null => {\n if (typeof input !== 'string') return null;\n const s = input.trim();\n if (!HEX_RE.test(s)) return null;\n const len = s.length;\n\n if (len === 4 || len === 5) {\n const rv = hexNibble(s.charCodeAt(1));\n const gv = hexNibble(s.charCodeAt(2));\n const bv = hexNibble(s.charCodeAt(3));\n const av = len === 5 ? hexNibble(s.charCodeAt(4)) : 15;\n return { r: rv | (rv << 4), g: gv | (gv << 4), b: bv | (bv << 4), alpha: round((av | (av << 4)) / 255, 3) };\n }\n\n return {\n r: hexByte(s, 1),\n g: hexByte(s, 3),\n b: hexByte(s, 5),\n alpha: len === 9 ? round(hexByte(s, 7) / 255, 3) : 1,\n };\n};\n\nexport const rgbToHex = ({ r, g, b, alpha }: RgbColor): string => {\n const hex =\n '#' +\n HEX_BYTE[clamp(Math.round(r), 0, 255)] +\n HEX_BYTE[clamp(Math.round(g), 0, 255)] +\n HEX_BYTE[clamp(Math.round(b), 0, 255)];\n return alpha < 1 ? hex + HEX_BYTE[clamp(Math.round(alpha * 255), 0, 255)] : hex;\n};\n"]} |
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 3 instances
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 3 instances
615536
2.74%782
1.82%