@frontfriend/tailwind 4.0.15 → 4.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
- var F=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var se=F((vo,Ae)=>{var Tn="https://app.dev.frontfriend.dev",An="https://registry-legacy.frontfriend.dev",_n=".cache/frontfriend",In={JS:["tokens.js","variables.js","semanticVariables.js","semanticDarkVariables.js","safelist.js","custom.js"],JSON:["fonts.json","icons.json","components-config.json","version.json","metadata.json"]},On={FF_ID:"FF_ID",FF_API_URL:"FF_API_URL",FF_USE_LOCAL:"FF_USE_LOCAL",FF_AUTH_TOKEN:"FF_AUTH_TOKEN"};Ae.exports={DEFAULT_API_URL:Tn,LEGACY_API_URL:An,CACHE_DIR_NAME:_n,CACHE_TTL_DAYS:7,CACHE_TTL_MS:6048e5,CACHE_FILES:In,ENV_VARS:On}});var Re=F((wo,Ne)=>{var L=require("fs"),_e=require("path"),En=require("os"),Mn=require("https"),Ln=require("http"),{URL:Pn}=require("url"),{DEFAULT_API_URL:Ie}=se(),Oe=_e.join(En.homedir(),".frontfriend"),P=_e.join(Oe,"credentials");function Dn(){return P}function Ee(){try{return L.existsSync(P)?JSON.parse(L.readFileSync(P,"utf8")):null}catch{return null}}function Me(e){L.mkdirSync(Oe,{recursive:!0,mode:448}),L.writeFileSync(P,`${JSON.stringify(e,null,2)}
3
- `,{mode:384});try{L.chmodSync(P,384)}catch{}}function Nn(){return L.existsSync(P)?(L.unlinkSync(P),!0):!1}function Le(e,n=60*1e3){return!(e!=null&&e.accessToken)||!e.expiresAt||Date.now()+n>=e.expiresAt}function K(e){let n=new Error(`${e}. Run \`frontfriend login\` to re-authenticate.`);return n.code="FF_AUTH_REFRESH_FAILED",n}function Pe(e,n,t){return new Promise((o,s)=>{let r=new Pn(e),i=r.protocol==="https:"?Mn:Ln,c=JSON.stringify(n||{}),a=i.request({hostname:r.hostname,port:r.port,path:`${r.pathname}${r.search}`,method:"POST",headers:{"content-type":"application/json","content-length":Buffer.byteLength(c),...t?{authorization:`Bearer ${t}`}:{}}},l=>{let f="";l.on("data",u=>{f+=u}),l.on("end",()=>{if(l.statusCode>=300&&l.statusCode<400){let h=l.headers.location?` to ${l.headers.location}`:"",y=new Error(`HTTP ${l.statusCode}: redirected${h}`);y.statusCode=l.statusCode,y.body=f,s(y);return}let u=null;try{u=f?JSON.parse(f):null}catch{let y=l.headers["content-type"]||"unknown content-type",m=new Error(`Expected JSON from FrontFriend API at ${e}, but received ${y} (HTTP ${l.statusCode}). Check FF_API_URL or pass --api-url with the FrontFriend app URL.`);if(m.statusCode=l.statusCode,m.body=f,l.statusCode>=400){s(m);return}s(m);return}if(l.statusCode>=400){let h=new Error((u==null?void 0:u.error_description)||(u==null?void 0:u.error)||`HTTP ${l.statusCode}`);h.statusCode=l.statusCode,h.body=u,s(h);return}o(u)})});a.on("error",s),a.write(c),a.end()})}async function De(e,n=Ie){if(!(e!=null&&e.refreshToken)||!(e!=null&&e.deviceId))throw K("FrontFriend session expired");let t;try{t=await Pe(`${n}/api/plugin/token`,{grant_type:"refresh_token",refresh_token:e.refreshToken,device_id:e.deviceId})}catch(s){throw K((s==null?void 0:s.message)||"Could not refresh FrontFriend session")}if(!(t!=null&&t.access_token)||!(t!=null&&t.refresh_token))throw K("Could not refresh FrontFriend session");let o={accessToken:t.access_token,refreshToken:t.refresh_token,deviceId:t.device_id||e.deviceId,expiresAt:Date.now()+(t.expires_in||900)*1e3,refreshExpiresAt:Date.now()+(t.refresh_expires_in||604800)*1e3,ffApiUrl:n};return Me(o),o}async function Rn(e={}){if(!e.skipCredentials){let n=Ee();if(n!=null&&n.accessToken||n!=null&&n.refreshToken){let t=e.baseURL||n.ffApiUrl||Ie;return n.accessToken&&!Le(n)?n.accessToken:(await De(n,t)).accessToken}}return e.envToken?e.envToken:e.legacyToken?(e.silent||console.warn("\u26A0\uFE0F auth-token in frontfriend.config.js is deprecated. Run `frontfriend login` to store credentials outside the repo."),e.legacyToken):null}Ne.exports={getCredentialsPath:Dn,readCredentials:Ee,writeCredentials:Me,deleteCredentials:Nn,isExpired:Le,postJson:Pe,refreshCredentials:De,resolveAuthToken:Rn,createAuthRefreshError:K}});var re=F((xo,Ue)=>{"use strict";Ue.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var Ve=F((Co,qe)=>{qe.exports=function(n){return!n||typeof n=="string"?!1:n instanceof Array||Array.isArray(n)||n.length>=0&&(n.splice instanceof Function||Object.getOwnPropertyDescriptor(n,n.length-1)&&n.constructor.name!=="String")}});var Je=F((ko,Be)=>{"use strict";var Un=Ve(),qn=Array.prototype.concat,Vn=Array.prototype.slice,ze=Be.exports=function(n){for(var t=[],o=0,s=n.length;o<s;o++){var r=n[o];Un(r)?t=qn.call(t,Vn.call(r)):t.push(r)}return t};ze.wrap=function(e){return function(){return e(ze(arguments))}}});var We=F((So,Ke)=>{var V=re(),z=Je(),He=Object.hasOwnProperty,Ge=Object.create(null);for(W in V)He.call(V,W)&&(Ge[V[W]]=W);var W,j=Ke.exports={to:{},get:{}};j.get=function(e){var n=e.substring(0,3).toLowerCase(),t,o;switch(n){case"hsl":t=j.get.hsl(e),o="hsl";break;case"hwb":t=j.get.hwb(e),o="hwb";break;default:t=j.get.rgb(e),o="rgb";break}return t?{model:o,value:t}:null};j.get.rgb=function(e){if(!e)return null;var n=/^#([a-f0-9]{3,4})$/i,t=/^#([a-f0-9]{6})([a-f0-9]{2})?$/i,o=/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/,s=/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/,r=/^(\w+)$/,i=[0,0,0,1],c,a,l;if(c=e.match(t)){for(l=c[2],c=c[1],a=0;a<3;a++){var f=a*2;i[a]=parseInt(c.slice(f,f+2),16)}l&&(i[3]=parseInt(l,16)/255)}else if(c=e.match(n)){for(c=c[1],l=c[3],a=0;a<3;a++)i[a]=parseInt(c[a]+c[a],16);l&&(i[3]=parseInt(l+l,16)/255)}else if(c=e.match(o)){for(a=0;a<3;a++)i[a]=parseInt(c[a+1],0);c[4]&&(c[5]?i[3]=parseFloat(c[4])*.01:i[3]=parseFloat(c[4]))}else if(c=e.match(s)){for(a=0;a<3;a++)i[a]=Math.round(parseFloat(c[a+1])*2.55);c[4]&&(c[5]?i[3]=parseFloat(c[4])*.01:i[3]=parseFloat(c[4]))}else return(c=e.match(r))?c[1]==="transparent"?[0,0,0,0]:He.call(V,c[1])?(i=V[c[1]],i[3]=1,i):null:null;for(a=0;a<3;a++)i[a]=I(i[a],0,255);return i[3]=I(i[3],0,1),i};j.get.hsl=function(e){if(!e)return null;var n=/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/,t=e.match(n);if(t){var o=parseFloat(t[4]),s=(parseFloat(t[1])%360+360)%360,r=I(parseFloat(t[2]),0,100),i=I(parseFloat(t[3]),0,100),c=I(isNaN(o)?1:o,0,1);return[s,r,i,c]}return null};j.get.hwb=function(e){if(!e)return null;var n=/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/,t=e.match(n);if(t){var o=parseFloat(t[4]),s=(parseFloat(t[1])%360+360)%360,r=I(parseFloat(t[2]),0,100),i=I(parseFloat(t[3]),0,100),c=I(isNaN(o)?1:o,0,1);return[s,r,i,c]}return null};j.to.hex=function(){var e=z(arguments);return"#"+Y(e[0])+Y(e[1])+Y(e[2])+(e[3]<1?Y(Math.round(e[3]*255)):"")};j.to.rgb=function(){var e=z(arguments);return e.length<4||e[3]===1?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"};j.to.rgb.percent=function(){var e=z(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),o=Math.round(e[2]/255*100);return e.length<4||e[3]===1?"rgb("+n+"%, "+t+"%, "+o+"%)":"rgba("+n+"%, "+t+"%, "+o+"%, "+e[3]+")"};j.to.hsl=function(){var e=z(arguments);return e.length<4||e[3]===1?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"};j.to.hwb=function(){var e=z(arguments),n="";return e.length>=4&&e[3]!==1&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"};j.to.keyword=function(e){return Ge[e.slice(0,3)]};function I(e,n,t){return Math.min(Math.max(n,e),t)}function Y(e){var n=Math.round(e).toString(16).toUpperCase();return n.length<2?"0"+n:n}});var ie=F((Fo,Ze)=>{var B=re(),Ye={};for(let e of Object.keys(B))Ye[B[e]]=e;var d={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};Ze.exports=d;for(let e of Object.keys(d)){if(!("channels"in d[e]))throw new Error("missing channels property: "+e);if(!("labels"in d[e]))throw new Error("missing channel labels property: "+e);if(d[e].labels.length!==d[e].channels)throw new Error("channel and label counts mismatch: "+e);let{channels:n,labels:t}=d[e];delete d[e].channels,delete d[e].labels,Object.defineProperty(d[e],"channels",{value:n}),Object.defineProperty(d[e],"labels",{value:t})}d.rgb.hsl=function(e){let n=e[0]/255,t=e[1]/255,o=e[2]/255,s=Math.min(n,t,o),r=Math.max(n,t,o),i=r-s,c,a;r===s?c=0:n===r?c=(t-o)/i:t===r?c=2+(o-n)/i:o===r&&(c=4+(n-t)/i),c=Math.min(c*60,360),c<0&&(c+=360);let l=(s+r)/2;return r===s?a=0:l<=.5?a=i/(r+s):a=i/(2-r-s),[c,a*100,l*100]};d.rgb.hsv=function(e){let n,t,o,s,r,i=e[0]/255,c=e[1]/255,a=e[2]/255,l=Math.max(i,c,a),f=l-Math.min(i,c,a),u=function(h){return(l-h)/6/f+1/2};return f===0?(s=0,r=0):(r=f/l,n=u(i),t=u(c),o=u(a),i===l?s=o-t:c===l?s=1/3+n-o:a===l&&(s=2/3+t-n),s<0?s+=1:s>1&&(s-=1)),[s*360,r*100,l*100]};d.rgb.hwb=function(e){let n=e[0],t=e[1],o=e[2],s=d.rgb.hsl(e)[0],r=1/255*Math.min(n,Math.min(t,o));return o=1-1/255*Math.max(n,Math.max(t,o)),[s,r*100,o*100]};d.rgb.cmyk=function(e){let n=e[0]/255,t=e[1]/255,o=e[2]/255,s=Math.min(1-n,1-t,1-o),r=(1-n-s)/(1-s)||0,i=(1-t-s)/(1-s)||0,c=(1-o-s)/(1-s)||0;return[r*100,i*100,c*100,s*100]};function zn(e,n){return(e[0]-n[0])**2+(e[1]-n[1])**2+(e[2]-n[2])**2}d.rgb.keyword=function(e){let n=Ye[e];if(n)return n;let t=1/0,o;for(let s of Object.keys(B)){let r=B[s],i=zn(e,r);i<t&&(t=i,o=s)}return o};d.keyword.rgb=function(e){return B[e]};d.rgb.xyz=function(e){let n=e[0]/255,t=e[1]/255,o=e[2]/255;n=n>.04045?((n+.055)/1.055)**2.4:n/12.92,t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,o=o>.04045?((o+.055)/1.055)**2.4:o/12.92;let s=n*.4124+t*.3576+o*.1805,r=n*.2126+t*.7152+o*.0722,i=n*.0193+t*.1192+o*.9505;return[s*100,r*100,i*100]};d.rgb.lab=function(e){let n=d.rgb.xyz(e),t=n[0],o=n[1],s=n[2];t/=95.047,o/=100,s/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,o=o>.008856?o**(1/3):7.787*o+16/116,s=s>.008856?s**(1/3):7.787*s+16/116;let r=116*o-16,i=500*(t-o),c=200*(o-s);return[r,i,c]};d.hsl.rgb=function(e){let n=e[0]/360,t=e[1]/100,o=e[2]/100,s,r,i;if(t===0)return i=o*255,[i,i,i];o<.5?s=o*(1+t):s=o+t-o*t;let c=2*o-s,a=[0,0,0];for(let l=0;l<3;l++)r=n+1/3*-(l-1),r<0&&r++,r>1&&r--,6*r<1?i=c+(s-c)*6*r:2*r<1?i=s:3*r<2?i=c+(s-c)*(2/3-r)*6:i=c,a[l]=i*255;return a};d.hsl.hsv=function(e){let n=e[0],t=e[1]/100,o=e[2]/100,s=t,r=Math.max(o,.01);o*=2,t*=o<=1?o:2-o,s*=r<=1?r:2-r;let i=(o+t)/2,c=o===0?2*s/(r+s):2*t/(o+t);return[n,c*100,i*100]};d.hsv.rgb=function(e){let n=e[0]/60,t=e[1]/100,o=e[2]/100,s=Math.floor(n)%6,r=n-Math.floor(n),i=255*o*(1-t),c=255*o*(1-t*r),a=255*o*(1-t*(1-r));switch(o*=255,s){case 0:return[o,a,i];case 1:return[c,o,i];case 2:return[i,o,a];case 3:return[i,c,o];case 4:return[a,i,o];case 5:return[o,i,c]}};d.hsv.hsl=function(e){let n=e[0],t=e[1]/100,o=e[2]/100,s=Math.max(o,.01),r,i;i=(2-t)*o;let c=(2-t)*s;return r=t*s,r/=c<=1?c:2-c,r=r||0,i/=2,[n,r*100,i*100]};d.hwb.rgb=function(e){let n=e[0]/360,t=e[1]/100,o=e[2]/100,s=t+o,r;s>1&&(t/=s,o/=s);let i=Math.floor(6*n),c=1-o;r=6*n-i,i&1&&(r=1-r);let a=t+r*(c-t),l,f,u;switch(i){default:case 6:case 0:l=c,f=a,u=t;break;case 1:l=a,f=c,u=t;break;case 2:l=t,f=c,u=a;break;case 3:l=t,f=a,u=c;break;case 4:l=a,f=t,u=c;break;case 5:l=c,f=t,u=a;break}return[l*255,f*255,u*255]};d.cmyk.rgb=function(e){let n=e[0]/100,t=e[1]/100,o=e[2]/100,s=e[3]/100,r=1-Math.min(1,n*(1-s)+s),i=1-Math.min(1,t*(1-s)+s),c=1-Math.min(1,o*(1-s)+s);return[r*255,i*255,c*255]};d.xyz.rgb=function(e){let n=e[0]/100,t=e[1]/100,o=e[2]/100,s,r,i;return s=n*3.2406+t*-1.5372+o*-.4986,r=n*-.9689+t*1.8758+o*.0415,i=n*.0557+t*-.204+o*1.057,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,r=r>.0031308?1.055*r**(1/2.4)-.055:r*12.92,i=i>.0031308?1.055*i**(1/2.4)-.055:i*12.92,s=Math.min(Math.max(0,s),1),r=Math.min(Math.max(0,r),1),i=Math.min(Math.max(0,i),1),[s*255,r*255,i*255]};d.xyz.lab=function(e){let n=e[0],t=e[1],o=e[2];n/=95.047,t/=100,o/=108.883,n=n>.008856?n**(1/3):7.787*n+16/116,t=t>.008856?t**(1/3):7.787*t+16/116,o=o>.008856?o**(1/3):7.787*o+16/116;let s=116*t-16,r=500*(n-t),i=200*(t-o);return[s,r,i]};d.lab.xyz=function(e){let n=e[0],t=e[1],o=e[2],s,r,i;r=(n+16)/116,s=t/500+r,i=r-o/200;let c=r**3,a=s**3,l=i**3;return r=c>.008856?c:(r-16/116)/7.787,s=a>.008856?a:(s-16/116)/7.787,i=l>.008856?l:(i-16/116)/7.787,s*=95.047,r*=100,i*=108.883,[s,r,i]};d.lab.lch=function(e){let n=e[0],t=e[1],o=e[2],s;s=Math.atan2(o,t)*360/2/Math.PI,s<0&&(s+=360);let i=Math.sqrt(t*t+o*o);return[n,i,s]};d.lch.lab=function(e){let n=e[0],t=e[1],s=e[2]/360*2*Math.PI,r=t*Math.cos(s),i=t*Math.sin(s);return[n,r,i]};d.rgb.ansi16=function(e,n=null){let[t,o,s]=e,r=n===null?d.rgb.hsv(e)[2]:n;if(r=Math.round(r/50),r===0)return 30;let i=30+(Math.round(s/255)<<2|Math.round(o/255)<<1|Math.round(t/255));return r===2&&(i+=60),i};d.hsv.ansi16=function(e){return d.rgb.ansi16(d.hsv.rgb(e),e[2])};d.rgb.ansi256=function(e){let n=e[0],t=e[1],o=e[2];return n===t&&t===o?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(o/255*5)};d.ansi16.rgb=function(e){let n=e%10;if(n===0||n===7)return e>50&&(n+=3.5),n=n/10.5*255,[n,n,n];let t=(~~(e>50)+1)*.5,o=(n&1)*t*255,s=(n>>1&1)*t*255,r=(n>>2&1)*t*255;return[o,s,r]};d.ansi256.rgb=function(e){if(e>=232){let r=(e-232)*10+8;return[r,r,r]}e-=16;let n,t=Math.floor(e/36)/5*255,o=Math.floor((n=e%36)/6)/5*255,s=n%6/5*255;return[t,o,s]};d.rgb.hex=function(e){let t=(((Math.round(e[0])&255)<<16)+((Math.round(e[1])&255)<<8)+(Math.round(e[2])&255)).toString(16).toUpperCase();return"000000".substring(t.length)+t};d.hex.rgb=function(e){let n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];let t=n[0];n[0].length===3&&(t=t.split("").map(c=>c+c).join(""));let o=parseInt(t,16),s=o>>16&255,r=o>>8&255,i=o&255;return[s,r,i]};d.rgb.hcg=function(e){let n=e[0]/255,t=e[1]/255,o=e[2]/255,s=Math.max(Math.max(n,t),o),r=Math.min(Math.min(n,t),o),i=s-r,c,a;return i<1?c=r/(1-i):c=0,i<=0?a=0:s===n?a=(t-o)/i%6:s===t?a=2+(o-n)/i:a=4+(n-t)/i,a/=6,a%=1,[a*360,i*100,c*100]};d.hsl.hcg=function(e){let n=e[1]/100,t=e[2]/100,o=t<.5?2*n*t:2*n*(1-t),s=0;return o<1&&(s=(t-.5*o)/(1-o)),[e[0],o*100,s*100]};d.hsv.hcg=function(e){let n=e[1]/100,t=e[2]/100,o=n*t,s=0;return o<1&&(s=(t-o)/(1-o)),[e[0],o*100,s*100]};d.hcg.rgb=function(e){let n=e[0]/360,t=e[1]/100,o=e[2]/100;if(t===0)return[o*255,o*255,o*255];let s=[0,0,0],r=n%1*6,i=r%1,c=1-i,a=0;switch(Math.floor(r)){case 0:s[0]=1,s[1]=i,s[2]=0;break;case 1:s[0]=c,s[1]=1,s[2]=0;break;case 2:s[0]=0,s[1]=1,s[2]=i;break;case 3:s[0]=0,s[1]=c,s[2]=1;break;case 4:s[0]=i,s[1]=0,s[2]=1;break;default:s[0]=1,s[1]=0,s[2]=c}return a=(1-t)*o,[(t*s[0]+a)*255,(t*s[1]+a)*255,(t*s[2]+a)*255]};d.hcg.hsv=function(e){let n=e[1]/100,t=e[2]/100,o=n+t*(1-n),s=0;return o>0&&(s=n/o),[e[0],s*100,o*100]};d.hcg.hsl=function(e){let n=e[1]/100,o=e[2]/100*(1-n)+.5*n,s=0;return o>0&&o<.5?s=n/(2*o):o>=.5&&o<1&&(s=n/(2*(1-o))),[e[0],s*100,o*100]};d.hcg.hwb=function(e){let n=e[1]/100,t=e[2]/100,o=n+t*(1-n);return[e[0],(o-n)*100,(1-o)*100]};d.hwb.hcg=function(e){let n=e[1]/100,o=1-e[2]/100,s=o-n,r=0;return s<1&&(r=(o-s)/(1-s)),[e[0],s*100,r*100]};d.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]};d.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]};d.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]};d.gray.hsl=function(e){return[0,0,e[0]]};d.gray.hsv=d.gray.hsl;d.gray.hwb=function(e){return[0,100,e[0]]};d.gray.cmyk=function(e){return[0,0,0,e[0]]};d.gray.lab=function(e){return[e[0],0,0]};d.gray.hex=function(e){let n=Math.round(e[0]/100*255)&255,o=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(o.length)+o};d.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}});var Xe=F((jo,Qe)=>{var Z=ie();function Bn(){let e={},n=Object.keys(Z);for(let t=n.length,o=0;o<t;o++)e[n[o]]={distance:-1,parent:null};return e}function Jn(e){let n=Bn(),t=[e];for(n[e].distance=0;t.length;){let o=t.pop(),s=Object.keys(Z[o]);for(let r=s.length,i=0;i<r;i++){let c=s[i],a=n[c];a.distance===-1&&(a.distance=n[o].distance+1,a.parent=o,t.unshift(c))}}return n}function Hn(e,n){return function(t){return n(e(t))}}function Gn(e,n){let t=[n[e].parent,e],o=Z[n[e].parent][e],s=n[e].parent;for(;n[s].parent;)t.unshift(n[s].parent),o=Hn(Z[n[s].parent][s],o),s=n[s].parent;return o.conversion=t,o}Qe.exports=function(e){let n=Jn(e),t={},o=Object.keys(n);for(let s=o.length,r=0;r<s;r++){let i=o[r];n[i].parent!==null&&(t[i]=Gn(i,n))}return t}});var nn=F(($o,en)=>{var ce=ie(),Kn=Xe(),R={},Wn=Object.keys(ce);function Yn(e){let n=function(...t){let o=t[0];return o==null?o:(o.length>1&&(t=o),e(t))};return"conversion"in e&&(n.conversion=e.conversion),n}function Zn(e){let n=function(...t){let o=t[0];if(o==null)return o;o.length>1&&(t=o);let s=e(t);if(typeof s=="object")for(let r=s.length,i=0;i<r;i++)s[i]=Math.round(s[i]);return s};return"conversion"in e&&(n.conversion=e.conversion),n}Wn.forEach(e=>{R[e]={},Object.defineProperty(R[e],"channels",{value:ce[e].channels}),Object.defineProperty(R[e],"labels",{value:ce[e].labels});let n=Kn(e);Object.keys(n).forEach(o=>{let s=n[o];R[e][o]=Zn(s),R[e][o].raw=Yn(s)})});en.exports=R});var sn=F((To,on)=>{var U=We(),$=nn(),tn=["keyword","gray","hex"],ae={};for(let e of Object.keys($))ae[[...$[e].labels].sort().join("")]=e;var Q={};function C(e,n){if(!(this instanceof C))return new C(e,n);if(n&&n in tn&&(n=null),n&&!(n in $))throw new Error("Unknown model: "+n);let t,o;if(e==null)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof C)this.model=e.model,this.color=[...e.color],this.valpha=e.valpha;else if(typeof e=="string"){let s=U.get(e);if(s===null)throw new Error("Unable to parse color from string: "+e);this.model=s.model,o=$[this.model].channels,this.color=s.value.slice(0,o),this.valpha=typeof s.value[o]=="number"?s.value[o]:1}else if(e.length>0){this.model=n||"rgb",o=$[this.model].channels;let s=Array.prototype.slice.call(e,0,o);this.color=le(s,o),this.valpha=typeof e[o]=="number"?e[o]:1}else if(typeof e=="number")this.model="rgb",this.color=[e>>16&255,e>>8&255,e&255],this.valpha=1;else{this.valpha=1;let s=Object.keys(e);"alpha"in e&&(s.splice(s.indexOf("alpha"),1),this.valpha=typeof e.alpha=="number"?e.alpha:0);let r=s.sort().join("");if(!(r in ae))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=ae[r];let{labels:i}=$[this.model],c=[];for(t=0;t<i.length;t++)c.push(e[i[t]]);this.color=le(c)}if(Q[this.model])for(o=$[this.model].channels,t=0;t<o;t++){let s=Q[this.model][t];s&&(this.color[t]=s(this.color[t]))}this.valpha=Math.max(0,Math.min(1,this.valpha)),Object.freeze&&Object.freeze(this)}C.prototype={toString(){return this.string()},toJSON(){return this[this.model]()},string(e){let n=this.model in U.to?this:this.rgb();n=n.round(typeof e=="number"?e:1);let t=n.valpha===1?n.color:[...n.color,this.valpha];return U.to[n.model](t)},percentString(e){let n=this.rgb().round(typeof e=="number"?e:1),t=n.valpha===1?n.color:[...n.color,this.valpha];return U.to.rgb.percent(t)},array(){return this.valpha===1?[...this.color]:[...this.color,this.valpha]},object(){let e={},{channels:n}=$[this.model],{labels:t}=$[this.model];for(let o=0;o<n;o++)e[t[o]]=this.color[o];return this.valpha!==1&&(e.alpha=this.valpha),e},unitArray(){let e=this.rgb().color;return e[0]/=255,e[1]/=255,e[2]/=255,this.valpha!==1&&e.push(this.valpha),e},unitObject(){let e=this.rgb().object();return e.r/=255,e.g/=255,e.b/=255,this.valpha!==1&&(e.alpha=this.valpha),e},round(e){return e=Math.max(e||0,0),new C([...this.color.map(Xn(e)),this.valpha],this.model)},alpha(e){return e!==void 0?new C([...this.color,Math.max(0,Math.min(1,e))],this.model):this.valpha},red:v("rgb",0,x(255)),green:v("rgb",1,x(255)),blue:v("rgb",2,x(255)),hue:v(["hsl","hsv","hsl","hwb","hcg"],0,e=>(e%360+360)%360),saturationl:v("hsl",1,x(100)),lightness:v("hsl",2,x(100)),saturationv:v("hsv",1,x(100)),value:v("hsv",2,x(100)),chroma:v("hcg",1,x(100)),gray:v("hcg",2,x(100)),white:v("hwb",1,x(100)),wblack:v("hwb",2,x(100)),cyan:v("cmyk",0,x(100)),magenta:v("cmyk",1,x(100)),yellow:v("cmyk",2,x(100)),black:v("cmyk",3,x(100)),x:v("xyz",0,x(95.047)),y:v("xyz",1,x(100)),z:v("xyz",2,x(108.833)),l:v("lab",0,x(100)),a:v("lab",1),b:v("lab",2),keyword(e){return e!==void 0?new C(e):$[this.model].keyword(this.color)},hex(e){return e!==void 0?new C(e):U.to.hex(this.rgb().round().color)},hexa(e){if(e!==void 0)return new C(e);let n=this.rgb().round().color,t=Math.round(this.valpha*255).toString(16).toUpperCase();return t.length===1&&(t="0"+t),U.to.hex(n)+t},rgbNumber(){let e=this.rgb().color;return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255},luminosity(){let e=this.rgb().color,n=[];for(let[t,o]of e.entries()){let s=o/255;n[t]=s<=.04045?s/12.92:((s+.055)/1.055)**2.4}return .2126*n[0]+.7152*n[1]+.0722*n[2]},contrast(e){let n=this.luminosity(),t=e.luminosity();return n>t?(n+.05)/(t+.05):(t+.05)/(n+.05)},level(e){let n=this.contrast(e);return n>=7?"AAA":n>=4.5?"AA":""},isDark(){let e=this.rgb().color;return(e[0]*2126+e[1]*7152+e[2]*722)/1e4<128},isLight(){return!this.isDark()},negate(){let e=this.rgb();for(let n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten(e){let n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken(e){let n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate(e){let n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate(e){let n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten(e){let n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken(e){let n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale(){let e=this.rgb().color,n=e[0]*.3+e[1]*.59+e[2]*.11;return C.rgb(n,n,n)},fade(e){return this.alpha(this.valpha-this.valpha*e)},opaquer(e){return this.alpha(this.valpha+this.valpha*e)},rotate(e){let n=this.hsl(),t=n.color[0];return t=(t+e)%360,t=t<0?360+t:t,n.color[0]=t,n},mix(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);let t=e.rgb(),o=this.rgb(),s=n===void 0?.5:n,r=2*s-1,i=t.alpha()-o.alpha(),c=((r*i===-1?r:(r+i)/(1+r*i))+1)/2,a=1-c;return C.rgb(c*t.red()+a*o.red(),c*t.green()+a*o.green(),c*t.blue()+a*o.blue(),t.alpha()*s+o.alpha()*(1-s))}};for(let e of Object.keys($)){if(tn.includes(e))continue;let{channels:n}=$[e];C.prototype[e]=function(...t){return this.model===e?new C(this):t.length>0?new C(t,e):new C([...et($[this.model][e].raw(this.color)),this.valpha],e)},C[e]=function(...t){let o=t[0];return typeof o=="number"&&(o=le(t,n)),new C(o,e)}}function Qn(e,n){return Number(e.toFixed(n))}function Xn(e){return function(n){return Qn(n,e)}}function v(e,n,t){e=Array.isArray(e)?e:[e];for(let o of e)(Q[o]||(Q[o]=[]))[n]=t;return e=e[0],function(o){let s;return o!==void 0?(t&&(o=t(o)),s=this[e](),s.color[n]=o,s):(s=this[e]().color[n],t&&(s=t(s)),s)}}function x(e){return function(n){return Math.max(0,Math.min(e,n))}}function et(e){return Array.isArray(e)?e:[e]}function le(e,n){for(let t=0;t<n;t++)typeof e[t]!="number"&&(e[t]=0);return e}on.exports=C});var fn=F((Ao,un)=>{var rn=sn(),ne={primary:"brand-mid","primary-foreground":"onbrand-mid",secondary:"neutral-subtle","secondary-foreground":"neutral-strong",destructive:"negative-mid","destructive-foreground":"onnegative-mid",background:"layer-below",foreground:"neutral-strong",card:"layer-raised","card-foreground":"neutral-strong",popover:"layer-popover","popover-foreground":"neutral-strong",muted:"neutral-subtle","muted-foreground":"neutral-mid",accent:"neutral-subtle","accent-foreground":"neutral-strong",border:"neutral-subtle",ring:"brand-mid","sidebar-foreground":"neutral-strong","sidebar-primary":"brand-mid","sidebar-primary-foreground":"onbrand-mid","sidebar-accent":"neutral-subtle","sidebar-accent-foreground":"neutral-strong","sidebar-border":"neutral-subtle","sidebar-ring":"brand-mid",success:"positive-mid","success-foreground":"onpositive-mid",info:"info-mid","info-foreground":"oninfo-mid",warning:"warning-mid","warning-foreground":"onwarning-mid",invert:"inverse-mid","invert-foreground":"neutral-low"},nt={brand:"#00858a",neutral:"#71717a",radius:"md"},tt=[...Object.keys(ne),"input"].sort((e,n)=>n.length-e.length);function ot(e){return e.split(/\s+/).filter(Boolean).map(cn).join(" ")}function st(e){let n=0,t=-1;for(let o=0;o<e.length;o+=1){let s=e[o];s==="["&&(n+=1),s==="]"&&(n=Math.max(0,n-1)),s===":"&&n===0&&(t=o)}return t===-1?{prefix:"",base:e}:{prefix:e.slice(0,t+1),base:e.slice(t+1)}}function cn(e){if(!e)return e;let{prefix:n,base:t}=st(e),o=t.match(/^(.*?)(\/\d{1,3})$/),s=o?o[1]:t,r=o?o[2]:"";if(s==="bg-black")return`${n}bg-overlay`;for(let i of tt){if(!s.endsWith(i))continue;let c=s.slice(0,s.length-i.length);if(!c.endsWith("-"))continue;let a=c.slice(0,-1);if(a)return i==="input"?`${n}${a}-${a==="bg"?"layer-control":"neutral-subtle"}${r}`:`${n}${a}-${ne[i]}${r}`}return e}var rt=new Set(["chart-1","chart-2","chart-3","chart-4","chart-5","sidebar","radius"]),an=/--(?:chart-\d+|sidebar(?:-[a-z-]+)?|radius)\s*:[^;{}]+;/gi;function it(e){if(!e)return"";let n=new Set,t=[],o=e.match(an)||[];for(let s of o){let r=s.replace(/\s+/g," ").trim(),i=r.slice(0,r.indexOf(":")).trim();n.has(i)||(n.add(i),t.push(` ${r}`))}return t.length===0?"":`:root {
2
+ var F=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var se=F((Co,_e)=>{var Tn="https://app.dev.frontfriend.dev",_n="https://registry-legacy.frontfriend.dev",In=".cache/frontfriend",On={JS:["tokens.js","variables.js","semanticVariables.js","semanticDarkVariables.js","safelist.js","custom.js"],JSON:["fonts.json","icons.json","components-config.json","version.json","metadata.json"]},En={FF_ID:"FF_ID",FF_API_URL:"FF_API_URL",FF_USE_LOCAL:"FF_USE_LOCAL",FF_AUTH_TOKEN:"FF_AUTH_TOKEN"};_e.exports={DEFAULT_API_URL:Tn,LEGACY_API_URL:_n,CACHE_DIR_NAME:In,CACHE_TTL_DAYS:7,CACHE_TTL_MS:6048e5,CACHE_FILES:On,ENV_VARS:En}});var Ue=F((ko,Re)=>{var L=require("fs"),Ie=require("path"),Mn=require("os"),Ln=require("https"),Pn=require("http"),{URL:Dn}=require("url"),{DEFAULT_API_URL:Oe}=se(),Ee=Ie.join(Mn.homedir(),".frontfriend"),P=Ie.join(Ee,"credentials");function Nn(){return P}function Me(){try{return L.existsSync(P)?JSON.parse(L.readFileSync(P,"utf8")):null}catch{return null}}function Le(e){L.mkdirSync(Ee,{recursive:!0,mode:448}),L.writeFileSync(P,`${JSON.stringify(e,null,2)}
3
+ `,{mode:384});try{L.chmodSync(P,384)}catch{}}function Rn(){return L.existsSync(P)?(L.unlinkSync(P),!0):!1}function Pe(e,n=60*1e3){return!(e!=null&&e.accessToken)||!e.expiresAt||Date.now()+n>=e.expiresAt}function K(e){let n=new Error(`${e}. Run \`frontfriend login\` to re-authenticate.`);return n.code="FF_AUTH_REFRESH_FAILED",n}function De(e,n,t){return new Promise((o,r)=>{let s=new Dn(e),i=s.protocol==="https:"?Ln:Pn,c=JSON.stringify(n||{}),a=i.request({hostname:s.hostname,port:s.port,path:`${s.pathname}${s.search}`,method:"POST",headers:{"content-type":"application/json","content-length":Buffer.byteLength(c),...t?{authorization:`Bearer ${t}`}:{}}},l=>{let f="";l.on("data",d=>{f+=d}),l.on("end",()=>{if(l.statusCode>=300&&l.statusCode<400){let u=l.headers.location?` to ${l.headers.location}`:"",y=new Error(`HTTP ${l.statusCode}: redirected${u}`);y.statusCode=l.statusCode,y.body=f,r(y);return}let d=null;try{d=f?JSON.parse(f):null}catch{let y=l.headers["content-type"]||"unknown content-type",m=new Error(`Expected JSON from FrontFriend API at ${e}, but received ${y} (HTTP ${l.statusCode}). Check FF_API_URL or pass --api-url with the FrontFriend app URL.`);if(m.statusCode=l.statusCode,m.body=f,l.statusCode>=400){r(m);return}r(m);return}if(l.statusCode>=400){let u=new Error((d==null?void 0:d.error_description)||(d==null?void 0:d.error)||`HTTP ${l.statusCode}`);u.statusCode=l.statusCode,u.body=d,r(u);return}o(d)})});a.on("error",r),a.write(c),a.end()})}async function Ne(e,n=Oe){if(!(e!=null&&e.refreshToken)||!(e!=null&&e.deviceId))throw K("FrontFriend session expired");let t;try{t=await De(`${n}/api/plugin/token`,{grant_type:"refresh_token",refresh_token:e.refreshToken,device_id:e.deviceId})}catch(r){throw K((r==null?void 0:r.message)||"Could not refresh FrontFriend session")}if(!(t!=null&&t.access_token)||!(t!=null&&t.refresh_token))throw K("Could not refresh FrontFriend session");let o={accessToken:t.access_token,refreshToken:t.refresh_token,deviceId:t.device_id||e.deviceId,expiresAt:Date.now()+(t.expires_in||900)*1e3,refreshExpiresAt:Date.now()+(t.refresh_expires_in||604800)*1e3,ffApiUrl:n};return Le(o),o}async function Un(e={}){if(!e.skipCredentials){let n=Me();if(n!=null&&n.accessToken||n!=null&&n.refreshToken){let t=e.baseURL||n.ffApiUrl||Oe;return n.accessToken&&!Pe(n)?n.accessToken:(await Ne(n,t)).accessToken}}return e.envToken?e.envToken:e.legacyToken?(e.silent||console.warn("\u26A0\uFE0F auth-token in frontfriend.config.js is deprecated. Run `frontfriend login` to store credentials outside the repo."),e.legacyToken):null}Re.exports={getCredentialsPath:Nn,readCredentials:Me,writeCredentials:Le,deleteCredentials:Rn,isExpired:Pe,postJson:De,refreshCredentials:Ne,resolveAuthToken:Un,createAuthRefreshError:K}});var ie=F((So,qe)=>{"use strict";qe.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var Ve=F((Fo,ze)=>{ze.exports=function(n){return!n||typeof n=="string"?!1:n instanceof Array||Array.isArray(n)||n.length>=0&&(n.splice instanceof Function||Object.getOwnPropertyDescriptor(n,n.length-1)&&n.constructor.name!=="String")}});var He=F(($o,Je)=>{"use strict";var qn=Ve(),zn=Array.prototype.concat,Vn=Array.prototype.slice,Be=Je.exports=function(n){for(var t=[],o=0,r=n.length;o<r;o++){var s=n[o];qn(s)?t=zn.call(t,Vn.call(s)):t.push(s)}return t};Be.wrap=function(e){return function(){return e(Be(arguments))}}});var Ye=F((jo,We)=>{var z=ie(),V=He(),Ge=Object.hasOwnProperty,Ke=Object.create(null);for(W in z)Ge.call(z,W)&&(Ke[z[W]]=W);var W,$=We.exports={to:{},get:{}};$.get=function(e){var n=e.substring(0,3).toLowerCase(),t,o;switch(n){case"hsl":t=$.get.hsl(e),o="hsl";break;case"hwb":t=$.get.hwb(e),o="hwb";break;default:t=$.get.rgb(e),o="rgb";break}return t?{model:o,value:t}:null};$.get.rgb=function(e){if(!e)return null;var n=/^#([a-f0-9]{3,4})$/i,t=/^#([a-f0-9]{6})([a-f0-9]{2})?$/i,o=/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/,r=/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/,s=/^(\w+)$/,i=[0,0,0,1],c,a,l;if(c=e.match(t)){for(l=c[2],c=c[1],a=0;a<3;a++){var f=a*2;i[a]=parseInt(c.slice(f,f+2),16)}l&&(i[3]=parseInt(l,16)/255)}else if(c=e.match(n)){for(c=c[1],l=c[3],a=0;a<3;a++)i[a]=parseInt(c[a]+c[a],16);l&&(i[3]=parseInt(l+l,16)/255)}else if(c=e.match(o)){for(a=0;a<3;a++)i[a]=parseInt(c[a+1],0);c[4]&&(c[5]?i[3]=parseFloat(c[4])*.01:i[3]=parseFloat(c[4]))}else if(c=e.match(r)){for(a=0;a<3;a++)i[a]=Math.round(parseFloat(c[a+1])*2.55);c[4]&&(c[5]?i[3]=parseFloat(c[4])*.01:i[3]=parseFloat(c[4]))}else return(c=e.match(s))?c[1]==="transparent"?[0,0,0,0]:Ge.call(z,c[1])?(i=z[c[1]],i[3]=1,i):null:null;for(a=0;a<3;a++)i[a]=I(i[a],0,255);return i[3]=I(i[3],0,1),i};$.get.hsl=function(e){if(!e)return null;var n=/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/,t=e.match(n);if(t){var o=parseFloat(t[4]),r=(parseFloat(t[1])%360+360)%360,s=I(parseFloat(t[2]),0,100),i=I(parseFloat(t[3]),0,100),c=I(isNaN(o)?1:o,0,1);return[r,s,i,c]}return null};$.get.hwb=function(e){if(!e)return null;var n=/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/,t=e.match(n);if(t){var o=parseFloat(t[4]),r=(parseFloat(t[1])%360+360)%360,s=I(parseFloat(t[2]),0,100),i=I(parseFloat(t[3]),0,100),c=I(isNaN(o)?1:o,0,1);return[r,s,i,c]}return null};$.to.hex=function(){var e=V(arguments);return"#"+Y(e[0])+Y(e[1])+Y(e[2])+(e[3]<1?Y(Math.round(e[3]*255)):"")};$.to.rgb=function(){var e=V(arguments);return e.length<4||e[3]===1?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"};$.to.rgb.percent=function(){var e=V(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),o=Math.round(e[2]/255*100);return e.length<4||e[3]===1?"rgb("+n+"%, "+t+"%, "+o+"%)":"rgba("+n+"%, "+t+"%, "+o+"%, "+e[3]+")"};$.to.hsl=function(){var e=V(arguments);return e.length<4||e[3]===1?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"};$.to.hwb=function(){var e=V(arguments),n="";return e.length>=4&&e[3]!==1&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"};$.to.keyword=function(e){return Ke[e.slice(0,3)]};function I(e,n,t){return Math.min(Math.max(n,e),t)}function Y(e){var n=Math.round(e).toString(16).toUpperCase();return n.length<2?"0"+n:n}});var ce=F((Ao,Qe)=>{var B=ie(),Ze={};for(let e of Object.keys(B))Ze[B[e]]=e;var h={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};Qe.exports=h;for(let e of Object.keys(h)){if(!("channels"in h[e]))throw new Error("missing channels property: "+e);if(!("labels"in h[e]))throw new Error("missing channel labels property: "+e);if(h[e].labels.length!==h[e].channels)throw new Error("channel and label counts mismatch: "+e);let{channels:n,labels:t}=h[e];delete h[e].channels,delete h[e].labels,Object.defineProperty(h[e],"channels",{value:n}),Object.defineProperty(h[e],"labels",{value:t})}h.rgb.hsl=function(e){let n=e[0]/255,t=e[1]/255,o=e[2]/255,r=Math.min(n,t,o),s=Math.max(n,t,o),i=s-r,c,a;s===r?c=0:n===s?c=(t-o)/i:t===s?c=2+(o-n)/i:o===s&&(c=4+(n-t)/i),c=Math.min(c*60,360),c<0&&(c+=360);let l=(r+s)/2;return s===r?a=0:l<=.5?a=i/(s+r):a=i/(2-s-r),[c,a*100,l*100]};h.rgb.hsv=function(e){let n,t,o,r,s,i=e[0]/255,c=e[1]/255,a=e[2]/255,l=Math.max(i,c,a),f=l-Math.min(i,c,a),d=function(u){return(l-u)/6/f+1/2};return f===0?(r=0,s=0):(s=f/l,n=d(i),t=d(c),o=d(a),i===l?r=o-t:c===l?r=1/3+n-o:a===l&&(r=2/3+t-n),r<0?r+=1:r>1&&(r-=1)),[r*360,s*100,l*100]};h.rgb.hwb=function(e){let n=e[0],t=e[1],o=e[2],r=h.rgb.hsl(e)[0],s=1/255*Math.min(n,Math.min(t,o));return o=1-1/255*Math.max(n,Math.max(t,o)),[r,s*100,o*100]};h.rgb.cmyk=function(e){let n=e[0]/255,t=e[1]/255,o=e[2]/255,r=Math.min(1-n,1-t,1-o),s=(1-n-r)/(1-r)||0,i=(1-t-r)/(1-r)||0,c=(1-o-r)/(1-r)||0;return[s*100,i*100,c*100,r*100]};function Bn(e,n){return(e[0]-n[0])**2+(e[1]-n[1])**2+(e[2]-n[2])**2}h.rgb.keyword=function(e){let n=Ze[e];if(n)return n;let t=1/0,o;for(let r of Object.keys(B)){let s=B[r],i=Bn(e,s);i<t&&(t=i,o=r)}return o};h.keyword.rgb=function(e){return B[e]};h.rgb.xyz=function(e){let n=e[0]/255,t=e[1]/255,o=e[2]/255;n=n>.04045?((n+.055)/1.055)**2.4:n/12.92,t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,o=o>.04045?((o+.055)/1.055)**2.4:o/12.92;let r=n*.4124+t*.3576+o*.1805,s=n*.2126+t*.7152+o*.0722,i=n*.0193+t*.1192+o*.9505;return[r*100,s*100,i*100]};h.rgb.lab=function(e){let n=h.rgb.xyz(e),t=n[0],o=n[1],r=n[2];t/=95.047,o/=100,r/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,o=o>.008856?o**(1/3):7.787*o+16/116,r=r>.008856?r**(1/3):7.787*r+16/116;let s=116*o-16,i=500*(t-o),c=200*(o-r);return[s,i,c]};h.hsl.rgb=function(e){let n=e[0]/360,t=e[1]/100,o=e[2]/100,r,s,i;if(t===0)return i=o*255,[i,i,i];o<.5?r=o*(1+t):r=o+t-o*t;let c=2*o-r,a=[0,0,0];for(let l=0;l<3;l++)s=n+1/3*-(l-1),s<0&&s++,s>1&&s--,6*s<1?i=c+(r-c)*6*s:2*s<1?i=r:3*s<2?i=c+(r-c)*(2/3-s)*6:i=c,a[l]=i*255;return a};h.hsl.hsv=function(e){let n=e[0],t=e[1]/100,o=e[2]/100,r=t,s=Math.max(o,.01);o*=2,t*=o<=1?o:2-o,r*=s<=1?s:2-s;let i=(o+t)/2,c=o===0?2*r/(s+r):2*t/(o+t);return[n,c*100,i*100]};h.hsv.rgb=function(e){let n=e[0]/60,t=e[1]/100,o=e[2]/100,r=Math.floor(n)%6,s=n-Math.floor(n),i=255*o*(1-t),c=255*o*(1-t*s),a=255*o*(1-t*(1-s));switch(o*=255,r){case 0:return[o,a,i];case 1:return[c,o,i];case 2:return[i,o,a];case 3:return[i,c,o];case 4:return[a,i,o];case 5:return[o,i,c]}};h.hsv.hsl=function(e){let n=e[0],t=e[1]/100,o=e[2]/100,r=Math.max(o,.01),s,i;i=(2-t)*o;let c=(2-t)*r;return s=t*r,s/=c<=1?c:2-c,s=s||0,i/=2,[n,s*100,i*100]};h.hwb.rgb=function(e){let n=e[0]/360,t=e[1]/100,o=e[2]/100,r=t+o,s;r>1&&(t/=r,o/=r);let i=Math.floor(6*n),c=1-o;s=6*n-i,i&1&&(s=1-s);let a=t+s*(c-t),l,f,d;switch(i){default:case 6:case 0:l=c,f=a,d=t;break;case 1:l=a,f=c,d=t;break;case 2:l=t,f=c,d=a;break;case 3:l=t,f=a,d=c;break;case 4:l=a,f=t,d=c;break;case 5:l=c,f=t,d=a;break}return[l*255,f*255,d*255]};h.cmyk.rgb=function(e){let n=e[0]/100,t=e[1]/100,o=e[2]/100,r=e[3]/100,s=1-Math.min(1,n*(1-r)+r),i=1-Math.min(1,t*(1-r)+r),c=1-Math.min(1,o*(1-r)+r);return[s*255,i*255,c*255]};h.xyz.rgb=function(e){let n=e[0]/100,t=e[1]/100,o=e[2]/100,r,s,i;return r=n*3.2406+t*-1.5372+o*-.4986,s=n*-.9689+t*1.8758+o*.0415,i=n*.0557+t*-.204+o*1.057,r=r>.0031308?1.055*r**(1/2.4)-.055:r*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,i=i>.0031308?1.055*i**(1/2.4)-.055:i*12.92,r=Math.min(Math.max(0,r),1),s=Math.min(Math.max(0,s),1),i=Math.min(Math.max(0,i),1),[r*255,s*255,i*255]};h.xyz.lab=function(e){let n=e[0],t=e[1],o=e[2];n/=95.047,t/=100,o/=108.883,n=n>.008856?n**(1/3):7.787*n+16/116,t=t>.008856?t**(1/3):7.787*t+16/116,o=o>.008856?o**(1/3):7.787*o+16/116;let r=116*t-16,s=500*(n-t),i=200*(t-o);return[r,s,i]};h.lab.xyz=function(e){let n=e[0],t=e[1],o=e[2],r,s,i;s=(n+16)/116,r=t/500+s,i=s-o/200;let c=s**3,a=r**3,l=i**3;return s=c>.008856?c:(s-16/116)/7.787,r=a>.008856?a:(r-16/116)/7.787,i=l>.008856?l:(i-16/116)/7.787,r*=95.047,s*=100,i*=108.883,[r,s,i]};h.lab.lch=function(e){let n=e[0],t=e[1],o=e[2],r;r=Math.atan2(o,t)*360/2/Math.PI,r<0&&(r+=360);let i=Math.sqrt(t*t+o*o);return[n,i,r]};h.lch.lab=function(e){let n=e[0],t=e[1],r=e[2]/360*2*Math.PI,s=t*Math.cos(r),i=t*Math.sin(r);return[n,s,i]};h.rgb.ansi16=function(e,n=null){let[t,o,r]=e,s=n===null?h.rgb.hsv(e)[2]:n;if(s=Math.round(s/50),s===0)return 30;let i=30+(Math.round(r/255)<<2|Math.round(o/255)<<1|Math.round(t/255));return s===2&&(i+=60),i};h.hsv.ansi16=function(e){return h.rgb.ansi16(h.hsv.rgb(e),e[2])};h.rgb.ansi256=function(e){let n=e[0],t=e[1],o=e[2];return n===t&&t===o?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(o/255*5)};h.ansi16.rgb=function(e){let n=e%10;if(n===0||n===7)return e>50&&(n+=3.5),n=n/10.5*255,[n,n,n];let t=(~~(e>50)+1)*.5,o=(n&1)*t*255,r=(n>>1&1)*t*255,s=(n>>2&1)*t*255;return[o,r,s]};h.ansi256.rgb=function(e){if(e>=232){let s=(e-232)*10+8;return[s,s,s]}e-=16;let n,t=Math.floor(e/36)/5*255,o=Math.floor((n=e%36)/6)/5*255,r=n%6/5*255;return[t,o,r]};h.rgb.hex=function(e){let t=(((Math.round(e[0])&255)<<16)+((Math.round(e[1])&255)<<8)+(Math.round(e[2])&255)).toString(16).toUpperCase();return"000000".substring(t.length)+t};h.hex.rgb=function(e){let n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];let t=n[0];n[0].length===3&&(t=t.split("").map(c=>c+c).join(""));let o=parseInt(t,16),r=o>>16&255,s=o>>8&255,i=o&255;return[r,s,i]};h.rgb.hcg=function(e){let n=e[0]/255,t=e[1]/255,o=e[2]/255,r=Math.max(Math.max(n,t),o),s=Math.min(Math.min(n,t),o),i=r-s,c,a;return i<1?c=s/(1-i):c=0,i<=0?a=0:r===n?a=(t-o)/i%6:r===t?a=2+(o-n)/i:a=4+(n-t)/i,a/=6,a%=1,[a*360,i*100,c*100]};h.hsl.hcg=function(e){let n=e[1]/100,t=e[2]/100,o=t<.5?2*n*t:2*n*(1-t),r=0;return o<1&&(r=(t-.5*o)/(1-o)),[e[0],o*100,r*100]};h.hsv.hcg=function(e){let n=e[1]/100,t=e[2]/100,o=n*t,r=0;return o<1&&(r=(t-o)/(1-o)),[e[0],o*100,r*100]};h.hcg.rgb=function(e){let n=e[0]/360,t=e[1]/100,o=e[2]/100;if(t===0)return[o*255,o*255,o*255];let r=[0,0,0],s=n%1*6,i=s%1,c=1-i,a=0;switch(Math.floor(s)){case 0:r[0]=1,r[1]=i,r[2]=0;break;case 1:r[0]=c,r[1]=1,r[2]=0;break;case 2:r[0]=0,r[1]=1,r[2]=i;break;case 3:r[0]=0,r[1]=c,r[2]=1;break;case 4:r[0]=i,r[1]=0,r[2]=1;break;default:r[0]=1,r[1]=0,r[2]=c}return a=(1-t)*o,[(t*r[0]+a)*255,(t*r[1]+a)*255,(t*r[2]+a)*255]};h.hcg.hsv=function(e){let n=e[1]/100,t=e[2]/100,o=n+t*(1-n),r=0;return o>0&&(r=n/o),[e[0],r*100,o*100]};h.hcg.hsl=function(e){let n=e[1]/100,o=e[2]/100*(1-n)+.5*n,r=0;return o>0&&o<.5?r=n/(2*o):o>=.5&&o<1&&(r=n/(2*(1-o))),[e[0],r*100,o*100]};h.hcg.hwb=function(e){let n=e[1]/100,t=e[2]/100,o=n+t*(1-n);return[e[0],(o-n)*100,(1-o)*100]};h.hwb.hcg=function(e){let n=e[1]/100,o=1-e[2]/100,r=o-n,s=0;return r<1&&(s=(o-r)/(1-r)),[e[0],r*100,s*100]};h.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]};h.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]};h.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]};h.gray.hsl=function(e){return[0,0,e[0]]};h.gray.hsv=h.gray.hsl;h.gray.hwb=function(e){return[0,100,e[0]]};h.gray.cmyk=function(e){return[0,0,0,e[0]]};h.gray.lab=function(e){return[e[0],0,0]};h.gray.hex=function(e){let n=Math.round(e[0]/100*255)&255,o=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(o.length)+o};h.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}});var en=F((To,Xe)=>{var Z=ce();function Jn(){let e={},n=Object.keys(Z);for(let t=n.length,o=0;o<t;o++)e[n[o]]={distance:-1,parent:null};return e}function Hn(e){let n=Jn(),t=[e];for(n[e].distance=0;t.length;){let o=t.pop(),r=Object.keys(Z[o]);for(let s=r.length,i=0;i<s;i++){let c=r[i],a=n[c];a.distance===-1&&(a.distance=n[o].distance+1,a.parent=o,t.unshift(c))}}return n}function Gn(e,n){return function(t){return n(e(t))}}function Kn(e,n){let t=[n[e].parent,e],o=Z[n[e].parent][e],r=n[e].parent;for(;n[r].parent;)t.unshift(n[r].parent),o=Gn(Z[n[r].parent][r],o),r=n[r].parent;return o.conversion=t,o}Xe.exports=function(e){let n=Hn(e),t={},o=Object.keys(n);for(let r=o.length,s=0;s<r;s++){let i=o[s];n[i].parent!==null&&(t[i]=Kn(i,n))}return t}});var tn=F((_o,nn)=>{var ae=ce(),Wn=en(),R={},Yn=Object.keys(ae);function Zn(e){let n=function(...t){let o=t[0];return o==null?o:(o.length>1&&(t=o),e(t))};return"conversion"in e&&(n.conversion=e.conversion),n}function Qn(e){let n=function(...t){let o=t[0];if(o==null)return o;o.length>1&&(t=o);let r=e(t);if(typeof r=="object")for(let s=r.length,i=0;i<s;i++)r[i]=Math.round(r[i]);return r};return"conversion"in e&&(n.conversion=e.conversion),n}Yn.forEach(e=>{R[e]={},Object.defineProperty(R[e],"channels",{value:ae[e].channels}),Object.defineProperty(R[e],"labels",{value:ae[e].labels});let n=Wn(e);Object.keys(n).forEach(o=>{let r=n[o];R[e][o]=Qn(r),R[e][o].raw=Zn(r)})});nn.exports=R});var sn=F((Io,rn)=>{var U=Ye(),j=tn(),on=["keyword","gray","hex"],le={};for(let e of Object.keys(j))le[[...j[e].labels].sort().join("")]=e;var Q={};function k(e,n){if(!(this instanceof k))return new k(e,n);if(n&&n in on&&(n=null),n&&!(n in j))throw new Error("Unknown model: "+n);let t,o;if(e==null)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof k)this.model=e.model,this.color=[...e.color],this.valpha=e.valpha;else if(typeof e=="string"){let r=U.get(e);if(r===null)throw new Error("Unable to parse color from string: "+e);this.model=r.model,o=j[this.model].channels,this.color=r.value.slice(0,o),this.valpha=typeof r.value[o]=="number"?r.value[o]:1}else if(e.length>0){this.model=n||"rgb",o=j[this.model].channels;let r=Array.prototype.slice.call(e,0,o);this.color=ue(r,o),this.valpha=typeof e[o]=="number"?e[o]:1}else if(typeof e=="number")this.model="rgb",this.color=[e>>16&255,e>>8&255,e&255],this.valpha=1;else{this.valpha=1;let r=Object.keys(e);"alpha"in e&&(r.splice(r.indexOf("alpha"),1),this.valpha=typeof e.alpha=="number"?e.alpha:0);let s=r.sort().join("");if(!(s in le))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=le[s];let{labels:i}=j[this.model],c=[];for(t=0;t<i.length;t++)c.push(e[i[t]]);this.color=ue(c)}if(Q[this.model])for(o=j[this.model].channels,t=0;t<o;t++){let r=Q[this.model][t];r&&(this.color[t]=r(this.color[t]))}this.valpha=Math.max(0,Math.min(1,this.valpha)),Object.freeze&&Object.freeze(this)}k.prototype={toString(){return this.string()},toJSON(){return this[this.model]()},string(e){let n=this.model in U.to?this:this.rgb();n=n.round(typeof e=="number"?e:1);let t=n.valpha===1?n.color:[...n.color,this.valpha];return U.to[n.model](t)},percentString(e){let n=this.rgb().round(typeof e=="number"?e:1),t=n.valpha===1?n.color:[...n.color,this.valpha];return U.to.rgb.percent(t)},array(){return this.valpha===1?[...this.color]:[...this.color,this.valpha]},object(){let e={},{channels:n}=j[this.model],{labels:t}=j[this.model];for(let o=0;o<n;o++)e[t[o]]=this.color[o];return this.valpha!==1&&(e.alpha=this.valpha),e},unitArray(){let e=this.rgb().color;return e[0]/=255,e[1]/=255,e[2]/=255,this.valpha!==1&&e.push(this.valpha),e},unitObject(){let e=this.rgb().object();return e.r/=255,e.g/=255,e.b/=255,this.valpha!==1&&(e.alpha=this.valpha),e},round(e){return e=Math.max(e||0,0),new k([...this.color.map(et(e)),this.valpha],this.model)},alpha(e){return e!==void 0?new k([...this.color,Math.max(0,Math.min(1,e))],this.model):this.valpha},red:v("rgb",0,x(255)),green:v("rgb",1,x(255)),blue:v("rgb",2,x(255)),hue:v(["hsl","hsv","hsl","hwb","hcg"],0,e=>(e%360+360)%360),saturationl:v("hsl",1,x(100)),lightness:v("hsl",2,x(100)),saturationv:v("hsv",1,x(100)),value:v("hsv",2,x(100)),chroma:v("hcg",1,x(100)),gray:v("hcg",2,x(100)),white:v("hwb",1,x(100)),wblack:v("hwb",2,x(100)),cyan:v("cmyk",0,x(100)),magenta:v("cmyk",1,x(100)),yellow:v("cmyk",2,x(100)),black:v("cmyk",3,x(100)),x:v("xyz",0,x(95.047)),y:v("xyz",1,x(100)),z:v("xyz",2,x(108.833)),l:v("lab",0,x(100)),a:v("lab",1),b:v("lab",2),keyword(e){return e!==void 0?new k(e):j[this.model].keyword(this.color)},hex(e){return e!==void 0?new k(e):U.to.hex(this.rgb().round().color)},hexa(e){if(e!==void 0)return new k(e);let n=this.rgb().round().color,t=Math.round(this.valpha*255).toString(16).toUpperCase();return t.length===1&&(t="0"+t),U.to.hex(n)+t},rgbNumber(){let e=this.rgb().color;return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255},luminosity(){let e=this.rgb().color,n=[];for(let[t,o]of e.entries()){let r=o/255;n[t]=r<=.04045?r/12.92:((r+.055)/1.055)**2.4}return .2126*n[0]+.7152*n[1]+.0722*n[2]},contrast(e){let n=this.luminosity(),t=e.luminosity();return n>t?(n+.05)/(t+.05):(t+.05)/(n+.05)},level(e){let n=this.contrast(e);return n>=7?"AAA":n>=4.5?"AA":""},isDark(){let e=this.rgb().color;return(e[0]*2126+e[1]*7152+e[2]*722)/1e4<128},isLight(){return!this.isDark()},negate(){let e=this.rgb();for(let n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten(e){let n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken(e){let n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate(e){let n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate(e){let n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten(e){let n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken(e){let n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale(){let e=this.rgb().color,n=e[0]*.3+e[1]*.59+e[2]*.11;return k.rgb(n,n,n)},fade(e){return this.alpha(this.valpha-this.valpha*e)},opaquer(e){return this.alpha(this.valpha+this.valpha*e)},rotate(e){let n=this.hsl(),t=n.color[0];return t=(t+e)%360,t=t<0?360+t:t,n.color[0]=t,n},mix(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);let t=e.rgb(),o=this.rgb(),r=n===void 0?.5:n,s=2*r-1,i=t.alpha()-o.alpha(),c=((s*i===-1?s:(s+i)/(1+s*i))+1)/2,a=1-c;return k.rgb(c*t.red()+a*o.red(),c*t.green()+a*o.green(),c*t.blue()+a*o.blue(),t.alpha()*r+o.alpha()*(1-r))}};for(let e of Object.keys(j)){if(on.includes(e))continue;let{channels:n}=j[e];k.prototype[e]=function(...t){return this.model===e?new k(this):t.length>0?new k(t,e):new k([...nt(j[this.model][e].raw(this.color)),this.valpha],e)},k[e]=function(...t){let o=t[0];return typeof o=="number"&&(o=ue(t,n)),new k(o,e)}}function Xn(e,n){return Number(e.toFixed(n))}function et(e){return function(n){return Xn(n,e)}}function v(e,n,t){e=Array.isArray(e)?e:[e];for(let o of e)(Q[o]||(Q[o]=[]))[n]=t;return e=e[0],function(o){let r;return o!==void 0?(t&&(o=t(o)),r=this[e](),r.color[n]=o,r):(r=this[e]().color[n],t&&(r=t(r)),r)}}function x(e){return function(n){return Math.max(0,Math.min(e,n))}}function nt(e){return Array.isArray(e)?e:[e]}function ue(e,n){for(let t=0;t<n;t++)typeof e[t]!="number"&&(e[t]=0);return e}rn.exports=k});var dn=F((Oo,fn)=>{var cn=sn(),ne={primary:"brand-mid","primary-foreground":"onbrand-mid",secondary:"neutral-subtle","secondary-foreground":"neutral-strong",destructive:"negative-mid","destructive-foreground":"onnegative-mid",background:"layer-below",foreground:"neutral-strong",card:"layer-raised","card-foreground":"neutral-strong",popover:"layer-popover","popover-foreground":"neutral-strong",muted:"neutral-subtle","muted-foreground":"neutral-mid",accent:"neutral-subtle","accent-foreground":"neutral-strong",border:"neutral-subtle",ring:"brand-mid","sidebar-foreground":"neutral-strong","sidebar-primary":"brand-mid","sidebar-primary-foreground":"onbrand-mid","sidebar-accent":"neutral-subtle","sidebar-accent-foreground":"neutral-strong","sidebar-border":"neutral-subtle","sidebar-ring":"brand-mid",success:"positive-mid","success-foreground":"onpositive-mid",info:"info-mid","info-foreground":"oninfo-mid",warning:"warning-mid","warning-foreground":"onwarning-mid",invert:"inverse-mid","invert-foreground":"neutral-low"},tt={brand:"#00858a",neutral:"#71717a",radius:"md"},ot=[...Object.keys(ne),"input"].sort((e,n)=>n.length-e.length);function rt(e){return e.split(/\s+/).filter(Boolean).map(an).join(" ")}function st(e){let n=0,t=-1;for(let o=0;o<e.length;o+=1){let r=e[o];r==="["&&(n+=1),r==="]"&&(n=Math.max(0,n-1)),r===":"&&n===0&&(t=o)}return t===-1?{prefix:"",base:e}:{prefix:e.slice(0,t+1),base:e.slice(t+1)}}function an(e){if(!e)return e;let{prefix:n,base:t}=st(e),o=t.match(/^(.*?)(\/\d{1,3})$/),r=o?o[1]:t,s=o?o[2]:"";if(r==="bg-black")return`${n}bg-overlay`;for(let i of ot){if(!r.endsWith(i))continue;let c=r.slice(0,r.length-i.length);if(!c.endsWith("-"))continue;let a=c.slice(0,-1);if(a)return i==="input"?`${n}${a}-${a==="bg"?"layer-control":"neutral-subtle"}${s}`:`${n}${a}-${ne[i]}${s}`}return e}var it=new Set(["chart-1","chart-2","chart-3","chart-4","chart-5","sidebar","radius"]),ln=/--(?:chart-\d+|sidebar(?:-[a-z-]+)?|radius)\s*:[^;{}]+;/gi;function ct(e){if(!e)return"";let n=new Set,t=[],o=e.match(ln)||[];for(let r of o){let s=r.replace(/\s+/g," ").trim(),i=s.slice(0,s.indexOf(":")).trim();n.has(i)||(n.add(i),t.push(` ${s}`))}return t.length===0?"":`:root {
4
4
  ${t.join(`
5
5
  `)}
6
6
  }
7
- `}function ct(e){if(!e)return{scaffold:"",custom:""};let n=s=>/^\s*@(?:import|plugin|source|config|reference)\b/.test(s),t=[],o=[];for(let s of e.split(`
8
- `))(n(s)?t:o).push(s);return{scaffold:t.join(`
7
+ `}function at(e){if(!e)return{scaffold:"",custom:""};let n=r=>/^\s*@(?:import|plugin|source|config|reference)\b/.test(r),t=[],o=[];for(let r of e.split(`
8
+ `))(n(r)?t:o).push(r);return{scaffold:t.join(`
9
9
  `).trim(),custom:o.join(`
10
10
  `).replace(/\n{3,}/g,`
11
11
 
12
- `).trim()}}function X(e){let n={},t=/--([a-z0-9-]+)\s*:\s*([^;{}]+);/gi,o;for(;o=t.exec(e||"");)n[o[1].toLowerCase()]=o[2].trim();return n}function ue(e,n){let t=n.exec(e||"");if(!t)return"";let o=(e||"").indexOf("{",t.index);if(o===-1)return"";let s=0;for(let r=o;r<e.length;r+=1){let i=e[r];if(i==="{"&&(s+=1),i==="}"&&(s-=1),s===0)return e.slice(o+1,r)}return""}function ln(e){let n=e||"",t=ue(n,/:root\s*(?:,\s*:host\s*)?/i),o=ue(n,/(?:\.dark|:root\.dark|\[data-theme=["']?dark["']?\])\s*/i)||ue(n,/@media\s*\(\s*prefers-color-scheme\s*:\s*dark\s*\)\s*/i);return{light:Object.keys(X(t)).length?X(t):X(n),dark:X(o)}}function ee(e){if(!e)return null;let n=String(e).trim(),t=n.match(/^#([0-9a-f]{3,8})$/i);if(t){let s=t[1];return s.length===3||s.length===4?`#${s[0]}${s[0]}${s[1]}${s[1]}${s[2]}${s[2]}`.toLowerCase():`#${s.slice(0,6)}`.toLowerCase()}try{if(/^hsl(a)?\(/i.test(n)||/^rgb(a)?\(/i.test(n))return rn(n).hex().toLowerCase();if(/^-?\d+(\.\d+)?\s+[\d.]+%\s+[\d.]+%(?:\s*\/\s*[\d.]+%?)?$/.test(n))return rn(`hsl(${n})`).hex().toLowerCase()}catch{return null}let o=n.match(/^oklch\(\s*([.\d]+%?)\s+([.\d]+)\s+([.\d]+)(?:deg)?(?:\s*\/\s*[\d.]+%?)?\s*\)$/i);if(o){let s=o[1].endsWith("%")?Number(o[1].slice(0,-1))/100:Number(o[1]),r=Number(o[2]),i=Number(o[3]);if([s,r,i].every(Number.isFinite))return lt({l:s,c:r,h:i})}return null}function at(e){return e<0?0:e>1?1:e}function fe(e){return e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055}function de(e){return Math.round(at(e)*255).toString(16).padStart(2,"0")}function lt({l:e,c:n,h:t}){let o=t*Math.PI/180,s=n*Math.cos(o),r=n*Math.sin(o),i=e+.3963377774*s+.2158037573*r,c=e-.1055613458*s-.0638541728*r,a=e-.0894841775*s-1.291485548*r,l=i*i*i,f=c*c*c,u=a*a*a,h=1.2270138511*l-.5577999807*f+.281256149*u,y=-.0405801784*l+1.1122568696*f-.0716766787*u,m=-.0763812845*l-.4214819784*f+1.5861632204*u,b=h*3.2404542-y*1.5371385-m*.4985314,k=-h*.969266+y*1.8760108+m*.041556,A=h*.0556434-y*.2040259+m*1.0572252;return`#${de(fe(b))}${de(fe(k))}${de(fe(A))}`}function ut(e){let n=String(e||"").trim();if(!n||n.includes("var("))return;let t=parseFloat(n);if(!Number.isFinite(t))return;let o=n.endsWith("px")?t/16:t;return o===0?"none":o<=.25?"sm":o<=.5?"md":o<=.75?"lg":o<=1?"xl":o<=1.5?"2xl":"3xl"}function ft(e){let{light:n}=ln(e),t=0,o={...nt},s={};for(let[c,a]of Object.entries(n)){let l=ne[c],f=ee(a);!l||!f||(t+=1,l==="brand-mid"&&(o.brand=f),l==="neutral-mid"&&(o.neutral=f),l==="negative-mid"&&(s.negative=f),l==="positive-mid"&&(s.positive=f),l==="warning-mid"&&(s.warning=f),l==="info-mid"&&(s.info=f))}let r=ee(n["muted-foreground"])||ee(n.foreground);r&&(o.neutral=r,t+=1);let i=ut(n.radius);return i&&(o.radius=i,t+=1),Object.keys(s).length>0&&(o.status=s),t>0?o:null}un.exports={SHADCN_FF_TOKEN_MAP:ne,CSSVAR_TOKENS:rt,SHADCN_CSSVAR_PATTERN:an,shadcnToFf:ot,shadcnTokenToFf:cn,extractShadcnCssVars:it,liftHostCustomCss:ct,parseShadcnThemeVars:ln,shadcnCssVarsToThemeStudioRecipe:ft,normalizeHex:ee}});var hn=F((_o,dn)=>{var he={lucide:["lucide-react"],tabler:["@tabler/icons-react"],hugeicons:["@hugeicons/react","@hugeicons/core-free-icons"],phosphor:["@phosphor-icons/react"],remixicon:["@remixicon/react"]};function dt(e,n){let t=e&&e.iconLibrary||n||"lucide";return he[t]?t:"lucide"}function ht(e,n){return typeof e!="string"?e:e.replace(/(from\s+["']\.\/adapters\/)[a-z]+(["'])/,`$1${n}$2`)}function gt(e,n){return(e||[]).filter(t=>{let o=String(t).replace(/\.(tsx|ts|jsx|js)$/,"");return!!he[o]&&o!==n})}dn.exports={ICON_LIBRARY_DEPS:he,resolveIconLibraryName:dt,swapIconAdapterImport:ht,adapterFilesToPrune:gt}});var gn=F((Io,pt)=>{pt.exports={name:"@frontfriend/tailwind",version:"4.0.15",description:"Design token management for Tailwind CSS",main:"./dist/index.js",types:"./dist/types/index.d.ts",bin:{frontfriend:"dist/cli.js"},exports:{".":{types:"./dist/types/index.d.ts",browser:"./dist/browser.mjs",import:"./dist/index.mjs",require:"./dist/index.js",default:"./dist/index.js"},"./runtime":{types:"./dist/runtime.d.ts",default:"./dist/runtime.js"},"./next":{types:"./dist/next.d.ts",default:"./dist/next.js"},"./vite":{types:"./dist/vite.d.ts",default:"./dist/vite.mjs"},"./lib/react/utils":{types:"./dist/lib/react/utils.d.ts",default:"./dist/lib/react/utils.mjs"},"./lib/vue/utils":{types:"./dist/lib/vue/utils.d.ts",default:"./dist/lib/vue/utils.mjs"},"./ffdc":{types:"./dist/ffdc.d.ts",default:"./dist/ffdc.js"},"./theme":"./src/theme.css","./theme.css":"./src/theme.css","./components-config-schema":{types:"./dist/components-config-schema.d.ts",require:"./dist/components-config-schema.js",import:"./dist/components-config-schema.js",default:"./dist/components-config-schema.js"}},scripts:{test:"jest",build:"node scripts/build.js",prepublishOnly:"npm run build"},keywords:["tailwindcss","design-tokens","frontfriend"],author:"Donux",license:"SEE LICENSE IN LICENSE",files:["dist/","src/theme.css","scripts/","README.md","LICENSE"],dependencies:{commander:"^11.0.0",dotenv:"^16.0.0",color:"^4.2.3",clsx:"^2.0.0","tailwind-merge":"^2.0.0","tw-animate-css":"^1.3.4"},peerDependencies:{tailwindcss:"^3.0.0 || ^4.0.0","tw-animate-css":"^1.3.0",react:"^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",vue:">=3.0.0"},devDependencies:{jest:"^29.0.0",esbuild:"^0.19.0",glob:"^10.0.0"}}});var pe=F((Oo,ge)=>{var O=require("fs"),J=require("path");function pn(e={}){let n=e.projectRoot||process.cwd(),t=J.join(n,"node_modules",".cache","frontfriend","icons.json"),o=e.outputPath||J.join(n,"types","frontfriend.d.ts");O.existsSync(t)||(console.error('[FrontFriend] Error: icons.json not found. Please run "npx frontfriend init" first.'),process.exit(1));try{let a=function(m){for(let b of Object.values(m))typeof b=="string"?c.add(b):typeof b=="object"&&b!==null&&a(b)},l=function(m,b=" "){let k=[];for(let[A,M]of Object.entries(m))typeof M=="string"?k.push(`${b}${A}: '${M}';`):typeof M=="object"&&M!==null&&(k.push(`${b}${A}: {`),k.push(l(M,b+" ")),k.push(`${b}};`));return k.join(`
13
- `)};var s=a,r=l;let i=JSON.parse(O.readFileSync(t,"utf-8")),c=new Set;a(i);let f=Array.from(c).map(m=>`'${m}'`).join(" | "),u=`// Generated by @frontfriend/tailwind
12
+ `).trim()}}function X(e){let n={},t=/--([a-z0-9-]+)\s*:\s*([^;{}]+);/gi,o;for(;o=t.exec(e||"");)n[o[1].toLowerCase()]=o[2].trim();return n}function fe(e,n){let t=n.exec(e||"");if(!t)return"";let o=(e||"").indexOf("{",t.index);if(o===-1)return"";let r=0;for(let s=o;s<e.length;s+=1){let i=e[s];if(i==="{"&&(r+=1),i==="}"&&(r-=1),r===0)return e.slice(o+1,s)}return""}function un(e){let n=e||"",t=fe(n,/:root\s*(?:,\s*:host\s*)?/i),o=fe(n,/(?:\.dark|:root\.dark|\[data-theme=["']?dark["']?\])\s*/i)||fe(n,/@media\s*\(\s*prefers-color-scheme\s*:\s*dark\s*\)\s*/i);return{light:Object.keys(X(t)).length?X(t):X(n),dark:X(o)}}function ee(e){if(!e)return null;let n=String(e).trim(),t=n.match(/^#([0-9a-f]{3,8})$/i);if(t){let r=t[1];return r.length===3||r.length===4?`#${r[0]}${r[0]}${r[1]}${r[1]}${r[2]}${r[2]}`.toLowerCase():`#${r.slice(0,6)}`.toLowerCase()}try{if(/^hsl(a)?\(/i.test(n)||/^rgb(a)?\(/i.test(n))return cn(n).hex().toLowerCase();if(/^-?\d+(\.\d+)?\s+[\d.]+%\s+[\d.]+%(?:\s*\/\s*[\d.]+%?)?$/.test(n))return cn(`hsl(${n})`).hex().toLowerCase()}catch{return null}let o=n.match(/^oklch\(\s*([.\d]+%?)\s+([.\d]+)\s+([.\d]+)(?:deg)?(?:\s*\/\s*[\d.]+%?)?\s*\)$/i);if(o){let r=o[1].endsWith("%")?Number(o[1].slice(0,-1))/100:Number(o[1]),s=Number(o[2]),i=Number(o[3]);if([r,s,i].every(Number.isFinite))return ut({l:r,c:s,h:i})}return null}function lt(e){return e<0?0:e>1?1:e}function de(e){return e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055}function he(e){return Math.round(lt(e)*255).toString(16).padStart(2,"0")}function ut({l:e,c:n,h:t}){let o=t*Math.PI/180,r=n*Math.cos(o),s=n*Math.sin(o),i=e+.3963377774*r+.2158037573*s,c=e-.1055613458*r-.0638541728*s,a=e-.0894841775*r-1.291485548*s,l=i*i*i,f=c*c*c,d=a*a*a,u=1.2270138511*l-.5577999807*f+.281256149*d,y=-.0405801784*l+1.1122568696*f-.0716766787*d,m=-.0763812845*l-.4214819784*f+1.5861632204*d,b=u*3.2404542-y*1.5371385-m*.4985314,C=-u*.969266+y*1.8760108+m*.041556,A=u*.0556434-y*.2040259+m*1.0572252;return`#${he(de(b))}${he(de(C))}${he(de(A))}`}function ft(e){let n=String(e||"").trim();if(!n||n.includes("var("))return;let t=parseFloat(n);if(!Number.isFinite(t))return;let o=n.endsWith("px")?t/16:t;return o===0?"none":o<=.25?"sm":o<=.5?"md":o<=.75?"lg":o<=1?"xl":o<=1.5?"2xl":"3xl"}function dt(e){let{light:n}=un(e),t=0,o={...tt},r={};for(let[c,a]of Object.entries(n)){let l=ne[c],f=ee(a);!l||!f||(t+=1,l==="brand-mid"&&(o.brand=f),l==="neutral-mid"&&(o.neutral=f),l==="negative-mid"&&(r.negative=f),l==="positive-mid"&&(r.positive=f),l==="warning-mid"&&(r.warning=f),l==="info-mid"&&(r.info=f))}let s=ee(n["muted-foreground"])||ee(n.foreground);s&&(o.neutral=s,t+=1);let i=ft(n.radius);return i&&(o.radius=i,t+=1),Object.keys(r).length>0&&(o.status=r),t>0?o:null}fn.exports={SHADCN_FF_TOKEN_MAP:ne,CSSVAR_TOKENS:it,SHADCN_CSSVAR_PATTERN:ln,shadcnToFf:rt,shadcnTokenToFf:an,extractShadcnCssVars:ct,liftHostCustomCss:at,parseShadcnThemeVars:un,shadcnCssVarsToThemeStudioRecipe:dt,normalizeHex:ee}});var gn=F((Eo,hn)=>{var ge={lucide:["lucide-react"],tabler:["@tabler/icons-react"],hugeicons:["@hugeicons/react","@hugeicons/core-free-icons"],phosphor:["@phosphor-icons/react"],remixicon:["@remixicon/react"]};function ht(e,n){let t=e&&e.iconLibrary||n||"lucide";return ge[t]?t:"lucide"}function gt(e,n){return typeof e!="string"?e:e.replace(/(from\s+["']\.\/adapters\/)[a-z]+(["'])/,`$1${n}$2`)}function pt(e,n){return(e||[]).filter(t=>{let o=String(t).replace(/\.(tsx|ts|jsx|js)$/,"");return!!ge[o]&&o!==n})}hn.exports={ICON_LIBRARY_DEPS:ge,resolveIconLibraryName:ht,swapIconAdapterImport:gt,adapterFilesToPrune:pt}});var pn=F((Mo,mt)=>{mt.exports={name:"@frontfriend/tailwind",version:"4.0.16",description:"Design token management for Tailwind CSS",main:"./dist/index.js",types:"./dist/types/index.d.ts",bin:{frontfriend:"dist/cli.js"},exports:{".":{types:"./dist/types/index.d.ts",browser:"./dist/browser.mjs",import:"./dist/index.mjs",require:"./dist/index.js",default:"./dist/index.js"},"./runtime":{types:"./dist/runtime.d.ts",default:"./dist/runtime.js"},"./next":{types:"./dist/next.d.ts",default:"./dist/next.js"},"./vite":{types:"./dist/vite.d.ts",default:"./dist/vite.mjs"},"./lib/react/utils":{types:"./dist/lib/react/utils.d.ts",default:"./dist/lib/react/utils.mjs"},"./lib/vue/utils":{types:"./dist/lib/vue/utils.d.ts",default:"./dist/lib/vue/utils.mjs"},"./ffdc":{types:"./dist/ffdc.d.ts",default:"./dist/ffdc.js"},"./theme":"./src/theme.css","./theme.css":"./src/theme.css","./components-config-schema":{types:"./dist/components-config-schema.d.ts",require:"./dist/components-config-schema.js",import:"./dist/components-config-schema.js",default:"./dist/components-config-schema.js"}},scripts:{test:"jest",build:"node scripts/build.js",prepublishOnly:"npm run build"},keywords:["tailwindcss","design-tokens","frontfriend"],author:"Donux",license:"SEE LICENSE IN LICENSE",files:["dist/","src/theme.css","scripts/","README.md","LICENSE"],dependencies:{commander:"^11.0.0",dotenv:"^16.0.0",color:"^4.2.3",clsx:"^2.0.0","tailwind-merge":"^2.0.0","tw-animate-css":"^1.3.4"},peerDependencies:{tailwindcss:"^3.0.0 || ^4.0.0","tw-animate-css":"^1.3.0",react:"^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",vue:">=3.0.0"},devDependencies:{jest:"^29.0.0",esbuild:"^0.19.0",glob:"^10.0.0"}}});var me=F((Lo,pe)=>{var O=require("fs"),J=require("path");function mn(e={}){let n=e.projectRoot||process.cwd(),t=J.join(n,"node_modules",".cache","frontfriend","icons.json"),o=e.outputPath||J.join(n,"types","frontfriend.d.ts");O.existsSync(t)||(console.error('[FrontFriend] Error: icons.json not found. Please run "npx frontfriend init" first.'),process.exit(1));try{let a=function(m){for(let b of Object.values(m))typeof b=="string"?c.add(b):typeof b=="object"&&b!==null&&a(b)},l=function(m,b=" "){let C=[];for(let[A,M]of Object.entries(m))typeof M=="string"?C.push(`${b}${A}: '${M}';`):typeof M=="object"&&M!==null&&(C.push(`${b}${A}: {`),C.push(l(M,b+" ")),C.push(`${b}};`));return C.join(`
13
+ `)};var r=a,s=l;let i=JSON.parse(O.readFileSync(t,"utf-8")),c=new Set;a(i);let f=Array.from(c).map(m=>`'${m}'`).join(" | "),d=`// Generated by @frontfriend/tailwind
14
14
  // DO NOT EDIT THIS FILE MANUALLY
15
15
 
16
16
  import type { IconSetStructure } from '@frontfriend/tailwind';
@@ -45,47 +45,47 @@ declare module '@/src/components/ui/icon' {
45
45
  declare module '@/src/components/ui/icon/Icon.vue' {
46
46
  export type IconName = ${f||"string"};
47
47
  }
48
- `,h=J.dirname(o);O.existsSync(h)||O.mkdirSync(h,{recursive:!0}),O.writeFileSync(o,u),console.log("[FrontFriend] \u2713 Generated types at",J.relative(n,o));let y=J.join(n,"tsconfig.json");if(O.existsSync(y)){let m=JSON.parse(O.readFileSync(y,"utf-8"));m.include||(m.include=[]);let b="types/**/*.d.ts";m.include.includes(b)||(m.include.push(b),O.writeFileSync(y,JSON.stringify(m,null,2)),console.log("[FrontFriend] \u2713 Updated tsconfig.json to include generated types"))}}catch(i){console.error("[FrontFriend] Error generating icon types:",i.message),process.exit(1)}}require.main===ge&&pn();ge.exports={generateIconTypes:pn}});var{loadEnvLocal:mt}=require("./lib/core/env-utils");mt();var{Command:yt}=require("commander"),G=require("./lib/core/config-loader"),D=require("./lib/core/cache-manager"),{APIClient:bn}=require("./lib/core/api-client"),{getCredentialsPath:bt,writeCredentials:vt,readCredentials:wt,deleteCredentials:xt,postJson:me}=Re(),{ComponentDownloader:Ct}=require("./lib/core/component-downloader"),kt=require("./lib/core/token-processor"),{shadcnToFf:St,liftHostCustomCss:Ft,shadcnCssVarsToThemeStudioRecipe:jt}=fn(),{ICON_LIBRARY_DEPS:xe,resolveIconLibraryName:$t,swapIconAdapterImport:Tt,adapterFilesToPrune:At}=hn(),{DEFAULT_API_URL:ye}=se(),{ConfigError:E,APIError:_t,CacheError:Ce}=require("./lib/core/errors"),g=require("path"),p=require("fs"),{spawn:It}=require("child_process"),T=new yt,{version:vn}=gn(),Ot="https://registry.frontfriend.dev/r/v4",mn='@import "@frontfriend/tailwind/theme.css";',wn=["app/globals.css","src/app/globals.css","styles/globals.css","src/styles/globals.css","src/styles.css","src/index.css","src/style.css"];function Et(e){let n=(e||process.env.FF_REGISTRY_URL||Ot).replace(/\/+$/,"");return/\/r\/(legacy|v4)$/i.test(n)?n:`${n}/r/v4`}function _(e){try{return JSON.parse(p.readFileSync(e,"utf8"))}catch{return null}}function H(e,n){p.mkdirSync(g.dirname(e),{recursive:!0}),p.writeFileSync(e,`${JSON.stringify(n,null,2)}
49
- `)}var xn=g.join("node_modules",".cache","frontfriend","migrated-components.json");function Mt(e){let n=_(g.join(e,"package.json"))||{},t={...n.dependencies||{},...n.devDependencies||{}};return t.vue||t["@vitejs/plugin-vue"]?"vue":"react"}function Lt(e){let n=_(g.join(e,"package.json"))||{},t={...n.dependencies||{},...n.devDependencies||{}};return t.next||p.existsSync(g.join(e,"next.config.js"))||p.existsSync(g.join(e,"next.config.mjs"))?"next":t.vite||p.existsSync(g.join(e,"vite.config.ts"))||p.existsSync(g.join(e,"vite.config.js"))?"vite":null}function Pt(e,n,t){let o=g.join(e,"components.json");if(!p.existsSync(o))return!1;let s=_(o)||{};s.registries=s.registries||{};let r=`${Et(t)}/${n}/{name}.json`,i=xe[s.iconLibrary]?s.iconLibrary:void 0,c=i&&i!=="lucide"?{url:r,params:{iconLibrary:i}}:r;return JSON.stringify(s.registries["@frontfriend"])===JSON.stringify(c)?!1:(s.registries["@frontfriend"]=c,H(o,s),!0)}function Dt(e){let n=g.join(e,"package.json"),t=_(n);return t?(t.dependencies=t.dependencies||{},t.dependencies["@frontfriend/tailwind"]?!1:(t.dependencies["@frontfriend/tailwind"]="^4.0.0",H(n,t),!0)):!1}function Nt(e){let n=["next.config.js","next.config.mjs","next.config.ts"].map(t=>g.join(e,t)).find(t=>p.existsSync(t));return n?p.readFileSync(n,"utf8").includes("@frontfriend/tailwind/next")?"present":"manual":(p.writeFileSync(g.join(e,"next.config.js"),`const frontfriend = require('@frontfriend/tailwind/next');
48
+ `,u=J.dirname(o);O.existsSync(u)||O.mkdirSync(u,{recursive:!0}),O.writeFileSync(o,d),console.log("[FrontFriend] \u2713 Generated types at",J.relative(n,o));let y=J.join(n,"tsconfig.json");if(O.existsSync(y)){let m=JSON.parse(O.readFileSync(y,"utf-8"));m.include||(m.include=[]);let b="types/**/*.d.ts";m.include.includes(b)||(m.include.push(b),O.writeFileSync(y,JSON.stringify(m,null,2)),console.log("[FrontFriend] \u2713 Updated tsconfig.json to include generated types"))}}catch(i){console.error("[FrontFriend] Error generating icon types:",i.message),process.exit(1)}}require.main===pe&&mn();pe.exports={generateIconTypes:mn}});var{loadEnvLocal:yt}=require("./lib/core/env-utils");yt();var{Command:bt}=require("commander"),G=require("./lib/core/config-loader"),D=require("./lib/core/cache-manager"),{APIClient:vn}=require("./lib/core/api-client"),{getCredentialsPath:vt,writeCredentials:wt,readCredentials:xt,deleteCredentials:Ct,postJson:ye}=Ue(),{ComponentDownloader:kt}=require("./lib/core/component-downloader"),St=require("./lib/core/token-processor"),{shadcnToFf:Ft,liftHostCustomCss:$t,shadcnCssVarsToThemeStudioRecipe:jt}=dn(),{ICON_LIBRARY_DEPS:Ce,resolveIconLibraryName:At,swapIconAdapterImport:Tt,adapterFilesToPrune:_t}=gn(),{DEFAULT_API_URL:be}=se(),{ConfigError:E,APIError:It,CacheError:ke}=require("./lib/core/errors"),g=require("path"),p=require("fs"),{spawn:Ot}=require("child_process"),T=new bt,{version:wn}=pn(),Et="https://registry.frontfriend.dev/r/v4",yn='@import "@frontfriend/tailwind/theme.css";',xn=["app/globals.css","src/app/globals.css","styles/globals.css","src/styles/globals.css","src/styles.css","src/index.css","src/style.css"];function Mt(e){let n=(e||process.env.FF_REGISTRY_URL||Et).replace(/\/+$/,"");return/\/r\/(legacy|v4)$/i.test(n)?n:`${n}/r/v4`}function _(e){try{return JSON.parse(p.readFileSync(e,"utf8"))}catch{return null}}function H(e,n){p.mkdirSync(g.dirname(e),{recursive:!0}),p.writeFileSync(e,`${JSON.stringify(n,null,2)}
49
+ `)}var Cn=g.join("node_modules",".cache","frontfriend","migrated-components.json");function Lt(e){let n=_(g.join(e,"package.json"))||{},t={...n.dependencies||{},...n.devDependencies||{}};return t.vue||t["@vitejs/plugin-vue"]?"vue":"react"}function Pt(e){let n=_(g.join(e,"package.json"))||{},t={...n.dependencies||{},...n.devDependencies||{}};return t.next||p.existsSync(g.join(e,"next.config.js"))||p.existsSync(g.join(e,"next.config.mjs"))?"next":t.vite||p.existsSync(g.join(e,"vite.config.ts"))||p.existsSync(g.join(e,"vite.config.js"))?"vite":null}function Dt(e,n,t){let o=g.join(e,"components.json");if(!p.existsSync(o))return!1;let r=_(o)||{};r.registries=r.registries||{};let s=`${Mt(t)}/${n}/{name}.json`,i=Ce[r.iconLibrary]?r.iconLibrary:void 0,c=i&&i!=="lucide"?{url:s,params:{iconLibrary:i}}:s;return JSON.stringify(r.registries["@frontfriend"])===JSON.stringify(c)?!1:(r.registries["@frontfriend"]=c,H(o,r),!0)}function Nt(e){let n=g.join(e,"package.json"),t=_(n);return t?(t.dependencies=t.dependencies||{},t.dependencies["@frontfriend/tailwind"]?!1:(t.dependencies["@frontfriend/tailwind"]="^4.0.0",H(n,t),!0)):!1}function Rt(e){let n=["next.config.js","next.config.mjs","next.config.ts"].map(t=>g.join(e,t)).find(t=>p.existsSync(t));return n?p.readFileSync(n,"utf8").includes("@frontfriend/tailwind/next")?"present":"manual":(p.writeFileSync(g.join(e,"next.config.js"),`const frontfriend = require('@frontfriend/tailwind/next');
50
50
 
51
51
  module.exports = frontfriend({});
52
- `),"created")}function Rt(e){let n=["vite.config.ts","vite.config.js","vite.config.mjs"].map(t=>g.join(e,t)).find(t=>p.existsSync(t));return n?p.readFileSync(n,"utf8").includes("@frontfriend/tailwind/vite")?"present":"manual":(p.writeFileSync(g.join(e,"vite.config.ts"),`import { defineConfig } from 'vite';
52
+ `),"created")}function Ut(e){let n=["vite.config.ts","vite.config.js","vite.config.mjs"].map(t=>g.join(e,t)).find(t=>p.existsSync(t));return n?p.readFileSync(n,"utf8").includes("@frontfriend/tailwind/vite")?"present":"manual":(p.writeFileSync(g.join(e,"vite.config.ts"),`import { defineConfig } from 'vite';
53
53
  import frontfriend from '@frontfriend/tailwind/vite';
54
54
 
55
55
  export default defineConfig({
56
56
  plugins: [frontfriend()],
57
57
  });
58
- `),"created")}function Ut(e){let n=wn.find(t=>p.existsSync(g.join(e,t)));return n?g.join(e,n):null}function qt(e){let t=wn.find(s=>p.existsSync(g.join(e,s)))||"app/globals.css",o=g.join(e,t);return p.mkdirSync(g.dirname(o),{recursive:!0}),p.existsSync(o)||p.writeFileSync(o,""),{fullPath:o,relativePath:t}}function Vt(e){let{fullPath:n,relativePath:t}=qt(e),o=p.readFileSync(n,"utf8");return o.includes(mn)?{changed:!1,relativePath:t}:(p.writeFileSync(n,`${mn}
59
- ${o}`),{changed:!0,relativePath:t})}function zt(e,n={}){let t=g.join(e,"components.json");if(!p.existsSync(t))return{isShadcnProject:!1,changes:[]};let o=Mt(e),s=Lt(e),r=[],i=[];if(Pt(e,o,n.registryUrl)&&r.push(`registered @frontfriend registry for ${o}`),Dt(e)&&r.push("added @frontfriend/tailwind dependency"),s==="next"){let a=Nt(e);a==="created"&&r.push("created next.config.js with the FrontFriend plugin"),a==="manual"&&i.push('wrap your existing next.config with `require("@frontfriend/tailwind/next")(...)`')}if(s==="vite"){let a=Rt(e);a==="created"&&r.push("created vite.config.ts with the FrontFriend plugin"),a==="manual"&&i.push("add `frontfriend()` from `@frontfriend/tailwind/vite` to your existing vite.config plugins array")}let c=Vt(e);return c.changed&&r.push(`imported bundled theme in ${c.relativePath}`),{isShadcnProject:!0,changes:r,manualSteps:i,framework:o,buildTool:s}}function Bt(e){return new Promise(n=>setTimeout(n,e))}function Jt(e){let n=process.platform==="darwin"?"open":process.platform==="win32"?"cmd":"xdg-open",t=process.platform==="win32"?["/c","start","",e]:[e];try{return It(n,t,{detached:!0,stdio:"ignore"}).unref(),!0}catch{return!1}}function Ht(e){e.isShadcnProject&&(console.log("\u{1F9E9} shadcn project wiring"),e.changes.length===0?console.log(" \u2713 Already configured"):e.changes.forEach(n=>console.log(` \u2713 ${n}`)),e.manualSteps&&e.manualSteps.length>0&&(console.log(" \u26A0 Manual steps required (existing config left untouched):"),e.manualSteps.forEach(n=>console.log(` \u2022 ${n}`))),console.log(` Next: npx shadcn add @frontfriend/button
60
- `))}function Gt(e,n){let t=e.indexOf(`${n}:`);if(t===-1)return null;let o=e.indexOf("{",t);if(o===-1)return null;let s=0;for(let r=o;r<e.length;r+=1){let i=e[r];if(i==="{"&&(s+=1),i==="}"&&(s-=1),s===0)return e.slice(o+1,r)}return null}function Kt(e){let n={},t=/([A-Za-z0-9_-]+):\s*(['"`])([\s\S]*?)\2/g,o;for(;o=t.exec(e||"");)n[o[1]]=o[3].replace(/\s+/g," ").trim();return n}function Wt(e,n){let t=n;for(;/\s|,/.test(e[t]||"");)t+=1;let o=e[t];if(o==='"'||o==="'"||o==="`"){let r=e.indexOf(o,t+1);return r===-1?null:{name:e.slice(t+1,r),end:r+1}}let s=e.slice(t).match(/^([A-Za-z0-9_-]+)/);return s?{name:s[1],end:t+s[1].length}:null}function Yt(e){let n={},t=0;for(;t<(e||"").length;){let o=Wt(e,t);if(!o){t+=1;continue}for(t=o.end;/\s/.test(e[t]||"");)t+=1;if(e[t]!==":")continue;for(t+=1;/\s/.test(e[t]||"");)t+=1;if(e[t]!=="{")continue;let s=0,r=t;for(;t<e.length;t+=1)if(e[t]==="{"&&(s+=1),e[t]==="}"&&(s-=1),s===0){n[o.name]=Kt(e.slice(r+1,t)),t+=1;break}}return n}function te(e){return String(e||"").replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[_\s]+/g,"-").toLowerCase()}function Zt(e){return String(e||"").replace(/-([a-z0-9])/g,(n,t)=>t.toUpperCase())}function Qt(e){return String(e||"").replace(/(^|[-_\s]+)([a-z0-9])/g,(n,t,o)=>o.toUpperCase())}function be(e,n,t,o){let s=0,r=null,i=!1;for(let c=n;c<e.length;c+=1){let a=e[c];if(r){i?i=!1:a==="\\"?i=!0:a===r&&(r=null);continue}if(a==='"'||a==="'"||a==="`"){r=a;continue}if(a===t&&(s+=1),a===o&&(s-=1),s===0)return c}return-1}function Xt(e){let n=[],t=/(?:export\s+)?function\s+([A-Z][A-Za-z0-9_]*)\s*\(/g,o;for(;o=t.exec(e);){let r=o[1],i=e.indexOf("(",o.index),c=i===-1?-1:be(e,i,"(",")"),a=c===-1?-1:e.indexOf("{",c);if(a===-1)continue;let l=be(e,a,"{","}");l!==-1&&(n.push({name:r,body:e.slice(a,l+1)}),t.lastIndex=l+1)}let s=/(?:export\s+)?const\s+([A-Z][A-Za-z0-9_]*)\s*=/g;for(;o=s.exec(e);){let r=o[1],i=o.index,c=e.slice(i+1).search(/\n(?:export\s+)?(?:const|function)\s+[A-Z][A-Za-z0-9_]*\b|\nexport\s*\{/),a=c===-1?e.length:i+1+c;n.push({name:r,body:e.slice(i,a)})}return n}function ke(e,n){let t=e[n],o="",s=!1;for(let r=n+1;r<e.length;r+=1){let i=e[r];if(s){o+=i,s=!1;continue}if(i==="\\"){s=!0;continue}if(i===t)return{value:o,end:r+1};o+=i}return null}function eo(e){let n=[];for(let t=0;t<e.length;t+=1){let o=e[t];if(o!=='"'&&o!=="'"&&o!=="`")continue;let s=ke(e,t);s&&((o!=="`"||!s.value.includes("${"))&&n.push(s.value.replace(/\s+/g," ").trim()),t=s.end-1)}return n.filter(Boolean)}function no(e,n){let t=n;for(;/\s/.test(e[t]||"");)t+=1;if(e[t]!=="=")return null;for(t+=1;/\s/.test(e[t]||"");)t+=1;if(e[t]==='"'||e[t]==="'"){let o=ke(e,t);return o?{value:o.value,end:o.end}:null}if(e[t]==="{"){let o=be(e,t,"{","}");return o===-1?null:{expression:e.slice(t+1,o),end:o+1}}return null}function to(e){let n=e.indexOf("cva(");if(n===-1)return null;let t=n+4;for(;/\s/.test(e[t]||"");)t+=1;if(e[t]!=='"'&&e[t]!=="'"&&e[t]!=="`")return null;let o=ke(e,t);if(!o)return null;let s=o.end;for(;/\s/.test(e[s]||"");)s+=1;return e[s]!==","&&e[s]!==")"?null:o.value.replace(/\s+/g," ").trim()}function oo(e){let n=e.match(/\bdata-slot\s*=\s*(?:"([^"]+)"|'([^']+)'|\{\s*["'`]([^"'`]+)["'`]\s*\})/);return n?n[1]||n[2]||n[3]:null}function so(e,n,t){let o=te(t),s=te(e||n);if(s===o)return"root";if(s.startsWith(`${o}-`))s=s.slice(o.length+1);else{let r=Qt(t);!e&&n.startsWith(r)&&(s=te(n.slice(r.length)))}return s?Zt(s):"root"}function ro(e,n){let t={},o=[];for(let s of Xt(e)){let r=/\bclassName\s*=/g,i,c=!1;for(;i=r.exec(s.body);){let a=no(s.body,i.index+9);if(!a){o.push(`${s.name}: unreadable className`);continue}let f=(a.value!==void 0?[a.value]:eo(a.expression||"")).join(" ").replace(/\s+/g," ").trim();if(!f){o.push(`${s.name}: dynamic className without literal classes`);continue}let u=s.body.lastIndexOf("<",i.index),h=a.end?s.body.indexOf(">",a.end):-1,y=u===-1?"":s.body.slice(u,h===-1?Math.min(s.body.length,a.end+300):h+1),m=oo(y);if(!m){o.push(`${s.name}: className on a non-slot element (no data-slot) skipped`);continue}let b=so(m,s.name,n);t[b]=t[b]?`${t[b]} ${f}`.replace(/\s+/g," ").trim():f,c=!0}!c&&/\bclassName\b/.test(s.body)&&o.push(`${s.name}: className present but no literal classes captured`)}return{slots:t,missed:o}}function oe(e,n){if(typeof e=="string")return n(e);if(Array.isArray(e))return e.map(t=>oe(t,n));if(e&&typeof e=="object"){let t={};for(let[o,s]of Object.entries(e))t[o]=oe(s,n);return t}return e}function io(e){if(!e||e==="("||e===")"||e==="{"||e==="}"||e==="}:"||e.startsWith("<")||e.startsWith('"')||e.startsWith("...")||e.includes("React.ComponentProps"))return null;let n=e.match(/^\*:([a-z-]+):(.+)$/);if(n)return`[&>*:${n[1]}]:${n[2]}`;let t=e.match(/^\*:(.+)$/);return t?`[&>*]:${t[1]}`:e.replace(/gap-\[--spacing\(var\(--gap\)\)\]/g,"gap-[calc(var(--gap)*0.25rem)]")}function co(e){return e.split(/\s+/).map(io).filter(Boolean).join(" ").replace(/\s+/g," ").trim()}var ao={button:{variant:{default:"main",outline:"tertiary"}},badge:{variant:{default:"main",outline:"tertiary"}}},lo=new Set(["variant","size","sizes","iconPosition"]);function ve(e,n){let t=e.includes("cva(")&&e.includes("variants:"),o=to(e),s=Gt(e,"variants"),r=Yt(s),i=Object.values(r).some(u=>Object.keys(u).length>0),c=ro(e,n),a=ao[n]||{},l={},f=u=>{u&&(l.root=l.root?`${l.root} ${u}`.replace(/\s+/g," ").trim():u)};if(o&&i&&f(o),i)for(let[u,h]of Object.entries(r)){if(Object.keys(h).length===0)continue;let y;lo.has(u)?(l[u]=l[u]||{},y=l[u]):(l.variants=l.variants||{},l.variants[u]=l.variants[u]||{},y=l.variants[u]);let m=a[u]||{};for(let[b,k]of Object.entries(h))y[m[b]||b]=k}for(let[u,h]of Object.entries(c.slots))u==="root"?f(h):(l.slots=l.slots||{},l.slots[u]=h);return!t&&Object.keys(c.slots).length===0?{skipped:!0,reason:c.missed.length>0?c.missed.join("; "):`${n} has no cva variants or literal className slots`}:t&&!i&&Object.keys(c.slots).length===0?{skipped:!0,reason:"cva component has no variant class maps or literal className slots"}:{skipped:!1,config:{[n]:l},warnings:c.missed}}function uo(...e){let{deepMerge:n}=require("./lib/core/default-config");return e.reduce((t,o)=>n(t,o||{}),{})}function fo(e){let n=require("./lib/core/token-processor"),{mergeComponentsConfig:t}=require("./lib/core/default-config"),o=new n,s=t(e),r=o.extractClassesFromComponentsConfig(s);return{componentsConfig:s,icons:{},safelist:r,classesContent:o.generateClassesContent(r),themeCSS:o.generateThemeCSS({}),metadata:{version:"local-components"}}}function ho(e,n){let t=new D(e),o=t.exists()?t.load()||{}:{},s=uo(o.componentsConfig,n),r=fo(s);return t.save({...o,...r,icons:o.icons||{}}),r.componentsConfig}function we(e){return g.basename(e).replace(/\.(tsx|ts|jsx|js|vue)$/,"").replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[_\s]+/g,"-").toLowerCase()}var go=["tsx","ts","jsx","js","vue"],Cn=/\.(tsx|ts|jsx|js|vue)$/;function po(e){let n={};for(let t of["tsconfig.json","tsconfig.app.json","jsconfig.json"]){let o=_(g.join(e,t)),s=o&&o.compilerOptions&&o.compilerOptions.paths;s&&Object.assign(n,s)}return n}function mo(e,n){if(!n)return null;let t=po(e);for(let[o,s]of Object.entries(t))if(!(!Array.isArray(s)||s.length===0)){if(o.endsWith("/*")){let r=o.slice(0,-1);if(n.startsWith(r)){let i=n.slice(r.length),c=s[0].replace(/\*+$/,"");return g.resolve(e,c,i)}}else if(o===n)return g.resolve(e,s[0])}return n.startsWith("@/")?g.resolve(e,"src",n.slice(2)):g.resolve(e,n)}function kn(e){let n=_(g.join(e,"components.json")),t=n&&n.aliases&&n.aliases.ui,o=[t?mo(e,t):null,g.join(e,"src","components","ui"),g.join(e,"components","ui")].filter(Boolean);return[...new Set(o)].filter(s=>p.existsSync(s))}function Sn(e,n){let t=_(g.join(e,"components.json")),o=$t(t,n),s=kn(e).flatMap(u=>[g.join(u,"icon","index.tsx"),g.join(u,"icon","Icon.vue")]).find(u=>p.existsSync(u));if(!s)return{changed:!1,iconLibrary:o};let r=p.readFileSync(s,"utf8"),i=Tt(r,o),c=i!==r;c&&p.writeFileSync(s,i);let a=g.join(g.dirname(s),"adapters");if(p.existsSync(a))for(let u of At(p.readdirSync(a),o))p.rmSync(g.join(a,u),{force:!0}),c=!0;let l=g.join(e,"package.json"),f=_(l);if(f){f.dependencies=f.dependencies||{};let u=!1;for(let h of xe[o])f.dependencies[h]||(f.dependencies[h]="latest",u=!0);u&&H(l,f)}return{changed:c,iconLibrary:o}}function yn(e,n){for(let o of go){let s=g.join(e,`${n}.${o}`);if(p.existsSync(s))return s}let t=g.join(e,n);if(p.existsSync(t)&&p.statSync(t).isDirectory()){let o=p.readdirSync(t).filter(i=>Cn.test(i)),s=o.filter(i=>!/^index\./i.test(i)),r=s.find(i=>i.toLowerCase().startsWith(`${n.toLowerCase()}.`))||s[0]||o.find(i=>/^index\./i.test(i));if(r)return g.join(t,r)}return null}function Fn(e,n){let t=kn(e);if(n&&n!=="all"){for(let r of t){let i=yn(r,n);if(i)return[{component:n,inputPath:i}]}return[]}let o=new Set,s=[];for(let r of t)for(let i of p.readdirSync(r,{withFileTypes:!0})){let c,a=null;if(i.isFile()&&Cn.test(i.name)&&!/^index\./i.test(i.name)?(c=we(i.name),a=g.join(r,i.name)):i.isDirectory()&&(c=we(i.name),a=yn(r,i.name)),!a||!c)continue;let l=c.toLowerCase();o.has(l)||(o.add(l),s.push({component:c,inputPath:a}))}return s}function yo(e){let n={},t=[],o=Fn(e,"all");for(let{component:s,inputPath:r}of o){let i=ve(p.readFileSync(r,"utf8"),s);if(i.skipped){t.push({component:s,reason:i.reason});continue}Object.assign(n,i.config)}return{config:n,skipped:t}}T.name("frontfriend").description("FrontFriend Tailwind CLI - Manage design tokens and cache").version(vn);T.command("login").description("Authenticate FrontFriend CLI with an 8-digit device code").option("--api-url <url>","FrontFriend API URL",process.env.FF_API_URL||ye).option("--no-open","Do not open the browser automatically").action(async e=>{try{let n=e.apiUrl.replace(/\/$/,""),t=await me(`${n}/api/auth/device/start`,{}),o=t.interval||5,s=Date.now()+(t.expires_in||600)*1e3;for(console.log("\u{1F510} FrontFriend Login"),console.log(`====================
58
+ `),"created")}function qt(e){let n=xn.find(t=>p.existsSync(g.join(e,t)));return n?g.join(e,n):null}function zt(e){let t=xn.find(r=>p.existsSync(g.join(e,r)))||"app/globals.css",o=g.join(e,t);return p.mkdirSync(g.dirname(o),{recursive:!0}),p.existsSync(o)||p.writeFileSync(o,""),{fullPath:o,relativePath:t}}function Vt(e){let{fullPath:n,relativePath:t}=zt(e),o=p.readFileSync(n,"utf8");return o.includes(yn)?{changed:!1,relativePath:t}:(p.writeFileSync(n,`${yn}
59
+ ${o}`),{changed:!0,relativePath:t})}function Bt(e,n={}){let t=g.join(e,"components.json");if(!p.existsSync(t))return{isShadcnProject:!1,changes:[]};let o=Lt(e),r=Pt(e),s=[],i=[];if(Dt(e,o,n.registryUrl)&&s.push(`registered @frontfriend registry for ${o}`),Nt(e)&&s.push("added @frontfriend/tailwind dependency"),r==="next"){let a=Rt(e);a==="created"&&s.push("created next.config.js with the FrontFriend plugin"),a==="manual"&&i.push('wrap your existing next.config with `require("@frontfriend/tailwind/next")(...)`')}if(r==="vite"){let a=Ut(e);a==="created"&&s.push("created vite.config.ts with the FrontFriend plugin"),a==="manual"&&i.push("add `frontfriend()` from `@frontfriend/tailwind/vite` to your existing vite.config plugins array")}let c=Vt(e);return c.changed&&s.push(`imported bundled theme in ${c.relativePath}`),{isShadcnProject:!0,changes:s,manualSteps:i,framework:o,buildTool:r}}function Jt(e){return new Promise(n=>setTimeout(n,e))}function Ht(e){let n=process.platform==="darwin"?"open":process.platform==="win32"?"cmd":"xdg-open",t=process.platform==="win32"?["/c","start","",e]:[e];try{return Ot(n,t,{detached:!0,stdio:"ignore"}).unref(),!0}catch{return!1}}function Gt(e){e.isShadcnProject&&(console.log("\u{1F9E9} shadcn project wiring"),e.changes.length===0?console.log(" \u2713 Already configured"):e.changes.forEach(n=>console.log(` \u2713 ${n}`)),e.manualSteps&&e.manualSteps.length>0&&(console.log(" \u26A0 Manual steps required (existing config left untouched):"),e.manualSteps.forEach(n=>console.log(` \u2022 ${n}`))),console.log(` Next: npx shadcn add @frontfriend/button
60
+ `))}function Kt(e,n){let t=e.indexOf(`${n}:`);if(t===-1)return null;let o=e.indexOf("{",t);if(o===-1)return null;let r=0;for(let s=o;s<e.length;s+=1){let i=e[s];if(i==="{"&&(r+=1),i==="}"&&(r-=1),r===0)return e.slice(o+1,s)}return null}function Wt(e){let n={},t=/([A-Za-z0-9_-]+):\s*(['"`])([\s\S]*?)\2/g,o;for(;o=t.exec(e||"");)n[o[1]]=o[3].replace(/\s+/g," ").trim();return n}function Yt(e,n){let t=n;for(;/\s|,/.test(e[t]||"");)t+=1;let o=e[t];if(o==='"'||o==="'"||o==="`"){let s=e.indexOf(o,t+1);return s===-1?null:{name:e.slice(t+1,s),end:s+1}}let r=e.slice(t).match(/^([A-Za-z0-9_-]+)/);return r?{name:r[1],end:t+r[1].length}:null}function Zt(e){let n={},t=0;for(;t<(e||"").length;){let o=Yt(e,t);if(!o){t+=1;continue}for(t=o.end;/\s/.test(e[t]||"");)t+=1;if(e[t]!==":")continue;for(t+=1;/\s/.test(e[t]||"");)t+=1;if(e[t]!=="{")continue;let r=0,s=t;for(;t<e.length;t+=1)if(e[t]==="{"&&(r+=1),e[t]==="}"&&(r-=1),r===0){n[o.name]=Wt(e.slice(s+1,t)),t+=1;break}}return n}function te(e){return String(e||"").replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[_\s]+/g,"-").toLowerCase()}function Qt(e){return String(e||"").replace(/-([a-z0-9])/g,(n,t)=>t.toUpperCase())}function Xt(e){return String(e||"").replace(/(^|[-_\s]+)([a-z0-9])/g,(n,t,o)=>o.toUpperCase())}function ve(e,n,t,o){let r=0,s=null,i=!1;for(let c=n;c<e.length;c+=1){let a=e[c];if(s){i?i=!1:a==="\\"?i=!0:a===s&&(s=null);continue}if(a==='"'||a==="'"||a==="`"){s=a;continue}if(a===t&&(r+=1),a===o&&(r-=1),r===0)return c}return-1}function eo(e){let n=[],t=/(?:export\s+)?function\s+([A-Z][A-Za-z0-9_]*)\s*\(/g,o;for(;o=t.exec(e);){let s=o[1],i=e.indexOf("(",o.index),c=i===-1?-1:ve(e,i,"(",")"),a=c===-1?-1:e.indexOf("{",c);if(a===-1)continue;let l=ve(e,a,"{","}");l!==-1&&(n.push({name:s,body:e.slice(a,l+1)}),t.lastIndex=l+1)}let r=/(?:export\s+)?const\s+([A-Z][A-Za-z0-9_]*)\s*=/g;for(;o=r.exec(e);){let s=o[1],i=o.index,c=e.slice(i+1).search(/\n(?:export\s+)?(?:const|function)\s+[A-Z][A-Za-z0-9_]*\b|\nexport\s*\{/),a=c===-1?e.length:i+1+c;n.push({name:s,body:e.slice(i,a)})}return n}function Se(e,n){let t=e[n],o="",r=!1;for(let s=n+1;s<e.length;s+=1){let i=e[s];if(r){o+=i,r=!1;continue}if(i==="\\"){r=!0;continue}if(i===t)return{value:o,end:s+1};o+=i}return null}function no(e){let n=[];for(let t=0;t<e.length;t+=1){let o=e[t];if(o!=='"'&&o!=="'"&&o!=="`")continue;let r=Se(e,t);r&&((o!=="`"||!r.value.includes("${"))&&n.push(r.value.replace(/\s+/g," ").trim()),t=r.end-1)}return n.filter(Boolean)}function to(e,n){let t=n;for(;/\s/.test(e[t]||"");)t+=1;if(e[t]!=="=")return null;for(t+=1;/\s/.test(e[t]||"");)t+=1;if(e[t]==='"'||e[t]==="'"){let o=Se(e,t);return o?{value:o.value,end:o.end}:null}if(e[t]==="{"){let o=ve(e,t,"{","}");return o===-1?null:{expression:e.slice(t+1,o),end:o+1}}return null}function oo(e){let n=e.indexOf("cva(");if(n===-1)return null;let t=n+4;for(;/\s/.test(e[t]||"");)t+=1;if(e[t]!=='"'&&e[t]!=="'"&&e[t]!=="`")return null;let o=Se(e,t);if(!o)return null;let r=o.end;for(;/\s/.test(e[r]||"");)r+=1;return e[r]!==","&&e[r]!==")"?null:o.value.replace(/\s+/g," ").trim()}function ro(e){let n=e.match(/\bdata-slot\s*=\s*(?:"([^"]+)"|'([^']+)'|\{\s*["'`]([^"'`]+)["'`]\s*\})/);return n?n[1]||n[2]||n[3]:null}function so(e,n,t){let o=te(t),r=te(e||n);if(r===o)return"root";if(r.startsWith(`${o}-`))r=r.slice(o.length+1);else{let i=Xt(t);!e&&n.startsWith(i)&&(r=te(n.slice(i.length)))}let s=r?Qt(r):"root";return t==="switch"&&s==="thumb"?"trigger":t==="checkbox"&&s==="indicator"?"icon":s}function io(e,n){let t={},o=[];for(let r of eo(e)){let s=/\bclassName\s*=/g,i,c=!1;for(;i=s.exec(r.body);){let a=to(r.body,i.index+9);if(!a){o.push(`${r.name}: unreadable className`);continue}let f=(a.value!==void 0?[a.value]:no(a.expression||"")).join(" ").replace(/\s+/g," ").trim();if(!f){o.push(`${r.name}: dynamic className without literal classes`);continue}let d=r.body.lastIndexOf("<",i.index),u=a.end?r.body.indexOf(">",a.end):-1,y=d===-1?"":r.body.slice(d,u===-1?Math.min(r.body.length,a.end+300):u+1),m=ro(y);if(!m){o.push(`${r.name}: className on a non-slot element (no data-slot) skipped`);continue}let b=so(m,r.name,n);t[b]=t[b]?`${t[b]} ${f}`.replace(/\s+/g," ").trim():f,c=!0}!c&&/\bclassName\b/.test(r.body)&&o.push(`${r.name}: className present but no literal classes captured`)}return{slots:t,missed:o}}function re(e,n){if(typeof e=="string")return n(e);if(Array.isArray(e))return e.map(t=>re(t,n));if(e&&typeof e=="object"){let t={};for(let[o,r]of Object.entries(e))t[o]=re(r,n);return t}return e}function co(e){if(!e||e==="("||e===")"||e==="{"||e==="}"||e==="}:"||e.startsWith("<")||e.startsWith('"')||e.startsWith("...")||e.includes("React.ComponentProps"))return null;let n=e.match(/^\*:([a-z-]+):(.+)$/);if(n)return`[&>*:${n[1]}]:${n[2]}`;let t=e.match(/^\*:(.+)$/);if(t)return`[&>*]:${t[1]}`;let o=e;return o=o.replace(/gap-\[--spacing\(var\(--gap\)\)\]/g,"gap-[calc(var(--gap)*0.25rem)]"),o=o.replace(/(^|:)(-?[a-z][a-z0-9-]*)-\(--([A-Za-z0-9_-]+)\)/g,"$1$2-[var(--$3)]"),o=o.replace(/\[--([A-Za-z0-9_-]+):--spacing\(([-+]?\d*\.?\d+)\)\]/g,(r,s,i)=>{let c=Number(i)*.25,a=Number.isInteger(c)?String(c):String(Number(c.toFixed(4)));return`[--${s}:${a}rem]`}),o=o.replace(/(^|:)data-checked:/g,"$1data-[state=checked]:").replace(/(^|:)data-unchecked:/g,"$1data-[state=unchecked]:"),o}function ao(e){return e.split(/\s+/).map(co).filter(Boolean).join(" ").replace(/\s+/g," ").trim()}var lo={button:{variant:{default:"main",outline:"tertiary"}},badge:{variant:{default:"main",outline:"tertiary"}}},uo=new Set(["variant","size","sizes","iconPosition"]);function fo(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var oe=null;function ho(e){if(!oe){let{mergeComponentsConfig:t}=require("./lib/core/default-config");oe=t(null)||{}}let{normalizeComponentKey:n}=require("./lib/core/default-config");return oe[e]||oe[n(e)]||null}function we(e,n){let t=e.includes("cva(")&&e.includes("variants:"),o=oo(e),r=Kt(e,"variants"),s=Zt(r),i=Object.values(s).some(u=>Object.keys(u).length>0),c=io(e,n),a=lo[n]||{},l={},f=u=>{u&&(l.root=l.root?`${l.root} ${u}`.replace(/\s+/g," ").trim():u)};if(o&&i&&f(o),i)for(let[u,y]of Object.entries(s)){if(Object.keys(y).length===0)continue;let m;uo.has(u)?(l[u]=l[u]||{},m=l[u]):(l.variants=l.variants||{},l.variants[u]=l.variants[u]||{},m=l.variants[u]);let b=a[u]||{};for(let[C,A]of Object.entries(y))m[b[C]||C]=A}for(let[u,y]of Object.entries(c.slots))u==="root"?f(y):(l.slots=l.slots||{},l.slots[u]=y);if(!t&&Object.keys(c.slots).length===0)return{skipped:!0,reason:c.missed.length>0?c.missed.join("; "):`${n} has no cva variants or literal className slots`};if(t&&!i&&Object.keys(c.slots).length===0)return{skipped:!0,reason:"cva component has no variant class maps or literal className slots"};let d=ho(n);return d&&fo(d.root)&&typeof l.root=="string"?{skipped:!0,reason:`${n} uses a nested root object in the canonical schema; migrate's flat extraction can't reproduce it and the runtime would discard it \u2014 skipped to preserve the design system config`}:{skipped:!1,config:{[n]:l},warnings:c.missed}}function go(...e){let{deepMerge:n}=require("./lib/core/default-config");return e.reduce((t,o)=>n(t,o||{}),{})}function po(e){let n=require("./lib/core/token-processor"),{mergeComponentsConfig:t}=require("./lib/core/default-config"),o=new n,r=t(e),s=o.extractClassesFromComponentsConfig(r);return{componentsConfig:r,icons:{},safelist:s,classesContent:o.generateClassesContent(s),themeCSS:o.generateThemeCSS({}),metadata:{version:"local-components"}}}function mo(e,n){let t=new D(e),o=t.exists()?t.load()||{}:{},r=go(o.componentsConfig,n),s=po(r);return t.save({...o,...s,icons:o.icons||{}}),s.componentsConfig}function xe(e){return g.basename(e).replace(/\.(tsx|ts|jsx|js|vue)$/,"").replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[_\s]+/g,"-").toLowerCase()}var yo=["tsx","ts","jsx","js","vue"],kn=/\.(tsx|ts|jsx|js|vue)$/;function bo(e){let n={};for(let t of["tsconfig.json","tsconfig.app.json","jsconfig.json"]){let o=_(g.join(e,t)),r=o&&o.compilerOptions&&o.compilerOptions.paths;r&&Object.assign(n,r)}return n}function vo(e,n){if(!n)return null;let t=bo(e);for(let[o,r]of Object.entries(t))if(!(!Array.isArray(r)||r.length===0)){if(o.endsWith("/*")){let s=o.slice(0,-1);if(n.startsWith(s)){let i=n.slice(s.length),c=r[0].replace(/\*+$/,"");return g.resolve(e,c,i)}}else if(o===n)return g.resolve(e,r[0])}return n.startsWith("@/")?g.resolve(e,"src",n.slice(2)):g.resolve(e,n)}function Sn(e){let n=_(g.join(e,"components.json")),t=n&&n.aliases&&n.aliases.ui,o=[t?vo(e,t):null,g.join(e,"src","components","ui"),g.join(e,"components","ui")].filter(Boolean);return[...new Set(o)].filter(r=>p.existsSync(r))}function Fn(e,n){let t=_(g.join(e,"components.json")),o=At(t,n),r=Sn(e).flatMap(d=>[g.join(d,"icon","index.tsx"),g.join(d,"icon","Icon.vue")]).find(d=>p.existsSync(d));if(!r)return{changed:!1,iconLibrary:o};let s=p.readFileSync(r,"utf8"),i=Tt(s,o),c=i!==s;c&&p.writeFileSync(r,i);let a=g.join(g.dirname(r),"adapters");if(p.existsSync(a))for(let d of _t(p.readdirSync(a),o))p.rmSync(g.join(a,d),{force:!0}),c=!0;let l=g.join(e,"package.json"),f=_(l);if(f){f.dependencies=f.dependencies||{};let d=!1;for(let u of Ce[o])f.dependencies[u]||(f.dependencies[u]="latest",d=!0);d&&H(l,f)}return{changed:c,iconLibrary:o}}function bn(e,n){for(let o of yo){let r=g.join(e,`${n}.${o}`);if(p.existsSync(r))return r}let t=g.join(e,n);if(p.existsSync(t)&&p.statSync(t).isDirectory()){let o=p.readdirSync(t).filter(i=>kn.test(i)),r=o.filter(i=>!/^index\./i.test(i)),s=r.find(i=>i.toLowerCase().startsWith(`${n.toLowerCase()}.`))||r[0]||o.find(i=>/^index\./i.test(i));if(s)return g.join(t,s)}return null}function $n(e,n){let t=Sn(e);if(n&&n!=="all"){for(let s of t){let i=bn(s,n);if(i)return[{component:n,inputPath:i}]}return[]}let o=new Set,r=[];for(let s of t)for(let i of p.readdirSync(s,{withFileTypes:!0})){let c,a=null;if(i.isFile()&&kn.test(i.name)&&!/^index\./i.test(i.name)?(c=xe(i.name),a=g.join(s,i.name)):i.isDirectory()&&(c=xe(i.name),a=bn(s,i.name)),!a||!c)continue;let l=c.toLowerCase();o.has(l)||(o.add(l),r.push({component:c,inputPath:a}))}return r}function wo(e){let n={},t=[],o=$n(e,"all");for(let{component:r,inputPath:s}of o){let i=we(p.readFileSync(s,"utf8"),r);if(i.skipped){t.push({component:r,reason:i.reason});continue}Object.assign(n,i.config)}return{config:n,skipped:t}}T.name("frontfriend").description("FrontFriend Tailwind CLI - Manage design tokens and cache").version(wn);T.command("login").description("Authenticate FrontFriend CLI with an 8-digit device code").option("--api-url <url>","FrontFriend API URL",process.env.FF_API_URL||be).option("--no-open","Do not open the browser automatically").action(async e=>{try{let n=e.apiUrl.replace(/\/$/,""),t=await ye(`${n}/api/auth/device/start`,{}),o=t.interval||5,r=Date.now()+(t.expires_in||600)*1e3;for(console.log("\u{1F510} FrontFriend Login"),console.log(`====================
61
61
  `),console.log(`Go to ${t.verification_uri} and enter the code:`),console.log(`
62
62
  ${t.user_code}
63
- `),e.open!==!1&&Jt(t.verification_uri)&&console.log("Opened the browser for you."),console.log(`Waiting for approval...
64
- `);Date.now()<s;){await Bt(o*1e3);let r=await me(`${n}/api/auth/device/poll`,{device_code:t.device_code});if(r.error!=="authorization_pending"){if(r.error==="slow_down"){o=r.interval||o+5;continue}if(r.error)throw new Error(`${r.error}: ${r.error_description||"Authentication failed"}`);if(!r.access_token||!r.refresh_token||!r.device_id)throw new Error("Invalid login response from FrontFriend. Run `frontfriend login` again.");vt({accessToken:r.access_token,refreshToken:r.refresh_token,deviceId:r.device_id,expiresAt:Date.now()+(r.expires_in||900)*1e3,refreshExpiresAt:Date.now()+(r.refresh_expires_in||604800)*1e3,ffApiUrl:n}),console.log("\u2705 Login complete!"),console.log(` Credentials saved to ${bt()}`),process.exit(0)}}throw new Error("expired_token: the code has expired, run `frontfriend login` again.")}catch(n){console.error("\u274C Login failed:",n.message),process.exit(1)}});T.command("logout").description("Remove FrontFriend CLI credentials").option("--api-url <url>","FrontFriend API URL",process.env.FF_API_URL||ye).action(async e=>{let n=wt(),t=(e.apiUrl||(n==null?void 0:n.ffApiUrl)||ye).replace(/\/$/,"");if(n!=null&&n.accessToken&&(n!=null&&n.deviceId))try{await me(`${t}/api/plugin/logout`,{device_id:n.deviceId},n.accessToken)}catch{}let o=xt();console.log(o?"\u2705 Logged out. Credentials removed.":"\u2139\uFE0F No stored credentials found."),process.exit(0)});T.command("init").description("Initialize FrontFriend configuration and fetch from API").option("--force","Force refresh even if cache is valid").option("--verbose","Show detailed output including safelist size and token counts").option("--tag <tag>","Fetch specific tag (e.g., dev, next, latest)").option("--version <version>","Fetch specific version (e.g., v1.0.0)").option("--registry-url <url>","Registry base URL for components.json (overrides FF_REGISTRY_URL)").action(async e=>{var n;try{console.log("\u{1F527} FrontFriend Setup"),console.log(`==================
65
- `);let o=await new G().load(),s=p.existsSync(g.join(o.appRoot,"components.json")),r=g.join(o.appRoot,xn);s&&!p.existsSync(r)&&!e.force&&(console.log("\u{1F6D1} shadcn project detected (components.json) that has not been migrated yet."),console.log(""),console.log(" Run `npx frontfriend migrate` first: it reads your components' classes and"),console.log(" pushes them to your design system, so FrontFriend components keep your app's look."),console.log(""),console.log(" Or run `npx frontfriend init --force` to skip this and use the design system's styling."),process.exit(1));let i=zt(o.appRoot,{registryUrl:e.registryUrl});if(Ht(i),!o.ffId)throw i.isShadcnProject&&(console.log("\u2705 Local FrontFriend wiring complete!"),console.log(' Add frontfriend.config.js with "ff-id" later to fetch cloud design tokens.'),process.exit(0)),new E(`ff-id not found in frontfriend.config.js
63
+ `),e.open!==!1&&Ht(t.verification_uri)&&console.log("Opened the browser for you."),console.log(`Waiting for approval...
64
+ `);Date.now()<r;){await Jt(o*1e3);let s=await ye(`${n}/api/auth/device/poll`,{device_code:t.device_code});if(s.error!=="authorization_pending"){if(s.error==="slow_down"){o=s.interval||o+5;continue}if(s.error)throw new Error(`${s.error}: ${s.error_description||"Authentication failed"}`);if(!s.access_token||!s.refresh_token||!s.device_id)throw new Error("Invalid login response from FrontFriend. Run `frontfriend login` again.");wt({accessToken:s.access_token,refreshToken:s.refresh_token,deviceId:s.device_id,expiresAt:Date.now()+(s.expires_in||900)*1e3,refreshExpiresAt:Date.now()+(s.refresh_expires_in||604800)*1e3,ffApiUrl:n}),console.log("\u2705 Login complete!"),console.log(` Credentials saved to ${vt()}`),process.exit(0)}}throw new Error("expired_token: the code has expired, run `frontfriend login` again.")}catch(n){console.error("\u274C Login failed:",n.message),process.exit(1)}});T.command("logout").description("Remove FrontFriend CLI credentials").option("--api-url <url>","FrontFriend API URL",process.env.FF_API_URL||be).action(async e=>{let n=xt(),t=(e.apiUrl||(n==null?void 0:n.ffApiUrl)||be).replace(/\/$/,"");if(n!=null&&n.accessToken&&(n!=null&&n.deviceId))try{await ye(`${t}/api/plugin/logout`,{device_id:n.deviceId},n.accessToken)}catch{}let o=Ct();console.log(o?"\u2705 Logged out. Credentials removed.":"\u2139\uFE0F No stored credentials found."),process.exit(0)});T.command("init").description("Initialize FrontFriend configuration and fetch from API").option("--force","Force refresh even if cache is valid").option("--verbose","Show detailed output including safelist size and token counts").option("--tag <tag>","Fetch specific tag (e.g., dev, next, latest)").option("--version <version>","Fetch specific version (e.g., v1.0.0)").option("--registry-url <url>","Registry base URL for components.json (overrides FF_REGISTRY_URL)").action(async e=>{var n;try{console.log("\u{1F527} FrontFriend Setup"),console.log(`==================
65
+ `);let o=await new G().load(),r=p.existsSync(g.join(o.appRoot,"components.json")),s=g.join(o.appRoot,Cn);r&&!p.existsSync(s)&&!e.force&&(console.log("\u{1F6D1} shadcn project detected (components.json) that has not been migrated yet."),console.log(""),console.log(" Run `npx frontfriend migrate` first: it reads your components' classes and"),console.log(" pushes them to your design system, so FrontFriend components keep your app's look."),console.log(""),console.log(" Or run `npx frontfriend init --force` to skip this and use the design system's styling."),process.exit(1));let i=Bt(o.appRoot,{registryUrl:e.registryUrl});if(Gt(i),!o.ffId)throw i.isShadcnProject&&(console.log("\u2705 Local FrontFriend wiring complete!"),console.log(' Add frontfriend.config.js with "ff-id" later to fetch cloud design tokens.'),process.exit(0)),new E(`ff-id not found in frontfriend.config.js
66
66
  Please add "ff-id" to your frontfriend.config.js file`,"ff-id");let c=e.tag||o.tag,a=e.version||o.version;console.log("\u{1F4CB} Configuration loaded"),console.log(` FF_ID: ${o.ffId}`),console.log(` App Root: ${o.appRoot}`),c&&console.log(` Tag: ${c}`),a&&console.log(` Version: ${a}`),console.log("");let l=new D(o.appRoot);!e.force&&l.exists()&&l.isValid()&&!l.isLocalOnly()&&(console.log("\u2705 Cache is valid and up to date"),console.log(" Use --force to refresh anyway"),process.exit(0)),console.log("\u{1F50D} Checking cache..."),e.force?console.log(` Force refresh requested
67
67
  `):l.exists()?l.isLocalOnly()?console.log(` Local migrate cache found \u2014 fetching the design system
68
68
  `):console.log(` Cache expired
69
69
  `):console.log(` No cache found
70
- `),console.log("\u{1F310} Fetching configuration...");let f=new bn(o.ffId,{baseURL:o["api-url"]||o.apiUrl,authToken:o["auth-token"]||o.authToken});(o["api-url"]||o.apiUrl)&&console.log(` Using API URL: ${o["api-url"]||o.apiUrl}`);let u=new kt,h=null;try{h=await f.fetchProcessedTokens({tag:c,version:a,tailwindV4:u.useTailwindV4})}catch(w){console.log(` \u26A0\uFE0F Failed to fetch pre-processed tokens: ${w.message}`)}if(h){if(console.log(" \u2713 Pre-processed tokens fetched from server"),console.log(" \u2713 Skipping local processing"),h.versionMetadata){let w=h.versionMetadata;console.log(" \u2139\uFE0F Version Information:"),w.version&&console.log(` Version: ${w.version}`),w.tag&&console.log(` Tag: ${w.tag}`),w.cached!==void 0&&console.log(` From Cache: ${w.cached?"Yes":"No"}`)}if(console.log(""),(!((n=h.tokens)!=null&&n.fontFamily)||Object.keys(h.tokens.fontFamily).length===0)&&(console.log("\u26A0\uFE0F Warning: No font family utilities found"),console.log(" Font classes like font-primary and font-secondary will not be available"),h.globalTokens?console.log(` Global tokens are present - font processor may need to be updated
70
+ `),console.log("\u{1F310} Fetching configuration...");let f=new vn(o.ffId,{baseURL:o["api-url"]||o.apiUrl,authToken:o["auth-token"]||o.authToken});(o["api-url"]||o.apiUrl)&&console.log(` Using API URL: ${o["api-url"]||o.apiUrl}`);let d=new St,u=null;try{u=await f.fetchProcessedTokens({tag:c,version:a,tailwindV4:d.useTailwindV4})}catch(w){console.log(` \u26A0\uFE0F Failed to fetch pre-processed tokens: ${w.message}`)}if(u){if(console.log(" \u2713 Pre-processed tokens fetched from server"),console.log(" \u2713 Skipping local processing"),u.versionMetadata){let w=u.versionMetadata;console.log(" \u2139\uFE0F Version Information:"),w.version&&console.log(` Version: ${w.version}`),w.tag&&console.log(` Tag: ${w.tag}`),w.cached!==void 0&&console.log(` From Cache: ${w.cached?"Yes":"No"}`)}if(console.log(""),(!((n=u.tokens)!=null&&n.fontFamily)||Object.keys(u.tokens.fontFamily).length===0)&&(console.log("\u26A0\uFE0F Warning: No font family utilities found"),console.log(" Font classes like font-primary and font-secondary will not be available"),u.globalTokens?console.log(` Global tokens are present - font processor may need to be updated
71
71
  `):console.log(` Consider adding font family tokens to your design system
72
- `)),u.useTailwindV4){let w=u.extractClassesFromComponentsConfig(h.componentsConfig),q=[...h.safelist||[],...w||[]];h.safelist=[...new Set(q)].sort(),h.themeCSS||(h.themeCSS=u.generateThemeCSS({variables:h.variables||{},semanticVariables:h.semanticVariables||{},semanticDarkVariables:h.semanticDarkVariables||{},fontFaces:h.fonts||[],keyframes:h.keyframes||{},animations:h.animations||{},custom:h.custom||{}})),h.classesContent||(h.classesContent=u.generateClassesContent(h.safelist))}if(console.log("\u{1F4BE} Saving cache..."),(process.env.FF_VERBOSE==="true"||e.verbose)&&console.log(` Safelist has ${h.safelist?h.safelist.length:0} items`),l.save(h),console.log(` \u2713 Cache saved successfully
72
+ `)),d.useTailwindV4){let w=d.extractClassesFromComponentsConfig(u.componentsConfig),q=[...u.safelist||[],...w||[]];u.safelist=[...new Set(q)].sort(),u.themeCSS||(u.themeCSS=d.generateThemeCSS({variables:u.variables||{},semanticVariables:u.semanticVariables||{},semanticDarkVariables:u.semanticDarkVariables||{},fontFaces:u.fonts||[],keyframes:u.keyframes||{},animations:u.animations||{},custom:u.custom||{}})),u.classesContent||(u.classesContent=d.generateClassesContent(u.safelist))}if(console.log("\u{1F4BE} Saving cache..."),(process.env.FF_VERBOSE==="true"||e.verbose)&&console.log(` Safelist has ${u.safelist?u.safelist.length:0} items`),l.save(u),console.log(` \u2713 Cache saved successfully
73
73
  `),console.log("\u2705 Setup complete!"),console.log(" Your FrontFriend configuration has been cached."),console.log(" The Tailwind plugin will now use this cached data."),o.types){console.log(`
74
- \u{1F524} Generating TypeScript types...`);try{let{generateIconTypes:w}=pe(),q=o.aliases&&o.aliases.types?g.join(o.appRoot,o.aliases.types,"frontfriend.d.ts"):void 0;w({projectRoot:o.appRoot,outputPath:q})}catch(w){console.log(" \u26A0\uFE0F Type generation failed:",w.message),console.log(' Enable type generation in frontfriend.config.js with "types": true')}}process.exit(0)}console.log(` \u2139\uFE0F Pre-processed tokens not available, falling back to local processing
75
- `);let[y,m,b,k,A,M]=await Promise.all([f.fetchTokens(),f.fetchComponentsConfig(),f.fetchFonts(),f.fetchIcons(),f.fetchVersion(),f.fetchCustomCss()]),Se=m;if(console.log(" \u2713 Tokens fetched"),y.global||y.colors||y.semantic||y.semanticDark){let w=[y.global?"global":null,y.colors?"colors":null,y.semantic?"semantic":null,y.semanticDark?"semanticDark":null].filter(Boolean).join(", ");console.log(` (Found: ${w})`)}console.log(" \u2713 Components config fetched"),console.log(" \u2713 Fonts fetched"),console.log(" \u2713 Icons fetched"),console.log(" \u2713 Version fetched"),console.log(` \u2713 Custom CSS fetched
76
- `),console.log("\u2699\uFE0F Processing tokens..."),console.log(" Processing raw token data...");let S=await u.process({colors:y.colors||y.global,semantic:y.semantic,semanticDark:y.semanticDark,fonts:b,globalTokens:y.global,animations:y.animations,version:A==null?void 0:A.version,ffId:o.ffId,customCss:M});console.log(" \u2713 Colors processed"),console.log(" \u2713 Semantic tokens processed"),S.fontFaces.length>0&&console.log(` \u2713 ${S.fontFaces.length} font faces processed`),Object.keys(S.animations).length>0&&console.log(` \u2713 ${Object.keys(S.animations).length} animations processed`),console.log(`
77
- `);let jn=u.extractClassesFromComponentsConfig(Se),$n=[...S.safelist||[],...jn||[]],Fe=[...new Set($n)].sort(),je,$e;u.useTailwindV4&&(console.log("\u{1F3A8} Generating Tailwind v4 CSS artifacts..."),je=u.generateThemeCSS(S),$e=u.generateClassesContent(Fe),console.log(" \u2713 theme.css generated"),console.log(` \u2713 classes.css generated for @source scanning
78
- `));let N={tokens:S.utilities,variables:S.variables,semanticVariables:S.semanticVariables,semanticDarkVariables:S.semanticDarkVariables,fonts:S.fontFaces,icons:k,componentsConfig:Se,keyframes:S.keyframes,animations:S.animations,safelist:Fe,version:A,metadata:S.metadata,custom:S.custom,themeCSS:je,classesContent:$e};console.log("\u{1F4BE} Saving cache..."),(process.env.FF_VERBOSE==="true"||e.verbose)&&(console.log(" Cache data summary:"),console.log(` - Tokens: ${Object.keys(N.tokens||{}).length} utilities`),console.log(` - Variables: ${Object.keys(N.variables||{}).length} CSS variables`),console.log(` - Semantic variables: ${Object.keys(N.semanticVariables||{}).length} semantic variables`),console.log(` - Font faces: ${(N.fonts||[]).length} fonts`),console.log(` - Safelist: ${(N.safelist||[]).length} safelist classes`)),l.save(N),console.log(` \u2713 Cache saved successfully
79
- `);let Te=Sn(o.appRoot,l.getIconLibrary());if(Te.changed&&console.log(` \u2713 Icon library: ${Te.iconLibrary} (adapter + dependency wired)
74
+ \u{1F524} Generating TypeScript types...`);try{let{generateIconTypes:w}=me(),q=o.aliases&&o.aliases.types?g.join(o.appRoot,o.aliases.types,"frontfriend.d.ts"):void 0;w({projectRoot:o.appRoot,outputPath:q})}catch(w){console.log(" \u26A0\uFE0F Type generation failed:",w.message),console.log(' Enable type generation in frontfriend.config.js with "types": true')}}process.exit(0)}console.log(` \u2139\uFE0F Pre-processed tokens not available, falling back to local processing
75
+ `);let[y,m,b,C,A,M]=await Promise.all([f.fetchTokens(),f.fetchComponentsConfig(),f.fetchFonts(),f.fetchIcons(),f.fetchVersion(),f.fetchCustomCss()]),Fe=m;if(console.log(" \u2713 Tokens fetched"),y.global||y.colors||y.semantic||y.semanticDark){let w=[y.global?"global":null,y.colors?"colors":null,y.semantic?"semantic":null,y.semanticDark?"semanticDark":null].filter(Boolean).join(", ");console.log(` (Found: ${w})`)}console.log(" \u2713 Components config fetched"),console.log(" \u2713 Fonts fetched"),console.log(" \u2713 Icons fetched"),console.log(" \u2713 Version fetched"),console.log(` \u2713 Custom CSS fetched
76
+ `),console.log("\u2699\uFE0F Processing tokens..."),console.log(" Processing raw token data...");let S=await d.process({colors:y.colors||y.global,semantic:y.semantic,semanticDark:y.semanticDark,fonts:b,globalTokens:y.global,animations:y.animations,version:A==null?void 0:A.version,ffId:o.ffId,customCss:M});console.log(" \u2713 Colors processed"),console.log(" \u2713 Semantic tokens processed"),S.fontFaces.length>0&&console.log(` \u2713 ${S.fontFaces.length} font faces processed`),Object.keys(S.animations).length>0&&console.log(` \u2713 ${Object.keys(S.animations).length} animations processed`),console.log(`
77
+ `);let jn=d.extractClassesFromComponentsConfig(Fe),An=[...S.safelist||[],...jn||[]],$e=[...new Set(An)].sort(),je,Ae;d.useTailwindV4&&(console.log("\u{1F3A8} Generating Tailwind v4 CSS artifacts..."),je=d.generateThemeCSS(S),Ae=d.generateClassesContent($e),console.log(" \u2713 theme.css generated"),console.log(` \u2713 classes.css generated for @source scanning
78
+ `));let N={tokens:S.utilities,variables:S.variables,semanticVariables:S.semanticVariables,semanticDarkVariables:S.semanticDarkVariables,fonts:S.fontFaces,icons:C,componentsConfig:Fe,keyframes:S.keyframes,animations:S.animations,safelist:$e,version:A,metadata:S.metadata,custom:S.custom,themeCSS:je,classesContent:Ae};console.log("\u{1F4BE} Saving cache..."),(process.env.FF_VERBOSE==="true"||e.verbose)&&(console.log(" Cache data summary:"),console.log(` - Tokens: ${Object.keys(N.tokens||{}).length} utilities`),console.log(` - Variables: ${Object.keys(N.variables||{}).length} CSS variables`),console.log(` - Semantic variables: ${Object.keys(N.semanticVariables||{}).length} semantic variables`),console.log(` - Font faces: ${(N.fonts||[]).length} fonts`),console.log(` - Safelist: ${(N.safelist||[]).length} safelist classes`)),l.save(N),console.log(` \u2713 Cache saved successfully
79
+ `);let Te=Fn(o.appRoot,l.getIconLibrary());if(Te.changed&&console.log(` \u2713 Icon library: ${Te.iconLibrary} (adapter + dependency wired)
80
80
  `),console.log("\u2705 Setup complete!"),console.log(" Your FrontFriend configuration has been cached."),console.log(" The Tailwind plugin will now use this cached data."),o.types){console.log(`
81
- \u{1F524} Generating TypeScript types...`);try{let{generateIconTypes:w}=pe(),q=o.aliases&&o.aliases.types?g.join(o.appRoot,o.aliases.types,"frontfriend.d.ts"):void 0;w({projectRoot:o.appRoot,outputPath:q})}catch(w){console.log(" \u26A0\uFE0F Type generation failed:",w.message),console.log(' Enable type generation in frontfriend.config.js with "types": true')}}process.exit(0)}catch(t){t instanceof E?console.error("\u274C Configuration Error:",t.message):t instanceof _t?(console.error("\u274C API Error:",t.message),console.error(` Status: ${t.statusCode}`),console.error(` URL: ${t.url}`)):t instanceof Ce?(console.error("\u274C Cache Error:",t.message),console.error(` Operation: ${t.operation}`)):console.error("\u274C Setup failed:",t.message),process.exit(1)}});T.command("clean").description("Remove cached configuration").action(async()=>{try{console.log(`\u{1F9F9} Cleaning FrontFriend cache...
82
- `);let n=new G().load(),t=new D(n.appRoot);t.exists()?(t.clear(),console.log("\u2705 Cache cleared successfully")):console.log("\u2139\uFE0F No cache found"),process.exit(0)}catch(e){e instanceof Ce?(console.error("\u274C Cache Error:",e.message),console.error(` Operation: ${e.operation}`)):console.error("\u274C Clean failed:",e.message),process.exit(1)}});T.command("status").description("Show cache status and configuration").action(async()=>{try{console.log("\u{1F4CA} FrontFriend Status"),console.log(`===================
83
- `),console.log("Package:"),console.log(` Version: ${vn}`),console.log("");let n=await new G().load();console.log("Configuration:"),console.log(` FF_ID: ${n.ffId||"Not set"}`),console.log(` App Root: ${n.appRoot}`),n.tag&&console.log(` Tag: ${n.tag}`),n.version&&console.log(` Version: ${n.version}`),console.log("");let t=new D(n.appRoot),o=t.getCacheDir();if(console.log("Cache:"),console.log(` Directory: ${g.relative(process.cwd(),o)}`),t.exists()){console.log(` Status: ${t.isValid()?"\u2705 Valid":"\u26A0\uFE0F Expired"}`);let s=t.load();if(s&&s.metadata){let r=new Date(s.metadata.timestamp);console.log(` Created: ${r.toLocaleString()}`),console.log(` Format Version: ${s.metadata.version||"Unknown"}`)}s&&s.versionMetadata&&(console.log(" Cached Version Info:"),s.versionMetadata.version&&console.log(` Version: ${s.versionMetadata.version}`),s.versionMetadata.tag&&console.log(` Tag: ${s.versionMetadata.tag}`))}else console.log(" Status: \u274C Not found");process.exit(0)}catch(e){e instanceof E?console.error("\u274C Configuration Error:",e.message):e instanceof Ce?(console.error("\u274C Cache Error:",e.message),console.error(` Operation: ${e.operation}`)):console.error("\u274C Status check failed:",e.message),process.exit(1)}});T.command("migrate").description("Migrate shadcn components (cva + non-cva) into FrontFriend config, rewriting classes to FF tokens by default").option("--component <name>",'Component to migrate, or "all" to scan the UI dir',"all").option("--input <path>","Path to the shadcn component source").option("--output <path>","Output JSON path for migrated config",xn).option("--no-push","Do not push migrated config to the configured FrontFriend cloud").option("--keep-shadcn-classes","Keep raw shadcn classes instead of rewriting them to FrontFriend tokens (default: rewrite)").action(async e=>{try{let t=await new G().load(),o=t.appRoot,s=e.input&&e.component==="all"?we(e.input):e.component,r;if(e.input){let m=g.resolve(o,e.input);if(!p.existsSync(m))throw new E(`Component source not found: ${g.relative(o,m)}`);let b=p.readFileSync(m,"utf8");r=ve(b,s)}else if(s==="all")r=yo(o);else{let m=Fn(o,s);if(m.length===0)throw new E(`Component source "${s}" not found under components/ui or src/components/ui`,"component");let b=p.readFileSync(m[0].inputPath,"utf8");r=ve(b,s)}if(r.skipped===!0||Object.keys(r.config||{}).length===0){let m=r.reason||(Array.isArray(r.skipped)&&r.skipped.length>0?r.skipped.map(b=>`${b.component} (${b.reason})`).join(", "):"no cva-structured components or literal className slots found");console.log(`\u23ED\uFE0F Skipped ${s}: ${m}`),process.exit(0)}e.keepShadcnClasses||(r.config=oe(r.config,St)),r.config=oe(r.config,co);let i=Ut(o),c="",a="",l=null;if(i){let m=p.readFileSync(i,"utf8"),b=Ft(m);if(c=b.custom,a=b.scaffold,l=jt(m),c){let k=g.join(new D(o).getCacheDir(),"migrated-customcss.css");p.mkdirSync(g.dirname(k),{recursive:!0}),p.writeFileSync(k,`${c}
84
- `)}if(l){let k=g.join(new D(o).getCacheDir(),"migrated-theme-recipe.json");p.mkdirSync(g.dirname(k),{recursive:!0}),H(k,l)}}let f=g.resolve(o,e.output);H(f,r.config),ho(o,r.config);let u=_(g.join(o,"components.json"))||{},h=xe[u.iconLibrary]?u.iconLibrary:void 0,y=!1;e.push&&t.ffId&&(await new bn(t.ffId,{baseURL:t["api-url"]||t.apiUrl,authToken:t["auth-token"]||t.authToken}).pushComponentsConfig(r.config,c||void 0,h,{themeStudioRecipe:l}),y=!0,h&&console.log(` Icon library: ${h} (pushed to the design system)`),i&&c&&(p.writeFileSync(`${i}.bak`,p.readFileSync(i)),p.writeFileSync(i,a?`${a}
85
- `:""),console.log(` Centralised host CSS \u2192 DS customCss (backup: ${g.relative(o,i)}.bak)`))),console.log("\u2705 Migration complete!"),console.log(` Component: ${s==="all"?Object.keys(r.config).join(", "):s}`),console.log(` Output: ${g.relative(o,f)}`),console.log(" Local config: cached for the FrontFriend plugin"),r.skipped&&r.skipped.length>0&&console.log(` Skipped: ${r.skipped.map(m=>`${m.component} (${m.reason})`).join(", ")}`),console.log(y?" Cloud config: pushed user override":" Cloud config: not pushed (missing ff-id or --no-push)"),process.exit(0)}catch(n){n instanceof E?console.error("\u274C Migration Error:",n.message):console.error("\u274C Migration failed:",n.message),process.exit(1)}});T.command("download").description("Download components from registry").argument("<components...>",'component names to download (or "all" to download all components)').option("-f, --framework <framework>","Framework to download components for (react/vue)").option("-o, --output <path>","Output directory for components").option("--registry <generation>","Registry generation to use (legacy/v4)").option("--overwrite","Overwrite existing files").action(async(e,n)=>{try{console.log(`\u{1F4E6} Downloading components...
81
+ \u{1F524} Generating TypeScript types...`);try{let{generateIconTypes:w}=me(),q=o.aliases&&o.aliases.types?g.join(o.appRoot,o.aliases.types,"frontfriend.d.ts"):void 0;w({projectRoot:o.appRoot,outputPath:q})}catch(w){console.log(" \u26A0\uFE0F Type generation failed:",w.message),console.log(' Enable type generation in frontfriend.config.js with "types": true')}}process.exit(0)}catch(t){t instanceof E?console.error("\u274C Configuration Error:",t.message):t instanceof It?(console.error("\u274C API Error:",t.message),console.error(` Status: ${t.statusCode}`),console.error(` URL: ${t.url}`)):t instanceof ke?(console.error("\u274C Cache Error:",t.message),console.error(` Operation: ${t.operation}`)):console.error("\u274C Setup failed:",t.message),process.exit(1)}});T.command("clean").description("Remove cached configuration").action(async()=>{try{console.log(`\u{1F9F9} Cleaning FrontFriend cache...
82
+ `);let n=new G().load(),t=new D(n.appRoot);t.exists()?(t.clear(),console.log("\u2705 Cache cleared successfully")):console.log("\u2139\uFE0F No cache found"),process.exit(0)}catch(e){e instanceof ke?(console.error("\u274C Cache Error:",e.message),console.error(` Operation: ${e.operation}`)):console.error("\u274C Clean failed:",e.message),process.exit(1)}});T.command("status").description("Show cache status and configuration").action(async()=>{try{console.log("\u{1F4CA} FrontFriend Status"),console.log(`===================
83
+ `),console.log("Package:"),console.log(` Version: ${wn}`),console.log("");let n=await new G().load();console.log("Configuration:"),console.log(` FF_ID: ${n.ffId||"Not set"}`),console.log(` App Root: ${n.appRoot}`),n.tag&&console.log(` Tag: ${n.tag}`),n.version&&console.log(` Version: ${n.version}`),console.log("");let t=new D(n.appRoot),o=t.getCacheDir();if(console.log("Cache:"),console.log(` Directory: ${g.relative(process.cwd(),o)}`),t.exists()){console.log(` Status: ${t.isValid()?"\u2705 Valid":"\u26A0\uFE0F Expired"}`);let r=t.load();if(r&&r.metadata){let s=new Date(r.metadata.timestamp);console.log(` Created: ${s.toLocaleString()}`),console.log(` Format Version: ${r.metadata.version||"Unknown"}`)}r&&r.versionMetadata&&(console.log(" Cached Version Info:"),r.versionMetadata.version&&console.log(` Version: ${r.versionMetadata.version}`),r.versionMetadata.tag&&console.log(` Tag: ${r.versionMetadata.tag}`))}else console.log(" Status: \u274C Not found");process.exit(0)}catch(e){e instanceof E?console.error("\u274C Configuration Error:",e.message):e instanceof ke?(console.error("\u274C Cache Error:",e.message),console.error(` Operation: ${e.operation}`)):console.error("\u274C Status check failed:",e.message),process.exit(1)}});T.command("migrate").description("Migrate shadcn components (cva + non-cva) into FrontFriend config, rewriting classes to FF tokens by default").option("--component <name>",'Component to migrate, or "all" to scan the UI dir',"all").option("--input <path>","Path to the shadcn component source").option("--output <path>","Output JSON path for migrated config",Cn).option("--no-push","Do not push migrated config to the configured FrontFriend cloud").option("--keep-shadcn-classes","Keep raw shadcn classes instead of rewriting them to FrontFriend tokens (default: rewrite)").action(async e=>{try{let t=await new G().load(),o=t.appRoot,r=e.input&&e.component==="all"?xe(e.input):e.component,s;if(e.input){let m=g.resolve(o,e.input);if(!p.existsSync(m))throw new E(`Component source not found: ${g.relative(o,m)}`);let b=p.readFileSync(m,"utf8");s=we(b,r)}else if(r==="all")s=wo(o);else{let m=$n(o,r);if(m.length===0)throw new E(`Component source "${r}" not found under components/ui or src/components/ui`,"component");let b=p.readFileSync(m[0].inputPath,"utf8");s=we(b,r)}if(s.skipped===!0||Object.keys(s.config||{}).length===0){let m=s.reason||(Array.isArray(s.skipped)&&s.skipped.length>0?s.skipped.map(b=>`${b.component} (${b.reason})`).join(", "):"no cva-structured components or literal className slots found");console.log(`\u23ED\uFE0F Skipped ${r}: ${m}`),process.exit(0)}e.keepShadcnClasses||(s.config=re(s.config,Ft)),s.config=re(s.config,ao);let i=qt(o),c="",a="",l=null;if(i){let m=p.readFileSync(i,"utf8"),b=$t(m);if(c=b.custom,a=b.scaffold,l=jt(m),c){let C=g.join(new D(o).getCacheDir(),"migrated-customcss.css");p.mkdirSync(g.dirname(C),{recursive:!0}),p.writeFileSync(C,`${c}
84
+ `)}if(l){let C=g.join(new D(o).getCacheDir(),"migrated-theme-recipe.json");p.mkdirSync(g.dirname(C),{recursive:!0}),H(C,l)}}let f=g.resolve(o,e.output);H(f,s.config),mo(o,s.config);let d=_(g.join(o,"components.json"))||{},u=Ce[d.iconLibrary]?d.iconLibrary:void 0,y=!1;e.push&&t.ffId&&(await new vn(t.ffId,{baseURL:t["api-url"]||t.apiUrl,authToken:t["auth-token"]||t.authToken}).pushComponentsConfig(s.config,c||void 0,u,{themeStudioRecipe:l}),y=!0,u&&console.log(` Icon library: ${u} (pushed to the design system)`),i&&c&&(p.writeFileSync(`${i}.bak`,p.readFileSync(i)),p.writeFileSync(i,a?`${a}
85
+ `:""),console.log(` Centralised host CSS \u2192 DS customCss (backup: ${g.relative(o,i)}.bak)`))),console.log("\u2705 Migration complete!"),console.log(` Component: ${r==="all"?Object.keys(s.config).join(", "):r}`),console.log(` Output: ${g.relative(o,f)}`),console.log(" Local config: cached for the FrontFriend plugin"),s.skipped&&s.skipped.length>0&&console.log(` Skipped: ${s.skipped.map(m=>`${m.component} (${m.reason})`).join(", ")}`),console.log(y?" Cloud config: pushed user override":" Cloud config: not pushed (missing ff-id or --no-push)"),process.exit(0)}catch(n){n instanceof E?console.error("\u274C Migration Error:",n.message):console.error("\u274C Migration failed:",n.message),process.exit(1)}});T.command("download").description("Download components from registry").argument("<components...>",'component names to download (or "all" to download all components)').option("-f, --framework <framework>","Framework to download components for (react/vue)").option("-o, --output <path>","Output directory for components").option("--registry <generation>","Registry generation to use (legacy/v4)").option("--overwrite","Overwrite existing files").action(async(e,n)=>{try{console.log(`\u{1F4E6} Downloading components...
86
86
  `);let o=await new G().load();if(!o.ffId)throw new E(`ff-id not found in frontfriend.config.js
87
- Please add "ff-id" to your frontfriend.config.js file`,"ff-id");let s=new Ct({appRoot:o.appRoot,config:o,framework:n.framework,registryGeneration:n.registry,outputPath:n.output,overwrite:n.overwrite}),r=e;if(e.length===1&&e[0].toLowerCase()==="all"){let c=await s.getAllComponents(),a=await s.getCustomComponents();process.env.FF_DEBUG&&console.log(`Debug: Found ${a.length} custom components: ${a.join(", ")}`),c.length===0&&(console.error("\u274C Failed to fetch component list"),process.exit(1));let l=new Set(a),f=c.filter(u=>!l.has(u));r=[...a,...f],console.log("\u{1F4CB} Configuration"),console.log(` Framework: ${s.framework}`),console.log(` Registry: ${s.registryGeneration}`),console.log(` Output: ${s.outputPath}`),console.log(` Components: All ${r.length} components`),process.env.FF_DEBUG&&a.length>0&&console.log(` Debug: ${a.length} custom components will override standard ones`),console.log("")}else console.log("\u{1F4CB} Configuration"),console.log(` Framework: ${s.framework}`),console.log(` Registry: ${s.registryGeneration}`),console.log(` Output: ${s.outputPath}`),console.log(` Components: ${e.join(", ")}
88
- `);let i=await s.downloadComponents(r);if(i.successful.length>0){console.log(`
89
- \u2705 Download complete!`),console.log(` Downloaded: ${i.successful.length} components`);let c=new D(o.appRoot).getIconLibrary()||o.iconLibrary,a=Sn(o.appRoot,c);a.changed&&console.log(` Icon library: ${a.iconLibrary} (adapter + dependency wired)`)}i.failed.length>0&&(console.log(""),i.failed.forEach(c=>{c.error.includes("not found")?console.log(`\u274C ${c.error}`):console.log(`\u274C Failed to download ${c.component}: ${c.error}`)})),i.successful.length>0&&i.dependencies.length>0&&(console.log(`
87
+ Please add "ff-id" to your frontfriend.config.js file`,"ff-id");let r=new kt({appRoot:o.appRoot,config:o,framework:n.framework,registryGeneration:n.registry,outputPath:n.output,overwrite:n.overwrite}),s=e;if(e.length===1&&e[0].toLowerCase()==="all"){let c=await r.getAllComponents(),a=await r.getCustomComponents();process.env.FF_DEBUG&&console.log(`Debug: Found ${a.length} custom components: ${a.join(", ")}`),c.length===0&&(console.error("\u274C Failed to fetch component list"),process.exit(1));let l=new Set(a),f=c.filter(d=>!l.has(d));s=[...a,...f],console.log("\u{1F4CB} Configuration"),console.log(` Framework: ${r.framework}`),console.log(` Registry: ${r.registryGeneration}`),console.log(` Output: ${r.outputPath}`),console.log(` Components: All ${s.length} components`),process.env.FF_DEBUG&&a.length>0&&console.log(` Debug: ${a.length} custom components will override standard ones`),console.log("")}else console.log("\u{1F4CB} Configuration"),console.log(` Framework: ${r.framework}`),console.log(` Registry: ${r.registryGeneration}`),console.log(` Output: ${r.outputPath}`),console.log(` Components: ${e.join(", ")}
88
+ `);let i=await r.downloadComponents(s);if(i.successful.length>0){console.log(`
89
+ \u2705 Download complete!`),console.log(` Downloaded: ${i.successful.length} components`);let c=new D(o.appRoot).getIconLibrary()||o.iconLibrary,a=Fn(o.appRoot,c);a.changed&&console.log(` Icon library: ${a.iconLibrary} (adapter + dependency wired)`)}i.failed.length>0&&(console.log(""),i.failed.forEach(c=>{c.error.includes("not found")?console.log(`\u274C ${c.error}`):console.log(`\u274C Failed to download ${c.component}: ${c.error}`)})),i.successful.length>0&&i.dependencies.length>0&&(console.log(`
90
90
  \u{1F4E6} Install dependencies:`),console.log(` npm install ${i.dependencies.join(" ")}`)),i.successful.length===0&&i.failed.length>0&&process.exit(1),process.exit(0)}catch(t){t instanceof E?(console.error("\u274C Configuration Error:",t.message),t.missingKey&&console.error(` Missing key: ${t.missingKey}`)):console.error("\u274C Download failed:",t.message),process.exit(1)}});T.parse(process.argv);process.argv.slice(2).length||(T.outputHelp(),process.exit(0));
91
91
  //# sourceMappingURL=cli-temp.js.map