UNPKG

rampensau

Version:

Color ramp generator using curves within the HSL color model

2 lines (1 loc) 5.37 kB
"use strict";var rampensau=(()=>{var T=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var v=Object.prototype.hasOwnProperty;var E=Math.pow;var V=(e,t)=>{for(var n in t)T(e,n,{get:t[n],enumerable:!0})},_=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of j(t))!v.call(e,s)&&s!==n&&T(e,s,{get:()=>t[s],enumerable:!(r=P(t,s))||r.enumerable});return e};var $=e=>_(T({},"__esModule",{value:!0}),e);var z={};V(z,{colorUtils:()=>w,generateColorRamp:()=>k,generateColorRampParams:()=>W,generateColorRampWithCurve:()=>G,utils:()=>C});var C={};V(C,{lerp:()=>R,makeCurveEasings:()=>H,pointOnCurve:()=>F,scaleSpreadArray:()=>q,shuffleArray:()=>A});function A(e,t=Math.random){let n=[...e],r=n.length,s;for(;r!=0;)s=Math.floor(t()*r),r--,[n[r],n[s]]=[n[s],n[r]];return n}var R=(e,t,n)=>t+e*(n-t),q=(e,t,n=0,r=R)=>{if(!e||e.length<2)throw new Error("valuesToFill array must have at least two values.");if(t<1&&n>0)throw new Error("Target size must be at least 1");if(t<e.length&&n===0)throw new Error("Target size must be greater than or equal to the valuesToFill array length.");if(n<=0){let i=t-e.length,c=e.map(p=>[p]);for(let p=0;p<i;p++){let o=p%(e.length-1);if(o>=0&&o<c.length){let m=c[o];m&&m.push(null)}}for(let p=0;p<c.length-1;p++){let o=c[p],m=c[p+1];if(!o||!m)continue;let h=o[0],f=m[0];if(!(h===void 0||f===void 0))for(let g=1;g<o.length;g++){let b=g/o.length;o[g]=r(b,h,f)}}return c.flat()}let s=[],u=n,l=1-n;for(let i=0;i<t;i++){let c=t===1?.5:i/(t-1),p=u+c*(l-u),o=0,m=e.map((d,M)=>M/(e.length-1));for(let d=1;d<m.length;d++){let M=m[d];if(M!==void 0&&p<=M){o=d-1;break}d===m.length-1&&(o=d-1)}o=Math.min(Math.max(0,o),e.length-2);let h=m[o]||0,f=m[o+1]||1,g=0;f>h&&(g=(p-h)/(f-h));let b=e[o],x=e[o+1];if(b===void 0||x===void 0)throw new Error(`Invalid segment values at index ${o}`);let y=r(g,b,x);s.push(y)}return s},F=(e,t)=>n=>{let r=Math.PI/2,s=r/1,u=n,l=0,i=0;if(e==="lam\xE9"){let c=u*r,p=2/(2+20*t),o=Math.cos(c),m=Math.sin(c);l=Math.sign(o)*E(Math.abs(o),p),i=Math.sign(m)*E(Math.abs(m),p)}else if(e==="arc")i=Math.cos(-Math.PI/2+n*s+t),l=Math.sin(Math.PI/2+n*s-t);else if(e==="pow")l=Math.pow(1-u,1-t),i=Math.pow(u,1-t);else if(e==="powY")l=Math.pow(1-u,t),i=Math.pow(u,1-t);else if(e==="powX")l=Math.pow(u,t),i=Math.pow(u,1-t);else if(typeof e=="function"){let[c,p]=e(n,t);l=c,i=p}else throw new Error(`pointOnCurve() curveAccent parameter is expected to be "lam\xE9" | "arc" | "pow" | "powY" | "powX" or a function but \`${e}\` given.`);return{x:l,y:i}},H=(e,t)=>{let n=F(e,t);return{sEasing:r=>n(r).x,lEasing:r=>n(r).y}};var w={};V(w,{colorHarmonies:()=>X,colorToCSS:()=>U,harveyHue:()=>B,hsv2hsl:()=>S,normalizeHue:()=>a,uniqueRandomHues:()=>Y});function a(e){return(e%360+360)%360}function B(e){if(e=a(e)/360,e===1||e===0)return e;e=1+e%1;let t=1/6,n=e%t/t*Math.PI/2,[r,s]=[t*Math.cos(n),t*Math.sin(n)],u=Math.floor(e*6);return[s,1/3-r,1/3+s,2/3-r,2/3+s,1-r][u%6]*360}var X={complementary:e=>[a(e),a(e+180)],splitComplementary:e=>[a(e),a(e+150),a(e-150)],triadic:e=>[a(e),a(e+120),a(e+240)],tetradic:e=>[a(e),a(e+90),a(e+180),a(e+270)],monochromatic:e=>[a(e),a(e)],doubleComplementary:e=>[a(e),a(e+180),a(e+30),a(e+210)],compound:e=>[a(e),a(e+180),a(e+60),a(e+240)],analogous:e=>[a(e),a(e+30),a(e+60),a(e+90),a(e+120),a(e+150)]};function Y({startHue:e=0,total:t=9,minHueDiffAngle:n=60,rndFn:r=Math.random}={}){n=Math.min(n,360/t);let s=e||r()*360,u=Array.from({length:Math.round(360/n)},(i,c)=>(s+c*n)%360),l=A(u,r);return l.length>t&&(l=l.slice(0,t)),l}var S=([e,t,n])=>{let r=n-n*t/2,s=Math.min(r,1-r),u=s===0?0:(n-r)/s;return[e,u,r]},O={oklch:e=>[e[2]*100+"%",e[1]*100+"%",e[0]],lch:e=>[e[2]*100+"%",e[1]*100+"%",e[0]],hsl:e=>[e[0],e[1]*100+"%",e[2]*100+"%"],hsv:e=>{let[t,n,r]=S(e);return[t,n*100+"%",r*100+"%"]}},U=(e,t="oklch")=>`${t==="hsv"?"hsl":t}(${O[t](e).join(" ")})`;function k({total:e=9,hStart:t=Math.random()*360,hStartCenter:n=.5,hEasing:r=m=>m,hCycles:s=1,sRange:u=[.4,.35],sEasing:l=m=>Math.pow(m,2),lRange:i=[Math.random()*.1,.9],lEasing:c=m=>Math.pow(m,1.5),transformFn:p=([m,h,f])=>[m,h,f],hueList:o}={}){let m=i[1]-i[0],h=u[1]-u[0],f=o&&o.length>0?o.length:e;return Array.from({length:f},(g,b)=>{let x=b/(f-1),y=1/f,d=o?o[b]:a(t+(1-r(x,y)-n)*(360*s)),M=u[0]+h*l(x,y),I=i[0]+m*c(x,y);return p([d,M,I],b)})}var G=({total:e=9,hStart:t=Math.random()*360,hStartCenter:n=.5,hCycles:r=1,sRange:s=[.4,.35],lRange:u=[Math.random()*.1,.9],hueList:l,curveMethod:i="lam\xE9",curveAccent:c=.5,transformFn:p=([o,m,h])=>[o,m,h]}={})=>{let{sEasing:o,lEasing:m}=H(i,c);return k({total:e,hStart:t,hStartCenter:n,hCycles:r,sRange:s,lRange:u,sEasing:o,lEasing:m,transformFn:p,hueList:l})};var W={total:{default:5,props:{min:4,max:50,step:1}},hStart:{default:0,props:{min:0,max:360,step:.1}},hCycles:{default:1,props:{min:-2,max:2,step:.001}},hStartCenter:{default:.5,props:{min:0,max:1,step:.001}},minLight:{default:Math.random()*.2,props:{min:0,max:1,step:.001}},maxLight:{default:.89+Math.random()*.11,props:{min:0,max:1,step:.001}},minSaturation:{default:Math.random()<.5?.4:.8+Math.random()*.2,props:{min:0,max:1,step:.001}},maxSaturation:{default:Math.random()<.5?.35:.9+Math.random()*.1,props:{min:0,max:1,step:.001}},curveMethod:{default:"lam\xE9",props:{options:["lam\xE9","sine","power","linear"]}},curveAccent:{default:.5,props:{min:0,max:5,step:.01}}};return $(z);})();