UNPKG

rampensau

Version:

Color ramp generator using curves within the HSL color model

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