shadcn 4.20.0 → 4.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import {c as c$2}from'./chunk-2XFBGS5K.js';import {m,f,l,b,d as d$1,c as c$1,e,n,v,q as q$1,r,s,t,u,A as A$1,C,y,p,g}from'./chunk-4WBGNKSZ.js';import {a,d,c,b as b$1,g as g$1,f as f$1}from'./chunk-7SBJAAAY.js';import pa,{promises,existsSync,statSync}from'fs';import*as S from'path';import S__default,{join,basename,normalize,delimiter,resolve,dirname}from'path';import {z as z$1}from'zod';import {green,cyan,yellow,red,gray}from'kleur/colors';import te from'fs-extra';import Jt from'fast-glob';import {loadConfig,createMatchPath}from'tsconfig-paths';import {cosmiconfig}from'cosmiconfig';import gp,{tmpdir,homedir}from'os';import Kc from'ora';import {Project,SyntaxKind,ScriptKind,VariableDeclarationKind,QuoteKind}from'ts-morph';import {transformFromAstSync}from'@babel/core';import {parse}from'@babel/parser';import tl from'@babel/plugin-transform-typescript';import*as rr from'recast';import gl from'prompts';import {AsyncLocalStorage}from'async_hooks';import Xe from'deepmerge';import {createHash}from'crypto';import {SocksClient}from'socks';import {EnvHttpProxyAgent,Agent}from'undici';import {execa}from'execa';import af from'stringify-object';import ae,{cwd}from'process';import ip from'readline';import mp from'events';import*as mo from'fs/promises';import mo__default from'fs/promises';import {createRequire}from'module';import {spawn}from'child_process';import {PassThrough}from'stream';import yp from'tty';import O from'postcss';import Id from'postcss/lib/at-rule';import {twMerge}from'tailwind-merge';import Th from'fuzzysort';var je=process.env.REGISTRY_URL??"https://ui.shadcn.com/r",V=je.replace(/\/r\/?$/,""),Ft="new-york-v4",jn=[{name:"neutral",label:"Neutral"},{name:"zinc",label:"Zinc"},{name:"stone",label:"Stone"},{name:"mauve",label:"Mauve"},{name:"olive",label:"Olive"},{name:"mist",label:"Mist"},{name:"taupe",label:"Taupe"}],q={"@shadcn":`${je}/styles/{style}/{name}.json`};var rm=[{name:"toast",deprecatedBy:"sonner",message:"The toast component is only available for Base UI projects. Use the sonner component instead.",availableIn:["base"]},{name:"toaster",deprecatedBy:"sonner",message:"The toaster component is deprecated. Use the sonner component instead."}],sm=[{name:"sonner",hiddenIn:["base"]}];var G={NETWORK_ERROR:"NETWORK_ERROR",NOT_FOUND:"NOT_FOUND",GONE:"GONE",UNAUTHORIZED:"UNAUTHORIZED",FORBIDDEN:"FORBIDDEN",FETCH_ERROR:"FETCH_ERROR",NOT_CONFIGURED:"NOT_CONFIGURED",INVALID_CONFIG:"INVALID_CONFIG",MISSING_ENV_VARS:"MISSING_ENV_VARS",LOCAL_FILE_ERROR:"LOCAL_FILE_ERROR",PARSE_ERROR:"PARSE_ERROR",VALIDATION_ERROR:"VALIDATION_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},F=class extends Error{code;statusCode;context;suggestion;timestamp;cause;constructor(t,r={}){super(t),this.name="RegistryError",this.code=r.code||G.UNKNOWN_ERROR,this.statusCode=r.statusCode,this.cause=r.cause,this.context=r.context,this.suggestion=r.suggestion,this.timestamp=new Date,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor);}toJSON(){return {name:this.name,message:this.message,code:this.code,statusCode:this.statusCode,context:this.context,suggestion:this.suggestion,timestamp:this.timestamp,stack:this.stack}}},_e=class extends F{constructor(r,s){let n=`The item at ${r} was not found. It may not exist at the registry.`;super(n,{code:G.NOT_FOUND,statusCode:404,cause:s,context:{url:r},suggestion:"Check if the item name is correct and the registry URL is accessible."});this.url=r;this.name="RegistryNotFoundError";}},Mt=class extends F{constructor(r,s){let n=`The item at ${r} is no longer available. It may have been removed or expired.`;super(n,{code:G.GONE,statusCode:410,cause:s,context:{url:r},suggestion:"This resource was previously available but has been permanently removed. Check if a newer version exists or contact the registry maintainer."});this.url=r;this.name="RegistryGoneError";}},it=class extends F{constructor(r,s){let n=`You are not authorized to access the item at ${r}. If this is a remote registry, you may need to authenticate.`;super(n,{code:G.UNAUTHORIZED,statusCode:401,cause:s,context:{url:r},suggestion:"Check your authentication credentials and environment variables."});this.url=r;this.name="RegistryUnauthorizedError";}},ot=class extends F{constructor(r,s){let n=`You are not authorized to access the item at ${r}. If this is a remote registry, you may need to authenticate.`;super(n,{code:G.FORBIDDEN,statusCode:403,cause:s,context:{url:r},suggestion:"Check your authentication credentials and environment variables."});this.url=r;this.name="RegistryForbiddenError";}},at=class extends F{constructor(r,s,n,i){let o=s?`Failed to fetch from registry (${s}): ${r}`:`Failed to fetch from registry: ${r}`,a=typeof i=="string"&&i?`${o} - ${i}`:o,c="Check your network connection and try again.";s===404?c="The requested resource was not found. Check the URL or item name.":s===500?c="The registry server encountered an error. Try again later.":s&&s>=400&&s<500&&(c="There was a client error. Check your request parameters.");super(a,{code:G.FETCH_ERROR,statusCode:s,cause:i,context:{url:r,responseBody:n},suggestion:c});this.url=r;this.responseBody=n;this.name="RegistryFetchError";}},ge=class extends F{constructor(r){let s=r?`Unknown registry "${r}". Make sure it is defined under "registries" in your components.json or package.json file:
1
+ import {c as c$2}from'./chunk-2XFBGS5K.js';import {m,f,l,b,d as d$1,c as c$1,e,n,v,q as q$1,r,s,t,u,A as A$1,C,y,p,g}from'./chunk-4WBGNKSZ.js';import {a,d,c,b as b$1,g as g$1,f as f$1}from'./chunk-G5AI2VJ6.js';import pa,{promises,existsSync,statSync}from'fs';import*as S from'path';import S__default,{join,basename,normalize,delimiter,resolve,dirname}from'path';import {z as z$1}from'zod';import {green,cyan,yellow,red,gray}from'kleur/colors';import te from'fs-extra';import Jt from'fast-glob';import {loadConfig,createMatchPath}from'tsconfig-paths';import {cosmiconfig}from'cosmiconfig';import gp,{tmpdir,homedir}from'os';import Kc from'ora';import {Project,SyntaxKind,ScriptKind,VariableDeclarationKind,QuoteKind}from'ts-morph';import {transformFromAstSync}from'@babel/core';import {parse}from'@babel/parser';import tl from'@babel/plugin-transform-typescript';import*as rr from'recast';import gl from'prompts';import {AsyncLocalStorage}from'async_hooks';import Xe from'deepmerge';import {createHash}from'crypto';import {SocksClient}from'socks';import {EnvHttpProxyAgent,Agent}from'undici';import {execa}from'execa';import af from'stringify-object';import ae,{cwd}from'process';import ip from'readline';import mp from'events';import*as mo from'fs/promises';import mo__default from'fs/promises';import {createRequire}from'module';import {spawn}from'child_process';import {PassThrough}from'stream';import yp from'tty';import O from'postcss';import Id from'postcss/lib/at-rule';import {twMerge}from'cn';import Th from'fuzzysort';var je=process.env.REGISTRY_URL??"https://ui.shadcn.com/r",V=je.replace(/\/r\/?$/,""),Ft="new-york-v4",jn=[{name:"neutral",label:"Neutral"},{name:"zinc",label:"Zinc"},{name:"stone",label:"Stone"},{name:"mauve",label:"Mauve"},{name:"olive",label:"Olive"},{name:"mist",label:"Mist"},{name:"taupe",label:"Taupe"}],q={"@shadcn":`${je}/styles/{style}/{name}.json`};var rm=[{name:"toast",deprecatedBy:"sonner",message:"The toast component is only available for Base UI projects. Use the sonner component instead.",availableIn:["base"]},{name:"toaster",deprecatedBy:"sonner",message:"The toaster component is deprecated. Use the sonner component instead."}],sm=[{name:"sonner",hiddenIn:["base"]}];var G={NETWORK_ERROR:"NETWORK_ERROR",NOT_FOUND:"NOT_FOUND",GONE:"GONE",UNAUTHORIZED:"UNAUTHORIZED",FORBIDDEN:"FORBIDDEN",FETCH_ERROR:"FETCH_ERROR",NOT_CONFIGURED:"NOT_CONFIGURED",INVALID_CONFIG:"INVALID_CONFIG",MISSING_ENV_VARS:"MISSING_ENV_VARS",LOCAL_FILE_ERROR:"LOCAL_FILE_ERROR",PARSE_ERROR:"PARSE_ERROR",VALIDATION_ERROR:"VALIDATION_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},F=class extends Error{code;statusCode;context;suggestion;timestamp;cause;constructor(t,r={}){super(t),this.name="RegistryError",this.code=r.code||G.UNKNOWN_ERROR,this.statusCode=r.statusCode,this.cause=r.cause,this.context=r.context,this.suggestion=r.suggestion,this.timestamp=new Date,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor);}toJSON(){return {name:this.name,message:this.message,code:this.code,statusCode:this.statusCode,context:this.context,suggestion:this.suggestion,timestamp:this.timestamp,stack:this.stack}}},_e=class extends F{constructor(r,s){let n=`The item at ${r} was not found. It may not exist at the registry.`;super(n,{code:G.NOT_FOUND,statusCode:404,cause:s,context:{url:r},suggestion:"Check if the item name is correct and the registry URL is accessible."});this.url=r;this.name="RegistryNotFoundError";}},Mt=class extends F{constructor(r,s){let n=`The item at ${r} is no longer available. It may have been removed or expired.`;super(n,{code:G.GONE,statusCode:410,cause:s,context:{url:r},suggestion:"This resource was previously available but has been permanently removed. Check if a newer version exists or contact the registry maintainer."});this.url=r;this.name="RegistryGoneError";}},it=class extends F{constructor(r,s){let n=`You are not authorized to access the item at ${r}. If this is a remote registry, you may need to authenticate.`;super(n,{code:G.UNAUTHORIZED,statusCode:401,cause:s,context:{url:r},suggestion:"Check your authentication credentials and environment variables."});this.url=r;this.name="RegistryUnauthorizedError";}},ot=class extends F{constructor(r,s){let n=`You are not authorized to access the item at ${r}. If this is a remote registry, you may need to authenticate.`;super(n,{code:G.FORBIDDEN,statusCode:403,cause:s,context:{url:r},suggestion:"Check your authentication credentials and environment variables."});this.url=r;this.name="RegistryForbiddenError";}},at=class extends F{constructor(r,s,n,i){let o=s?`Failed to fetch from registry (${s}): ${r}`:`Failed to fetch from registry: ${r}`,a=typeof i=="string"&&i?`${o} - ${i}`:o,c="Check your network connection and try again.";s===404?c="The requested resource was not found. Check the URL or item name.":s===500?c="The registry server encountered an error. Try again later.":s&&s>=400&&s<500&&(c="There was a client error. Check your request parameters.");super(a,{code:G.FETCH_ERROR,statusCode:s,cause:i,context:{url:r,responseBody:n},suggestion:c});this.url=r;this.responseBody=n;this.name="RegistryFetchError";}},ge=class extends F{constructor(r){let s=r?`Unknown registry "${r}". Make sure it is defined under "registries" in your components.json or package.json file:
2
2
  {
3
3
  "registries": {
4
4
  "${r}": "[URL_TO_REGISTRY]"
@@ -91,7 +91,7 @@ Filtered results for: ${this.inputValue?this.inputValue:e.gray("Enter something
91
91
  `}renderOption(c,f,l,u){let d=(f.selected?e.green(i.radioOn):i.radioOff)+" "+u+" ",p;return f.disabled?p=c===l?e.gray().underline(f.title):e.strikethrough().gray(f.title):p=c===l?e.cyan().underline(f.title):f.title,d+p}renderDoneOrInstructions(){if(this.done)return this.value.filter(f=>f.selected).map(f=>f.title).join(", ");let c=[e.gray(this.hint),this.renderInstructions(),this.renderCurrentInput()];return this.filteredOptions.length&&this.filteredOptions[this.cursor].disabled&&c.push(e.yellow(this.warn)),c.join(" ")}render(){if(this.closed)return;this.firstRender&&this.out.write(t.hide),super.render();let c=[n.symbol(this.done,this.aborted),e.bold(this.msg),n.delimiter(false),this.renderDoneOrInstructions()].join(" ");this.showMinError&&(c+=e.red(`You must select a minimum of ${this.minSelected} choices.`),this.showMinError=false),c+=this.renderOptions(this.filteredOptions),this.out.write(this.clear+c),this.clear=s(c,this.out.columns);}}return Ds=o,Ds}var Ls,Zo;function Wp(){if(Zo)return Ls;Zo=1;let e=se(),t=ke(),{style:r,clear:s}=ce(),{erase:n,cursor:i}=ne();class o extends t{constructor(c={}){super(c),this.msg=c.message,this.value=c.initial,this.initialValue=!!c.initial,this.yesMsg=c.yes||"yes",this.yesOption=c.yesOption||"(Y/n)",this.noMsg=c.no||"no",this.noOption=c.noOption||"(y/N)",this.render();}reset(){this.value=this.initialValue,this.fire(),this.render();}exit(){this.abort();}abort(){this.done=this.aborted=true,this.fire(),this.render(),this.out.write(`
92
92
  `),this.close();}submit(){this.value=this.value||false,this.done=true,this.aborted=false,this.fire(),this.render(),this.out.write(`
93
93
  `),this.close();}_(c,f){return c.toLowerCase()==="y"?(this.value=true,this.submit()):c.toLowerCase()==="n"?(this.value=false,this.submit()):this.bell()}render(){this.closed||(this.firstRender?this.out.write(i.hide):this.out.write(s(this.outputText,this.out.columns)),super.render(),this.outputText=[r.symbol(this.done,this.aborted),e.bold(this.msg),r.delimiter(this.done),this.done?this.value?this.yesMsg:this.noMsg:e.gray(this.initialValue?this.yesOption:this.noOption)].join(" "),this.out.write(n.line+i.to(0)+this.outputText));}}return Ls=o,Ls}var Hs,Xo;function zp(){return Xo||(Xo=1,Hs={TextPrompt:kp(),SelectPrompt:Tp(),TogglePrompt:$p(),DatePrompt:Lp(),NumberPrompt:Hp(),MultiselectPrompt:ma(),AutocompletePrompt:Gp(),AutocompleteMultiselectPrompt:Vp(),ConfirmPrompt:Wp()}),Hs}var Qo;function Up(){return Qo||(Qo=1,(function(e){let t=e,r=zp(),s=o=>o;function n(o,a,c={}){return new Promise((f,l)=>{let u=new r[o](a),d=c.onAbort||s,p=c.onSubmit||s,h=c.onExit||s;u.on("state",a.onState||s),u.on("submit",m=>f(p(m))),u.on("exit",m=>f(h(m))),u.on("abort",m=>l(d(m)));})}t.text=o=>n("TextPrompt",o),t.password=o=>(o.style="password",t.text(o)),t.invisible=o=>(o.style="invisible",t.text(o)),t.number=o=>n("NumberPrompt",o),t.date=o=>n("DatePrompt",o),t.confirm=o=>n("ConfirmPrompt",o),t.list=o=>{let a=o.separator||",";return n("TextPrompt",o,{onSubmit:c=>c.split(a).map(f=>f.trim())})},t.toggle=o=>n("TogglePrompt",o),t.select=o=>n("SelectPrompt",o),t.multiselect=o=>{o.choices=[].concat(o.choices||[]);let a=c=>c.filter(f=>f.selected).map(f=>f.value);return n("MultiselectPrompt",o,{onAbort:a,onSubmit:a})},t.autocompleteMultiselect=o=>{o.choices=[].concat(o.choices||[]);let a=c=>c.filter(f=>f.selected).map(f=>f.value);return n("AutocompleteMultiselectPrompt",o,{onAbort:a,onSubmit:a})};let i=(o,a)=>Promise.resolve(a.filter(c=>c.title.slice(0,o.length).toLowerCase()===o.toLowerCase()));t.autocomplete=o=>(o.suggest=o.suggest||i,o.choices=[].concat(o.choices||[]),n("AutocompletePrompt",o));})(cs)),cs}var Gs,ea;function Kp(){if(ea)return Gs;ea=1;let e=Up(),t=["suggest","format","onState","validate","onRender","type"],r=()=>{};async function s(a=[],{onSubmit:c=r,onCancel:f=r}={}){let l={},u=s._override||{};a=[].concat(a);let d,p,h,m,g,x,y=async(w,b,v=false)=>{if(!(!v&&w.validate&&w.validate(b)!==true))return w.format?await w.format(b,l):b};for(p of a)if({name:m,type:g}=p,typeof g=="function"&&(g=await g(d,{...l},p),p.type=g),!!g){for(let w in p){if(t.includes(w))continue;let b=p[w];p[w]=typeof b=="function"?await b(d,{...l},x):b;}if(x=p,typeof p.message!="string")throw new Error("prompt message is required");if({name:m,type:g}=p,e[g]===void 0)throw new Error(`prompt type (${g}) is not defined`);if(u[p.name]!==void 0&&(d=await y(p,u[p.name]),d!==void 0)){l[m]=d;continue}try{d=s._injected?n(s._injected,p.initial):await e[g](p),l[m]=d=await y(p,d,!0),h=await c(p,d,l);}catch{h=!await f(p,l);}if(h)return l}return l}function n(a,c){let f=a.shift();if(f instanceof Error)throw f;return f===void 0?c:f}function i(a){s._injected=(s._injected||[]).concat(a);}function o(a){s._override=Object.assign({},a);}return Gs=Object.assign(s,{prompt:s,prompts:e,inject:i,override:o}),Gs}var Vs,ta;function Bp(){return ta||(ta=1,Vs=Kp()),Vs}var qp=Bp(),Jp=qs(qp),Ys=globalThis.window?.document!==void 0;globalThis.process?.versions?.node;globalThis.process?.versions?.bun;globalThis.Deno?.version?.deno;globalThis.process?.versions?.electron;globalThis.navigator?.userAgent?.includes("jsdom");typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;typeof DedicatedWorkerGlobalScope<"u"&&globalThis instanceof DedicatedWorkerGlobalScope;typeof SharedWorkerGlobalScope<"u"&&globalThis instanceof SharedWorkerGlobalScope;typeof ServiceWorkerGlobalScope<"u"&&globalThis instanceof ServiceWorkerGlobalScope;var xr=globalThis.navigator?.userAgentData?.platform;xr==="macOS"||globalThis.navigator?.platform==="MacIntel"||globalThis.navigator?.userAgent?.includes(" Mac ")===true||globalThis.process?.platform;xr==="Windows"||globalThis.navigator?.platform==="Win32"||globalThis.process?.platform;xr==="Linux"||globalThis.navigator?.platform?.startsWith("Linux")===true||globalThis.navigator?.userAgent?.includes(" Linux ")===true||globalThis.process?.platform;xr==="Android"||globalThis.navigator?.platform==="Android"||globalThis.navigator?.userAgent?.includes(" Android ")===true||globalThis.process?.platform;var ra="\x1B]",sa="\x07",wr=";";!Ys&&ae.env.TERM_PROGRAM;!Ys&&ae.platform;Ys||ae.cwd;var Yp=(e,t)=>[ra,"8",wr,wr,t,sa,e,ra,"8",wr,wr,sa].join(""),Ws,na;function ga(){return na||(na=1,Ws=(e,t=process.argv)=>{let r=e.startsWith("-")?"":e.length===1?"-":"--",s=t.indexOf(r+e),n=t.indexOf("--");return s!==-1&&(n===-1||s<n)}),Ws}var zs,ia;function Zp(){if(ia)return zs;ia=1;let e=gp,t=yp,r=ga(),{env:s}=process,n;r("no-color")||r("no-colors")||r("color=false")||r("color=never")?n=0:(r("color")||r("colors")||r("color=true")||r("color=always"))&&(n=1),"FORCE_COLOR"in s&&(s.FORCE_COLOR==="true"?n=1:s.FORCE_COLOR==="false"?n=0:n=s.FORCE_COLOR.length===0?1:Math.min(parseInt(s.FORCE_COLOR,10),3));function i(c){return c===0?false:{level:c,hasBasic:true,has256:c>=2,has16m:c>=3}}function o(c,f){if(n===0)return 0;if(r("color=16m")||r("color=full")||r("color=truecolor"))return 3;if(r("color=256"))return 2;if(c&&!f&&n===void 0)return 0;let l=n||0;if(s.TERM==="dumb")return l;if(process.platform==="win32"){let u=e.release().split(".");return Number(u[0])>=10&&Number(u[2])>=10586?Number(u[2])>=14931?3:2:1}if("CI"in s)return ["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(u=>u in s)||s.CI_NAME==="codeship"?1:l;if("TEAMCITY_VERSION"in s)return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(s.TEAMCITY_VERSION)?1:0;if(s.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in s){let u=parseInt((s.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(s.TERM_PROGRAM){case "iTerm.app":return u>=3?3:2;case "Apple_Terminal":return 2}}return /-256(color)?$/i.test(s.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(s.TERM)||"COLORTERM"in s?1:l}function a(c){let f=o(c,c&&c.isTTY);return i(f)}return zs={supportsColor:a,stdout:i(o(true,t.isatty(1))),stderr:i(o(true,t.isatty(2)))},zs}var Us,oa;function Xp(){if(oa)return Us;oa=1;let e=Zp(),t=ga();function r(n){if(/^\d{3,4}$/.test(n)){let o=/(\d{1,2})(\d{2})/.exec(n)||[];return {major:0,minor:parseInt(o[1],10),patch:parseInt(o[2],10)}}let i=(n||"").split(".").map(o=>parseInt(o,10));return {major:i[0],minor:i[1],patch:i[2]}}function s(n){let{CI:i,FORCE_HYPERLINK:o,NETLIFY:a,TEAMCITY_VERSION:c,TERM_PROGRAM:f,TERM_PROGRAM_VERSION:l,VTE_VERSION:u,TERM:d}=process.env;if(o)return !(o.length>0&&parseInt(o,10)===0);if(t("no-hyperlink")||t("no-hyperlinks")||t("hyperlink=false")||t("hyperlink=never"))return false;if(t("hyperlink=true")||t("hyperlink=always")||a)return true;if(!e.supportsColor(n)||n&&!n.isTTY)return false;if("WT_SESSION"in process.env)return true;if(process.platform==="win32"||i||c)return false;if(f){let p=r(l||"");switch(f){case "iTerm.app":return p.major===3?p.minor>=1:p.major>3;case "WezTerm":return p.major>=20200620;case "vscode":return p.major>1||p.major===1&&p.minor>=72;case "ghostty":return true}}if(u){if(u==="0.50.0")return false;let p=r(u);return p.major>0||p.minor>=50}switch(d){case "alacritty":return true}return false}return Us={supportsHyperlink:s,stdout:s(process.stdout),stderr:s(process.stderr)},Us}var Qp=Xp(),Zs=qs(Qp);function Ct(e,t,{target:r="stdout",...s}={}){return Zs[r]?Yp(e,t):s.fallback===false?e:typeof s.fallback=="function"?s.fallback(e,t):`${e} (\u200B${t}\u200B)`}Ct.isSupported=Zs.stdout;Ct.stderr=(e,t,r={})=>Ct(e,t,{target:"stderr",...r});Ct.stderr.isSupported=Zs.stderr;var re={},Le={},aa;function ed(){if(aa)return Le;aa=1,Object.defineProperty(Le,"__esModule",{value:true}),Le.sync=Le.isexe=void 0;let e=pa,t=mo__default,r=async(o,a={})=>{let{ignoreErrors:c=false}=a;try{return n(await(0,t.stat)(o),a)}catch(f){let l=f;if(c||l.code==="EACCES")return false;throw l}};Le.isexe=r;let s=(o,a={})=>{let{ignoreErrors:c=false}=a;try{return n((0,e.statSync)(o),a)}catch(f){let l=f;if(c||l.code==="EACCES")return false;throw l}};Le.sync=s;let n=(o,a)=>o.isFile()&&i(o,a),i=(o,a)=>{let c=a.uid??process.getuid?.(),f=a.groups??process.getgroups?.()??[],l=a.gid??process.getgid?.()??f[0];if(c===void 0||l===void 0)throw new Error("cannot get uid or gid");let u=new Set([l,...f]),d=o.mode,p=o.uid,h=o.gid,m=parseInt("100",8),g=parseInt("010",8),x=parseInt("001",8),y=m|g;return !!(d&x||d&g&&u.has(h)||d&m&&p===c||d&y&&c===0)};return Le}var He={},ca;function td(){if(ca)return He;ca=1,Object.defineProperty(He,"__esModule",{value:true}),He.sync=He.isexe=void 0;let e=pa,t=mo__default,r=async(o,a={})=>{let{ignoreErrors:c=false}=a;try{return i(await(0,t.stat)(o),o,a)}catch(f){let l=f;if(c||l.code==="EACCES")return false;throw l}};He.isexe=r;let s=(o,a={})=>{let{ignoreErrors:c=false}=a;try{return i((0,e.statSync)(o),o,a)}catch(f){let l=f;if(c||l.code==="EACCES")return false;throw l}};He.sync=s;let n=(o,a)=>{let{pathExt:c=process.env.PATHEXT||""}=a,f=c.split(";");if(f.indexOf("")!==-1)return true;for(let l=0;l<f.length;l++){let u=f[l].toLowerCase(),d=o.substring(o.length-u.length).toLowerCase();if(u&&d===u)return true}return false},i=(o,a,c)=>o.isFile()&&n(a,c);return He}var Ks={},la;function rd(){return la||(la=1,Object.defineProperty(Ks,"__esModule",{value:true})),Ks}var ua;function sd(){return ua||(ua=1,(function(e){var t=re&&re.__createBinding||(Object.create?(function(f,l,u,d){d===void 0&&(d=u);var p=Object.getOwnPropertyDescriptor(l,u);(!p||("get"in p?!l.__esModule:p.writable||p.configurable))&&(p={enumerable:true,get:function(){return l[u]}}),Object.defineProperty(f,d,p);}):(function(f,l,u,d){d===void 0&&(d=u),f[d]=l[u];})),r=re&&re.__setModuleDefault||(Object.create?(function(f,l){Object.defineProperty(f,"default",{enumerable:true,value:l});}):function(f,l){f.default=l;}),s=re&&re.__importStar||function(f){if(f&&f.__esModule)return f;var l={};if(f!=null)for(var u in f)u!=="default"&&Object.prototype.hasOwnProperty.call(f,u)&&t(l,f,u);return r(l,f),l},n=re&&re.__exportStar||function(f,l){for(var u in f)u!=="default"&&!Object.prototype.hasOwnProperty.call(l,u)&&t(l,f,u);};Object.defineProperty(e,"__esModule",{value:true}),e.sync=e.isexe=e.posix=e.win32=void 0;let i=s(ed());e.posix=i;let o=s(td());e.win32=o,n(rd(),e);let c=(process.env._ISEXE_TEST_PLATFORM_||process.platform)==="win32"?o:i;e.isexe=c.isexe,e.sync=c.sync;})(re)),re}var Bs,fa;function nd(){if(fa)return Bs;fa=1;let{isexe:e,sync:t}=sd(),{join:r,delimiter:s,sep:n,posix:i}=S__default,o=process.platform==="win32",a=new RegExp(`[${i.sep}${n===i.sep?"":n}]`.replace(/(\\)/g,"\\$1")),c=new RegExp(`^\\.${a.source}`),f=h=>Object.assign(new Error(`not found: ${h}`),{code:"ENOENT"}),l=(h,{path:m=process.env.PATH,pathExt:g=process.env.PATHEXT,delimiter:x=s})=>{let y=h.match(a)?[""]:[...o?[process.cwd()]:[],...(m||"").split(x)];if(o){let w=g||[".EXE",".CMD",".BAT",".COM"].join(x),b=w.split(x).flatMap(v=>[v,v.toLowerCase()]);return h.includes(".")&&b[0]!==""&&b.unshift(""),{pathEnv:y,pathExt:b,pathExtExe:w}}return {pathEnv:y,pathExt:[""]}},u=(h,m)=>{let g=/^".*"$/.test(h)?h.slice(1,-1):h;return (!g&&c.test(m)?m.slice(0,2):"")+r(g,m)},d=async(h,m={})=>{let{pathEnv:g,pathExt:x,pathExtExe:y}=l(h,m),w=[];for(let b of g){let v=u(b,h);for(let R of x){let I=v+R;if(await e(I,{pathExt:y,ignoreErrors:true})){if(!m.all)return I;w.push(I);}}}if(m.all&&w.length)return w;if(m.nothrow)return null;throw f(h)},p=(h,m={})=>{let{pathEnv:g,pathExt:x,pathExtExe:y}=l(h,m),w=[];for(let b of g){let v=u(b,h);for(let R of x){let I=v+R;if(t(I,{pathExt:y,ignoreErrors:true})){if(!m.all)return I;w.push(I);}}}if(m.all&&w.length)return w;if(m.nothrow)return null;throw f(h)};return Bs=d,d.sync=p,Bs}var id=nd(),od=qs(id);join(gp.tmpdir(),"antfu-ni");function ya(e){return od.sync(e,{nothrow:true})!==null}async function Xs({autoInstall:e,programmatic:t,cwd:r}={}){let{name:s,agent:n,version:i}=await is({cwd:r,onUnknown:o=>{t||console.warn("[ni] Unknown packageManager:",o);}})||{};if(s&&!ya(s)&&!t){if(!e){console.warn(`[ni] Detected ${s} but it doesn't seem to be installed.
94
- `),ae.env.CI&&ae.exit(1);let o=Ct(s,po[s]),{tryInstall:a}=await Jp({name:"tryInstall",type:"confirm",message:`Would you like to globally install ${o}?`});a||ae.exit(1);}await os("npm",["i","-g",`${s}${i?`@${i}`:""}`],{nodeOptions:{stdio:"inherit",cwd:r},throwOnError:true});}return n}ae.env.NI_CONFIG_FILE;var cd=ae.platform==="win32"?ae.env.USERPROFILE:ae.env.HOME;S__default.join(cd||"~/",".nirc");async function kt(e,{withFallback:t}={withFallback:false}){let r=await Xs({programmatic:true,cwd:e});return r==="yarn@berry"?"yarn":r==="pnpm@6"?"pnpm":r==="bun"?"bun":r==="deno"?"deno":t?Qs()??"npm":r??"npm"}function Qs(e=process.env.npm_config_user_agent||""){return e.startsWith("yarn")?"yarn":e.startsWith("pnpm")?"pnpm":e.startsWith("bun")?"bun":e.startsWith("deno")?"deno":e.startsWith("npm")?"npm":null}function en(e){return e==="pnpm"?"pnpm dlx":e==="bun"?"bunx":"npx"}async function Iv(e){let t=await kt(e);return en(t)}var wa={name:"shadcn",version:"4.20.0",description:"Add components to your apps.",homepage:"https://ui.shadcn.com",publishConfig:{access:"public"},license:"MIT",author:{name:"shadcn",url:"https://twitter.com/shadcn"},repository:{type:"git",url:"https://github.com/shadcn-ui/ui.git",directory:"packages/shadcn"},files:["dist"],keywords:["components","ui","tailwind","radix-ui","base-ui","shadcn"],type:"module",exports:{".":{types:"./dist/index.d.ts",default:"./dist/index.js"},"./registry":{types:"./dist/registry/index.d.ts",default:"./dist/registry/index.js"},"./schema":{types:"./dist/schema/index.d.ts",default:"./dist/schema/index.js"},"./mcp":{types:"./dist/mcp/index.d.ts",default:"./dist/mcp/index.js"},"./utils":{types:"./dist/utils/index.d.ts",default:"./dist/utils/index.js"},"./icons":{types:"./dist/icons/index.d.ts",default:"./dist/icons/index.js"},"./preset":{types:"./dist/preset/index.d.ts",default:"./dist/preset/index.js"},"./tailwind.css":"./dist/tailwind.css"},sideEffects:["./dist/tailwind.css"],bin:"./dist/index.js",engines:{node:">=20.18.1"},scripts:{dev:"tsup --watch",build:"tsup",typecheck:"tsc --noEmit",clean:"rimraf dist && rimraf components","start:dev":"cross-env REGISTRY_URL=http://localhost:4000/r SHADCN_TEMPLATE_DIR=../../templates node dist/index.js","start:prod":"cross-env REGISTRY_URL=https://ui.shadcn.com/r node dist/index.js",start:"node dist/index.js","format:write":'prettier --write "**/*.{ts,tsx,mdx}" --cache',"format:check":'prettier --check "**/*.{ts,tsx,mdx}" --cache',release:"changeset version","pub:beta":"pnpm build && pnpm publish --no-git-checks --access public --tag beta","pub:rc":"pnpm build && pnpm publish --no-git-checks --access public --tag rc","pub:next":"pnpm build && pnpm publish --no-git-checks --access public --tag next","pub:release":"pnpm build && pnpm publish --access public",test:"vitest run","test:dev":"REGISTRY_URL=http://localhost:4000/r SHADCN_TEMPLATE_DIR=../../templates vitest run","mcp:inspect":"pnpm dlx @modelcontextprotocol/inspector node dist/index.js mcp"},dependencies:{"@babel/core":"^7.28.0","@babel/parser":"^7.28.0","@babel/plugin-transform-typescript":"^7.28.0","@babel/preset-typescript":"^7.27.1","@dotenvx/dotenvx":"^1.48.4","@modelcontextprotocol/sdk":"^1.26.0","@types/validate-npm-package-name":"^4.0.2",browserslist:"^4.26.2",commander:"^14.0.0",cosmiconfig:"^9.0.0",dedent:"^1.6.0",deepmerge:"^4.3.1",diff:"^8.0.2",execa:"^9.6.0","fast-glob":"^3.3.3","fs-extra":"^11.3.1",fuzzysort:"^3.1.0",kleur:"^4.1.5",open:"^11.0.0",ora:"^8.2.0",postcss:"^8.5.6","postcss-selector-parser":"^7.1.0",prompts:"^2.4.2",recast:"^0.23.11",socks:"^2.8.8","stringify-object":"^5.0.0","tailwind-merge":"^3.0.1","ts-morph":"^26.0.0","tsconfig-paths":"^4.2.0",undici:"^7.27.2","validate-npm-package-name":"^7.0.1",zod:"^3.24.1","zod-to-json-schema":"^3.24.6"},devDependencies:{"@antfu/ni":"^25.0.0","@types/babel__core":"^7.20.5","@types/fs-extra":"^11.0.4","@types/prompts":"^2.4.9","@types/stringify-object":"^4.0.5",msw:"^2.10.4",rimraf:"^6.0.1",tsup:"^8.5.0","type-fest":"^4.41.0",typescript:"^5.9.2"}};function br(e){if(E.break(),E.error("Something went wrong. Please check the error below for more details."),E.error("If the problem persists, please open an issue on GitHub."),E.error(""),typeof e=="string"&&(E.error(e),Tt()),e instanceof F&&(e.message&&(E.error(e.cause?"Error:":"Message:"),E.error(e.message)),e.cause&&(E.error(`
94
+ `),ae.env.CI&&ae.exit(1);let o=Ct(s,po[s]),{tryInstall:a}=await Jp({name:"tryInstall",type:"confirm",message:`Would you like to globally install ${o}?`});a||ae.exit(1);}await os("npm",["i","-g",`${s}${i?`@${i}`:""}`],{nodeOptions:{stdio:"inherit",cwd:r},throwOnError:true});}return n}ae.env.NI_CONFIG_FILE;var cd=ae.platform==="win32"?ae.env.USERPROFILE:ae.env.HOME;S__default.join(cd||"~/",".nirc");async function kt(e,{withFallback:t}={withFallback:false}){let r=await Xs({programmatic:true,cwd:e});return r==="yarn@berry"?"yarn":r==="pnpm@6"?"pnpm":r==="bun"?"bun":r==="deno"?"deno":t?Qs()??"npm":r??"npm"}function Qs(e=process.env.npm_config_user_agent||""){return e.startsWith("yarn")?"yarn":e.startsWith("pnpm")?"pnpm":e.startsWith("bun")?"bun":e.startsWith("deno")?"deno":e.startsWith("npm")?"npm":null}function en(e){return e==="pnpm"?"pnpm dlx":e==="bun"?"bunx":"npx"}async function Iv(e){let t=await kt(e);return en(t)}var wa={name:"shadcn",version:"4.21.0",description:"Add components to your apps.",homepage:"https://ui.shadcn.com",publishConfig:{access:"public"},license:"MIT",author:{name:"shadcn",url:"https://twitter.com/shadcn"},repository:{type:"git",url:"https://github.com/shadcn-ui/ui.git",directory:"packages/shadcn"},files:["dist"],keywords:["components","ui","tailwind","radix-ui","base-ui","shadcn"],type:"module",exports:{".":{types:"./dist/index.d.ts",default:"./dist/index.js"},"./registry":{types:"./dist/registry/index.d.ts",default:"./dist/registry/index.js"},"./schema":{types:"./dist/schema/index.d.ts",default:"./dist/schema/index.js"},"./mcp":{types:"./dist/mcp/index.d.ts",default:"./dist/mcp/index.js"},"./utils":{types:"./dist/utils/index.d.ts",default:"./dist/utils/index.js"},"./icons":{types:"./dist/icons/index.d.ts",default:"./dist/icons/index.js"},"./preset":{types:"./dist/preset/index.d.ts",default:"./dist/preset/index.js"},"./tailwind.css":"./dist/tailwind.css"},sideEffects:["./dist/tailwind.css"],bin:"./dist/index.js",engines:{node:">=20.18.1"},scripts:{dev:"tsup --watch",build:"tsup",typecheck:"tsc --noEmit",clean:"rimraf dist && rimraf components","start:dev":"cross-env REGISTRY_URL=http://localhost:4000/r SHADCN_TEMPLATE_DIR=../../templates node dist/index.js","start:prod":"cross-env REGISTRY_URL=https://ui.shadcn.com/r node dist/index.js",start:"node dist/index.js","format:write":'prettier --write "**/*.{ts,tsx,mdx}" --cache',"format:check":'prettier --check "**/*.{ts,tsx,mdx}" --cache',release:"changeset version","pub:beta":"pnpm build && pnpm publish --no-git-checks --access public --tag beta","pub:rc":"pnpm build && pnpm publish --no-git-checks --access public --tag rc","pub:next":"pnpm build && pnpm publish --no-git-checks --access public --tag next","pub:release":"pnpm build && pnpm publish --access public",test:"vitest run","test:dev":"REGISTRY_URL=http://localhost:4000/r SHADCN_TEMPLATE_DIR=../../templates vitest run","mcp:inspect":"pnpm dlx @modelcontextprotocol/inspector node dist/index.js mcp"},dependencies:{"@babel/core":"^7.28.0","@babel/parser":"^7.28.0","@babel/plugin-transform-typescript":"^7.28.0","@babel/preset-typescript":"^7.27.1","@dotenvx/dotenvx":"^1.48.4","@modelcontextprotocol/sdk":"^1.26.0","@types/validate-npm-package-name":"^4.0.2",browserslist:"^4.26.2",cn:"^0.2.4",commander:"^14.0.0",cosmiconfig:"^9.0.0",dedent:"^1.6.0",deepmerge:"^4.3.1",diff:"^8.0.2",execa:"^9.6.0","fast-glob":"^3.3.3","fs-extra":"^11.3.1",fuzzysort:"^3.1.0",kleur:"^4.1.5",open:"^11.0.0",ora:"^8.2.0",postcss:"^8.5.6","postcss-selector-parser":"^7.1.0",prompts:"^2.4.2",recast:"^0.23.11",socks:"^2.8.8","stringify-object":"^5.0.0","ts-morph":"^26.0.0","tsconfig-paths":"^4.2.0",undici:"^7.27.2","validate-npm-package-name":"^7.0.1",zod:"^3.24.1","zod-to-json-schema":"^3.24.6"},devDependencies:{"@antfu/ni":"^25.0.0","@types/babel__core":"^7.20.5","@types/fs-extra":"^11.0.4","@types/prompts":"^2.4.9","@types/stringify-object":"^4.0.5",msw:"^2.10.4",rimraf:"^6.0.1",tsup:"^8.5.0","type-fest":"^4.41.0",typescript:"^5.9.2"}};function br(e){if(E.break(),E.error("Something went wrong. Please check the error below for more details."),E.error("If the problem persists, please open an issue on GitHub."),E.error(""),typeof e=="string"&&(E.error(e),Tt()),e instanceof F&&(e.message&&(E.error(e.cause?"Error:":"Message:"),E.error(e.message)),e.cause&&(E.error(`
95
95
  Message:`),E.error(e.cause)),e.suggestion&&(E.error(`
96
96
  Suggestion:`),E.error(e.suggestion)),Tt()),e instanceof z$1.ZodError){E.error("Validation failed:");for(let[t,r]of Object.entries(e.flatten().fieldErrors))E.error(`- ${P.info(t)}: ${r}`);Tt();}e instanceof Error&&(E.error(e.message),Tt()),Tt();}function fd(e){let t=e.match(/^(\d+)\.(\d+)\.\d+/);if(!t)return null;let r=Number.parseInt(t[1],10),s=Number.parseInt(t[2],10);return s===0?null:`${r}.${s-1}.0`}function pd(e=wa.version,t=process.argv.slice(2)){let r=fd(e);return r?[...en(Qs()).split(" "),`shadcn@${r}`,...t].map(dd).join(" "):null}function Tt(){let e=pd();e&&(E.error(""),E.error("You can also try a previous version to see if that works:"),E.error(e)),E.break(),process.exit(1);}function dd(e){return /^[a-zA-Z0-9_./:@%+=,-]+$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}var Sa=cosmiconfig("registries",{packageProp:"registries",searchPlaces:["package.json"]}),md=z$1.object({registries:b.optional()});function xa(e,t){if(!t)return e;let r=new URL(e);return t.query&&r.searchParams.set("q",t.query),t.types?.length&&r.searchParams.set("type",t.types.join(",")),t.limit!==void 0&&r.searchParams.set("limit",String(t.limit)),t.offset!==void 0&&r.searchParams.set("offset",String(t.offset)),r.toString()}async function rn(e,t){return Se(()=>gd(e,t))}async function gd(e,t){let{config:r,useCache:s,searchParams:n}=t||{};if(L(e)){let l=xa(e,n),[u]=await K([l],{useCache:s});return ba(e,u)}let i=gt(e);if(i)return no(i,{useCache:s});if(!e.startsWith("@"))throw new lt(e);let o=e;o.endsWith("/registry")||(o=`${o}/registry`);let a=Je(o,oe(r));if(!a?.url)throw new _e(o);let c=xa(a.url,n);a.headers&&Object.keys(a.headers).length>0&&yt({[c]:a.headers});let[f]=await K([c],{useCache:s});return ba(o,f)}function ba(e,t){try{let r=q$1.parse(t);if(r.include?.length)throw new $(`Registry catalog "${e}" uses "include", but consumer registry endpoints must serve a resolved registry catalog. Run "npx shadcn build" and serve the built registry.json, or use loadRegistry() in a dynamic route.`,{context:{registry:e,include:r.include},suggestion:"Serve a flattened registry.json for CLI consumers. Source registry.json files with include are supported by shadcn build and loadRegistry()."});return r}catch(r){throw r instanceof $?r:new W(e,r,{subject:"registry catalog",suggestion:"The registry catalog may be corrupted or have an invalid format. Please make sure it returns a valid registry.json object. See https://ui.shadcn.com/schema/registry.json."})}}async function sn(e,t){let{config:r,useCache:s=false}=t||{};return Se(()=>Ee(e,oe(r),{useCache:s}))}async function yd(e,t){let{config:r,useCache:s=false}=t||{};return Se(()=>tt(e,oe(r),{useCache:s}))}async function wd(e,t){let{useCache:r=true}=t||{};r||(Ut.clearCaches(),Sa.clearCaches());let s=await xd(e),n=S__default.resolve(e,"components.json");if(existsSync(n)){let i=await Ut.load(n),o=Ea(e,i?.config,"components.json");return {registries:{...q,...s,...o.registries}}}return {registries:s}}async function xd(e){let t=S__default.resolve(e,"package.json");if(!existsSync(t))return {};let r=await Sa.load(t);return Ea(e,{registries:r?.config},"package.json").registries}function Ea(e,t,r){let s=md.safeParse(t);if(!s.success)throw new ze(e,s.error,r);return {registries:s.data.registries||{}}}async function qt(){let[e]=await K(["index.json"]);return r.parse(e)}async function tR(){try{let[e]=await K(["styles/index.json"]);return s.parse(e)}catch(e){return E.error(`
97
97
  `),br(e),[]}}async function rR(){try{let[e]=await K(["icons/index.json"]);return t.parse(e)}catch(e){return br(e),{}}}async function sR(){return jn}async function lr(e){let[t]=await K([`colors/${e}.json`]);return u.parse(t)}async function bd(e,t){let r=[];for(let s of t){let n=e.find(i=>i.name===s);if(n&&(r.push(n),n.registryDependencies)){let i=await bd(e,n.registryDependencies);r.push(...i);}}return r.filter((s,n,i)=>i.findIndex(o=>o.name===s.name)===n)}async function nR(e,t){try{let r=t.map(n=>`styles/${e}/${n.name}.json`);return (await K(r)).map(n$1=>n.parse(n$1))}catch(r){return br(r),[]}}async function iR(e,t,r){if(r)return r;if(t.type==="registry:ui")return e.resolvedPaths.ui??e.resolvedPaths.components;let[s,n]=t.type?.split(":")??[];return s in e.resolvedPaths?S__default.join(e.resolvedPaths[s],n):null}async function Ia(e){e={useCache:true,...e};let t=`${je}/registries.json`,[r]=await K([t],{useCache:e.useCache});try{return A$1.parse(r)}catch(s){throw s instanceof z$1.ZodError?new ut(s):s}}async function vd(e){let t=await Ia(e);return t?Object.fromEntries(t.map(r=>[r.name,r.url])):null}async function Rd(e){e={useCache:true,...e};let t=`${je}/config.json`,[r]=await K([t],{useCache:e.useCache});return C.parse(r).presets}async function oR(e,t){return (await Rd(t)).find(s=>s.name.toLowerCase()===e.toLowerCase())??null}var Ca={"--font-heading":"cn-font-heading"};function Sd(e){return e.startsWith("--")?e:`--${e}`}function nn(e){let t=new Set;for(let r of e){for(let s of r.fonts??[]){let n=s.font?.variable;if(!n)continue;let i=Ca[n];i&&t.add(i);}for(let s of Object.values(r.cssVars??{}))for(let n of Object.keys(s??{})){let i=Ca[Sd(n)];i&&t.add(i);}}return Array.from(t)}function ka(e,t){if(e.includes("\0"))return false;let r;try{r=e;let d="";for(;r!==d&&r.includes("%");)d=r,r=decodeURIComponent(r);}catch{return false}let s=S__default.normalize(r.replace(/\\/g,"/")),n=S__default.normalize(t),i=d=>d.replace(/\[\.\.\..*?\]/g,"").includes("..");if(i(s)||i(r)||i(e))return false;let o=d=>d.replace(/\[\.\.\..*?\]/g,""),a=o(e),c=o(r);if([/\.\.[\/\\]/,/[\/\\]\.\./,/\.\./,/\.\.%/,/\x00/,/[\x01-\x1f]/].some(d=>d.test(a)||d.test(c))||(e.includes("~")||r.includes("~"))&&(e.includes("../")||r.includes("../")))return false;if(/^[a-zA-Z]:[\/\\]/.test(r))return process.platform==="win32"?r.toLowerCase().startsWith(t.toLowerCase()):false;if(S__default.isAbsolute(s))return s.startsWith(n+S__default.sep);let u=S__default.resolve(n,s);return u.startsWith(n+S__default.sep)||u===n}async function wR(e,t,r){if(!t.resolvedPaths.tailwindCss||!Object.keys(e??{}).length)return;r={cleanupDefaultNextStyles:false,silent:false,tailwindVersion:"v3",overwriteCssVars:false,...r};let s=t.resolvedPaths.tailwindCss,n=S__default.relative(t.resolvedPaths.cwd,s),i=j(`Updating CSS variables in ${P.info(n)}`,{silent:r.silent}).start(),o=await promises.readFile(s,"utf8"),a=await on(o,e??{},t,{cleanupDefaultNextStyles:r.cleanupDefaultNextStyles,tailwindVersion:r.tailwindVersion,tailwindConfig:r.tailwindConfig,overwriteCssVars:r.overwriteCssVars});await promises.writeFile(s,a,"utf8"),i.succeed();}async function on(e,t,r,s={cleanupDefaultNextStyles:false,tailwindVersion:"v3",tailwindConfig:void 0,overwriteCssVars:false}){s={cleanupDefaultNextStyles:false,tailwindVersion:"v3",tailwindConfig:void 0,overwriteCssVars:false,...s};let n=[Cd(t)];s.cleanupDefaultNextStyles&&n.push(Pa()),s.tailwindVersion==="v4"&&(n=[],n.push(Pd({params:"dark (&:is(.dark *))"})),s.cleanupDefaultNextStyles&&n.push(Pa()),n.push(Td(t,{overwriteCssVars:s.overwriteCssVars})),n.push($d(t)),s.tailwindConfig&&(n.push(Ad(s.tailwindConfig)),n.push(jd(s.tailwindConfig)),n.push(Od(s.tailwindConfig))));let o=(await O(n).process(e,{from:void 0})).css;return o=o.replace(/\/\* ---break--- \*\//g,""),s.tailwindVersion==="v4"&&(o=o.replace(/(\n\s*\n)+/g,`
@@ -1,2 +1,2 @@
1
- import {a}from'./chunk-CHWMSXYA.js';import {SyntaxKind,Project,ScriptKind}from'ts-morph';import {promises}from'fs';import {twMerge}from'tailwind-merge';var ot=async({sourceFile:r,config:n})=>{let e=n.iconLibrary;if(!e||!(e in a))return r;let t=e,i=a[t],o=[];for(let a$1 of r.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement)){if(a$1.getTagNameNode()?.getText()!=="IconPlaceholder")continue;let f=a$1.getAttributes().find(g=>g.getKind()!==SyntaxKind.JsxAttribute?false:g.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText()===t);if(!f)continue;let s=f.asKindOrThrow(SyntaxKind.JsxAttribute),l=s.getInitializer()?.getText().replace(/^["']|["']$/g,"");if(!l)continue;o.includes(l)||o.push(l);let u=i.usage.match(/<(\w+)([^>]*)\s*\/>/);s.remove();for(let g of a$1.getAttributes()){if(g.getKind()!==SyntaxKind.JsxAttribute)continue;let x=g.asKindOrThrow(SyntaxKind.JsxAttribute);x.getNameNode().getText()in a&&x.remove();}if(!u){a$1.getTagNameNode()?.replaceWithText(l);continue}let[,b,K]=u;if(b==="ICON"){let g=a$1.getAttributes().filter(x=>x.getKind()!==SyntaxKind.JsxAttribute?true:!(x.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText()in a)).map(x=>x.getText()).join(" ");g.trim()?a$1.replaceWithText(`<${l} ${g} />`):a$1.getTagNameNode()?.replaceWithText(l);}else {let g=new Set(a$1.getAttributes().filter(m=>m.getKind()===SyntaxKind.JsxAttribute).map(m=>m.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText())),A=K.replace(/\{ICON\}/g,`{${l}}`).trim().split(/\s+(?=\w+=)/).filter(m=>m).map(m=>{let E=m.split("=")[0];return E&&!g.has(E)?m:null}).filter(Boolean),y=a$1.getAttributes().filter(m=>m.getKind()!==SyntaxKind.JsxAttribute?true:!(m.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText()in a)).map(m=>m.getText()).join(" "),M=[...A,y].filter(Boolean).join(" ");a$1.replaceWithText(`<${b} ${M} />`);}}for(let a of r.getImportDeclarations()??[])if(a.getModuleSpecifier()?.getText()?.includes("icon-placeholder")){let l=(a.getNamedImports()??[]).find(d=>d.getName()==="IconPlaceholder");l&&l.remove(),a.getNamedImports()?.length===0&&a.remove();}if(o.length>0){let a=i.import.split(`
1
+ import {a}from'./chunk-CHWMSXYA.js';import {SyntaxKind,Project,ScriptKind}from'ts-morph';import {promises}from'fs';import {twMerge}from'cn';var ot=async({sourceFile:r,config:n})=>{let e=n.iconLibrary;if(!e||!(e in a))return r;let t=e,i=a[t],o=[];for(let a$1 of r.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement)){if(a$1.getTagNameNode()?.getText()!=="IconPlaceholder")continue;let f=a$1.getAttributes().find(g=>g.getKind()!==SyntaxKind.JsxAttribute?false:g.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText()===t);if(!f)continue;let s=f.asKindOrThrow(SyntaxKind.JsxAttribute),l=s.getInitializer()?.getText().replace(/^["']|["']$/g,"");if(!l)continue;o.includes(l)||o.push(l);let u=i.usage.match(/<(\w+)([^>]*)\s*\/>/);s.remove();for(let g of a$1.getAttributes()){if(g.getKind()!==SyntaxKind.JsxAttribute)continue;let x=g.asKindOrThrow(SyntaxKind.JsxAttribute);x.getNameNode().getText()in a&&x.remove();}if(!u){a$1.getTagNameNode()?.replaceWithText(l);continue}let[,b,K]=u;if(b==="ICON"){let g=a$1.getAttributes().filter(x=>x.getKind()!==SyntaxKind.JsxAttribute?true:!(x.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText()in a)).map(x=>x.getText()).join(" ");g.trim()?a$1.replaceWithText(`<${l} ${g} />`):a$1.getTagNameNode()?.replaceWithText(l);}else {let g=new Set(a$1.getAttributes().filter(m=>m.getKind()===SyntaxKind.JsxAttribute).map(m=>m.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText())),A=K.replace(/\{ICON\}/g,`{${l}}`).trim().split(/\s+(?=\w+=)/).filter(m=>m).map(m=>{let E=m.split("=")[0];return E&&!g.has(E)?m:null}).filter(Boolean),y=a$1.getAttributes().filter(m=>m.getKind()!==SyntaxKind.JsxAttribute?true:!(m.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText()in a)).map(m=>m.getText()).join(" "),M=[...A,y].filter(Boolean).join(" ");a$1.replaceWithText(`<${b} ${M} />`);}}for(let a of r.getImportDeclarations()??[])if(a.getModuleSpecifier()?.getText()?.includes("icon-placeholder")){let l=(a.getNamedImports()??[]).find(d=>d.getName()==="IconPlaceholder");l&&l.remove(),a.getNamedImports()?.length===0&&a.remove();}if(o.length>0){let a=i.import.split(`
2
2
  `),f=[];for(let s of a){let l=s.match(/import\s+{([^}]+)}\s+from\s+['"]([^'"]+)['"]/);if(!l)continue;let[,d,u]=l,b=d.split(",").map(g=>g.trim()).map(g=>g==="ICON"?o.map(x=>({name:x})):{name:g}).flat(),K=r.addImportDeclaration({moduleSpecifier:u,namedImports:b});f.push(K);}if(!z(r))for(let s of f)s.replaceWithText(s.getText().replace(";",""));}return r};function z(r){return r.getImportDeclarations()?.[0]?.getText().endsWith(";")??false}var ft=async({sourceFile:r,config:n,baseColor:e})=>(n.tailwind?.cssVariables||!e?.inlineColors||r.getDescendantsOfKind(SyntaxKind.StringLiteral).forEach(t=>{let i=t.getLiteralText(),o=J(i,e.inlineColors).trim();o!==i&&t.setLiteralValue(o);}),r);function L(r){if(!r.includes("/")&&!r.includes(":"))return [null,r,null];let n=-1,e=0;for(let s=r.length-1;s>=0;s--){let l=r[s];if(l==="]")e++;else if(l==="[")e--;else if(l===":"&&e===0){n=s;break}}let t=null,i;n===-1?i=r:(t=r.slice(0,n),i=r.slice(n+1));let o=i.lastIndexOf("/");if(o===-1)return [t,i,null];let a=i.slice(0,o),f=i.slice(o+1);return [t,a,f]}var k=["bg-","text-","border-","ring-offset-","ring-"];function J(r,n){r.includes(" border ")&&(r=r.replace(" border "," border border-border "));let e=r.split(" "),t=new Set,i=new Set;for(let o of e){let[a,f,s]=L(o),l=k.find(u=>f?.startsWith(u));if(!l){t.has(o)||t.add(o);continue}let d=f?.replace(l,"");if(d&&d in n.light){t.add([a,`${l}${n.light[d]}`].filter(Boolean).join(":")+(s?`/${s}`:"")),i.add(["dark",a,`${l}${n.dark[d]}`].filter(Boolean).join(":")+(s?`/${s}`:""));continue}t.has(o)||t.add(o);}return [...Array.from(t),...Array.from(i)].join(" ").trim()}var W=[["-ml-","-ms-"],["-mr-","-me-"],["ml-","ms-"],["mr-","me-"],["pl-","ps-"],["pr-","pe-"],["-left-","-start-"],["-right-","-end-"],["left-","start-"],["right-","end-"],["inset-l-","inset-inline-start-"],["inset-r-","inset-inline-end-"],["rounded-tl-","rounded-ss-"],["rounded-tr-","rounded-se-"],["rounded-bl-","rounded-es-"],["rounded-br-","rounded-ee-"],["rounded-l-","rounded-s-"],["rounded-r-","rounded-e-"],["border-l-","border-s-"],["border-r-","border-e-"],["border-l","border-s"],["border-r","border-e"],["text-left","text-start"],["text-right","text-end"],["scroll-ml-","scroll-ms-"],["scroll-mr-","scroll-me-"],["scroll-pl-","scroll-ps-"],["scroll-pr-","scroll-pe-"],["float-left","float-start"],["float-right","float-end"],["clear-left","clear-start"],["clear-right","clear-end"],["origin-top-left","origin-top-start"],["origin-top-right","origin-top-end"],["origin-bottom-left","origin-bottom-start"],["origin-bottom-right","origin-bottom-end"],["origin-left","origin-start"],["origin-right","origin-end"]],B=[["-translate-x-","translate-x-"],["translate-x-","-translate-x-"]],G=[["space-x-","space-x-reverse"],["divide-x-","divide-x-reverse"]],X=[["cursor-w-resize","cursor-e-resize"],["cursor-e-resize","cursor-w-resize"]],F=[["data-[side=inline-start]","slide-in-from-right","slide-in-from-end"],["data-[side=inline-start]","slide-out-to-right","slide-out-to-end"],["data-[side=inline-end]","slide-in-from-left","slide-in-from-start"],["data-[side=inline-end]","slide-out-to-left","slide-out-to-start"]],Q="cn-rtl-flip",$=["ContextMenuContent","ContextMenuSubContent","DropdownMenuSubContent"],P={right:"inline-end",left:"inline-start"},U=["-left-","-right-","left-","right-"],pt=async({sourceFile:r,config:n})=>(n.rtl&&O(r),r);async function xt(r,n){if(!n)return r;let t=new Project({useInMemoryFileSystem:true}).createSourceFile("component.tsx",r,{scriptKind:ScriptKind.TSX,overwrite:true});return O(t),t.getText()}function C(r){return r.replace(/^["']|["']$/g,"")}function h(r){let n=r.getLiteralText();r.setLiteralValue(q(n));}function q(r){return r.split(" ").flatMap(n=>{if(n.startsWith("rtl:")||n.startsWith("ltr:"))return [n];if(n===Q)return ["rtl:rotate-180"];let[e,t,i]=L(n);if(!t)return [n];for(let[s,l]of B)if(t.startsWith(s)){let d=t.replace(s,l),u=e?`rtl:${e}:${d}${i?`/${i}`:""}`:`rtl:${d}${i?`/${i}`:""}`;return [n,u]}for(let[s,l]of G)if(t.startsWith(s)){let d=e?`rtl:${e}:${l}`:`rtl:${l}`;return [n,d]}for(let[s,l]of X)if(t===s){let d=e?`rtl:${e}:${l}`:`rtl:${l}`;return [n,d]}for(let[s,l,d]of F)if(e?.includes(s)&&t.startsWith(l)){let u=t.replace(l,d);return [i?`${e}:${u}/${i}`:`${e}:${u}`]}let o=e?.includes("data-[side=left]")||e?.includes("data-[side=right]"),a=t;for(let[s,l]of W)if(!(o&&U.some(d=>s.startsWith(d)))&&t.startsWith(s)){if(!s.endsWith("-")&&t!==s)continue;a=t.replace(s,l);break}let f;return e?f=i?`${e}:${a}/${i}`:`${e}:${a}`:f=i?`${a}/${i}`:a,[f]}).join(" ")}function O(r){r.getDescendantsOfKind(SyntaxKind.CallExpression).filter(n=>n.getExpression().getText()==="cva").forEach(n=>{let e=n.getArguments()[0];e?.isKind(SyntaxKind.StringLiteral)&&h(e),n.getArguments()[1]?.isKind(SyntaxKind.ObjectLiteralExpression)&&n.getArguments()[1]?.getDescendantsOfKind(SyntaxKind.PropertyAssignment).find(t=>t.getName()==="variants")?.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach(t=>{t.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach(i=>{let o=i.getInitializerIfKind(SyntaxKind.StringLiteral);o&&h(o);});});}),r.getDescendantsOfKind(SyntaxKind.JsxAttribute).forEach(n=>{if(n.getNameNode().getText()==="className"){let e=n.getInitializer();if(e?.isKind(SyntaxKind.StringLiteral)&&h(e),n.getInitializer()?.isKind(SyntaxKind.JsxExpression)){let t=n.getInitializer()?.getDescendantsOfKind(SyntaxKind.CallExpression).find(i=>i.getExpression().getText()==="cn");t&&t.getArguments().forEach(i=>{(i.isKind(SyntaxKind.ConditionalExpression)||i.isKind(SyntaxKind.BinaryExpression))&&i.getChildrenOfKind(SyntaxKind.StringLiteral).forEach(h),i.isKind(SyntaxKind.StringLiteral)&&h(i);});}}n.getNameNode().getText()==="classNames"&&n.getInitializer()?.isKind(SyntaxKind.JsxExpression)&&n.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach(e=>{if(e.getInitializer()?.isKind(SyntaxKind.CallExpression)){let i=e.getInitializerIfKind(SyntaxKind.CallExpression);i&&i.getArguments().forEach(o=>{o.isKind(SyntaxKind.ConditionalExpression)&&o.getChildrenOfKind(SyntaxKind.StringLiteral).forEach(h),o.isKind(SyntaxKind.StringLiteral)&&h(o);});}let t=e.getInitializer();t?.isKind(SyntaxKind.StringLiteral)&&e.getNameNode().getText()!=="variant"&&h(t);});}),r.getDescendantsOfKind(SyntaxKind.CallExpression).filter(n=>n.getExpression().getText()==="mergeProps").forEach(n=>{let e=n.getArguments()[0];if(e?.isKind(SyntaxKind.ObjectLiteralExpression)){let t=e.getProperties().find(i=>i.isKind(SyntaxKind.PropertyAssignment)&&i.getName()==="className");if(t?.isKind(SyntaxKind.PropertyAssignment)){let i=t.getInitializer();i?.isKind(SyntaxKind.CallExpression)&&i.getExpression().getText()==="cn"&&i.getArguments().forEach(o=>{o.isKind(SyntaxKind.StringLiteral)&&h(o),(o.isKind(SyntaxKind.ConditionalExpression)||o.isKind(SyntaxKind.BinaryExpression))&&o.getChildrenOfKind(SyntaxKind.StringLiteral).forEach(h);}),i?.isKind(SyntaxKind.StringLiteral)&&h(i);}}}),[...r.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement),...r.getDescendantsOfKind(SyntaxKind.JsxOpeningElement)].forEach(n=>{let e=n.getTagNameNode().getText();if(!$.includes(e))return;let t=n.getAttributes().find(f=>f.isKind(SyntaxKind.JsxAttribute)&&f.getNameNode().getText()==="side");if(!t?.isKind(SyntaxKind.JsxAttribute))return;let i=t.getInitializer();if(!i?.isKind(SyntaxKind.StringLiteral))return;let o=C(i.getText()??""),a=P[o];a&&i.replaceWithText(`"${a}"`);}),r.getDescendantsOfKind(SyntaxKind.BindingElement).forEach(n=>{if(n.getNameNode().getText()!=="side")return;let i=n.getFirstAncestorByKind(SyntaxKind.FunctionDeclaration)?.getName();if(!i||!$.includes(i))return;let o=n.getInitializer();if(!o?.isKind(SyntaxKind.StringLiteral))return;let a=C(o.getText()??""),f=P[a];f&&o.replaceWithText(`"${f}"`);});}var D=[{marker:"cn-font-heading",utility:"font-heading",supportToken:"--font-heading:"}],w=/\bcn-font-heading\b/,v=new Map;async function Y(r,n=[]){let e=new Set(n);if(!r)return e;let t=v.get(r);return t||(t=promises.readFile(r,"utf8").then(i=>{let o=new Set;for(let a of D)i.includes(a.supportToken)&&o.add(a.marker);return o}).catch(()=>new Set),v.set(r,t)),(await t).forEach(i=>{e.add(i);}),e}function R(r,n){let e=r;for(let t of D)e.includes(t.marker)&&(e=e.replace(new RegExp(`\\b${t.marker}\\b`,"g"),n.has(t.marker)?t.utility:""));return e.replace(/\s+/g," ").trim()}function N(r,n){let e=r.getLiteralValue();if(!w.test(e))return;let t=R(e,n);t!==e&&r.setLiteralValue(t);}function I(r,n){for(let e of r.getDescendantsOfKind(SyntaxKind.StringLiteral))N(e,n);for(let e of r.getDescendantsOfKind(SyntaxKind.NoSubstitutionTemplateLiteral))N(e,n);}var At=async({sourceFile:r,config:n,supportedFontMarkers:e})=>{let t=await Y(n.resolvedPaths.tailwindCss,e),i=[];for(let o of r.getDescendantsOfKind(SyntaxKind.JsxAttribute)){let a=o.getNameNode().getText();if(a!=="className"&&a!=="classNames")continue;let f=o.getInitializer();if(f?.isKind(SyntaxKind.StringLiteral)){let s=f.getLiteralValue();if(w.test(s)){let l=R(s,t);l===""?i.push(o):l!==s&&f.setLiteralValue(l);}}f?.isKind(SyntaxKind.JsxExpression)&&I(f,t);}for(let o of i)o.remove();for(let o of r.getDescendantsOfKind(SyntaxKind.CallExpression)){if(o.getExpression().getText()==="cva"){for(let a of o.getArguments()){if(a.isKind(SyntaxKind.StringLiteral)){N(a,t);continue}if(a.isKind(SyntaxKind.NoSubstitutionTemplateLiteral)){N(a,t);continue}I(a,t);}continue}o.getExpression().getText()==="mergeProps"&&I(o,t);}return r};var et="animate-none! relative bg-popover/70 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground!",yt=async({sourceFile:r,config:n})=>{let e=n.menuColor,t=e==="default-translucent"||e==="inverted-translucent";for(let i of r.getDescendantsOfKind(SyntaxKind.JsxAttribute)){if(i.getNameNode().getText()!=="className")continue;let a=i.getInitializer();if(!a)continue;let f=a.getText();if(!f.includes("cn-menu-target")&&!f.includes("cn-menu-translucent"))continue;let s=f,l=false;e==="inverted"||e==="inverted-translucent"?s=s.replace(/cn-menu-target/g,"dark"):(s=s.replace(/cn-menu-target/g,""),l=true),t?s=s.replace(/"([^"]*cn-menu-translucent[^"]*)"/g,(d,u)=>`"${twMerge(u,et).replace(/\s*\bcn-menu-translucent\b\s*/g," ").trim()}"`):s.includes("cn-menu-translucent")&&(s=s.replace(/cn-menu-translucent/g,""),l=true),l&&(s=s.replace(/\s{2,}/g," "),s=s.replace(/"\s+/g,'"'),s=s.replace(/\s+"/g,'"'),s=s.replace(/,\s*""\s*,/g,","),s=s.replace(/\(\s*""\s*,/g,"("),s=s.replace(/,\s*""\s*\)/g,")")),i.setInitializer(s);}return r};export{ft as a,L as b,ot as c,pt as d,xt as e,At as f,yt as g};
@@ -1,4 +1,4 @@
1
- import {$a,R as R$1,Za,_a,ma,m as m$1,ia,oa,ab}from'./chunk-CE53DPEU.js';import {Server}from'@modelcontextprotocol/sdk/server/index.js';import {ListToolsRequestSchema,CallToolRequestSchema}from'@modelcontextprotocol/sdk/types.js';import m from'dedent';import {z}from'zod';import {zodToJsonSchema}from'zod-to-json-schema';var A="shadcn@latest";async function u(n){return `${await ia(process.cwd())} ${A} ${n}`}async function l(n=process.cwd()){return {registries:(await oa(n,{useCache:false})).registries}}function _(n,t){let{query:r,registries:i}=t||{},o=n.items.map(c=>{let g=[`- ${c.name}`];return c.type&&g.push(`(${c.type})`),c.description&&g.push(`- ${c.description}`),c.registry&&g.push(`[${c.registry}]`),g.push(`
1
+ import {$a,R as R$1,Za,_a,ma,m as m$1,ia,oa,ab}from'./chunk-B2MD6U5O.js';import {Server}from'@modelcontextprotocol/sdk/server/index.js';import {ListToolsRequestSchema,CallToolRequestSchema}from'@modelcontextprotocol/sdk/types.js';import m from'dedent';import {z}from'zod';import {zodToJsonSchema}from'zod-to-json-schema';var A="shadcn@latest";async function u(n){return `${await ia(process.cwd())} ${A} ${n}`}async function l(n=process.cwd()){return {registries:(await oa(n,{useCache:false})).registries}}function _(n,t){let{query:r,registries:i}=t||{},o=n.items.map(c=>{let g=[`- ${c.name}`];return c.type&&g.push(`(${c.type})`),c.description&&g.push(`- ${c.description}`),c.registry&&g.push(`[${c.registry}]`),g.push(`
2
2
  Add command: \`${u(`add ${c.addCommandArgument}`)}\``),g.join(" ")}),a=`Found ${n.pagination.total} items`;r&&(a+=` matching "${r}"`),i&&i.length>0&&(a+=` in registries ${i.join(", ")}`),a+=":";let s=`Showing items ${n.pagination.offset+1}-${Math.min(n.pagination.offset+n.pagination.limit,n.pagination.total)} of ${n.pagination.total}:`,p=`${a}
3
3
 
4
4
  ${s}
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
- import {b as b$2,c as c$4,a as a$5}from'./chunk-3W6BGJGE.js';import {a as a$3}from'./chunk-6NXUDK4F.js';import {g,f,O,h,Ca as Ca$1,i,j as j$1,Fa as Fa$1,a as a$1,$,Sa,ka as ka$1,S,Da as Da$1,Y,Z as Z$1,D as D$1,c as c$1,_,X as X$1,Ra as Ra$1,ra,ta as ta$1,V,W,T,Ea,aa,d,ma as ma$1,P,qa,e,Va as Va$1,Wa as Wa$1,Xa,wa as wa$1,ua,Ga as Ga$1,xa as xa$1,I,E,F,H,G,A,ha,Ma as Ma$1,ya as ya$1,ea,Q,ab,$a,ba,Za as Za$1,ca as ca$1,_a as _a$1,bb,ga,Ha as Ha$1,Qa as Qa$1,da,pa as pa$1,za as za$1,Pa as Pa$1,Na as Na$1,Oa as Oa$1,sa as sa$1,b as b$1,ja as ja$1,Ka as Ka$1,z as z$1,fa as fa$1,r as r$1,U as U$1,M,K,L,C,J,N as N$1,B,Ia as Ia$1,La as La$1,k as k$1,Ja as Ja$1}from'./chunk-CE53DPEU.js';export{wa as fetchTree,xa as getItemTargetPath,pa as getPackageJsonRegistries,Ba as getPreset,Aa as getPresets,ya as getRegistries,oa as getRegistriesConfig,za as getRegistriesIndex,la as getRegistry,ua as getRegistryBaseColor,ta as getRegistryBaseColors,sa as getRegistryIcons,ma as getRegistryItems,ra as getRegistryStyles,qa as getShadcnRegistryIndex,na as resolveRegistryItems,va as resolveTree}from'./chunk-CE53DPEU.js';import {a,t,b,s,c as c$2,e as e$1,i as i$1,m,n,j as j$2,k,f as f$2,r,h as h$1}from'./chunk-2XFBGS5K.js';import {c,f as f$3,n as n$1}from'./chunk-4WBGNKSZ.js';import {a as a$2,c as c$3,g as g$1,d as d$1,f as f$1,e as e$2}from'./chunk-7SBJAAAY.js';import {a as a$4}from'./chunk-CHWMSXYA.js';import*as N from'path';import N__default from'path';import {promises,existsSync}from'fs';import D from'fs-extra';import ia from'open';import ge from'prompts';import Rn from'dedent';import aa$1,{tmpdir}from'os';import {execa}from'execa';import vn from'deepmerge';import {Command}from'commander';import Br,{z}from'zod';import {Project,ScriptKind,SyntaxKind,Node}from'ts-morph';import {loadConfig}from'tsconfig-paths';import {diffLines,structuredPatch,diffWords}from'diff';import {dim,yellow,bold,green,cyan,red}from'kleur/colors';import*as $e from'fs/promises';import $e__default from'fs/promises';import Vc from'postcss';import {StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import Qr from'fast-glob';import {randomBytes}from'crypto';async function Cn(e){let t={};if(!D.existsSync(e.cwd)||!D.existsSync(N__default.resolve(e.cwd,"package.json")))return t["1"]=true,{errors:t,projectInfo:null};let r=D$1("Preflight checks.",{silent:e.silent}).start();D.existsSync(N__default.resolve(e.cwd,"components.json"))&&!e.force&&(r?.fail(),g.break(),g.error(`A ${f.info("components.json")} file already exists at ${f.info(e.cwd)}.
2
+ import {b as b$2,c as c$4,a as a$5}from'./chunk-3W6BGJGE.js';import {a as a$3}from'./chunk-TWAHNSYO.js';import {g,f,O,h,Ca as Ca$1,i,j as j$1,Fa as Fa$1,a as a$1,$,Sa,ka as ka$1,S,Da as Da$1,Y,Z as Z$1,D as D$1,c as c$1,_,X as X$1,Ra as Ra$1,ra,ta as ta$1,V,W,T,Ea,aa,d,ma as ma$1,P,qa,e,Va as Va$1,Wa as Wa$1,Xa,wa as wa$1,ua,Ga as Ga$1,xa as xa$1,I,E,F,H,G,A,ha,Ma as Ma$1,ya as ya$1,ea,Q,ab,$a,ba,Za as Za$1,ca as ca$1,_a as _a$1,bb,ga,Ha as Ha$1,Qa as Qa$1,da,pa as pa$1,za as za$1,Pa as Pa$1,Na as Na$1,Oa as Oa$1,sa as sa$1,b as b$1,ja as ja$1,Ka as Ka$1,z as z$1,fa as fa$1,r as r$1,U as U$1,M,K,L,C,J,N as N$1,B,Ia as Ia$1,La as La$1,k as k$1,Ja as Ja$1}from'./chunk-B2MD6U5O.js';export{wa as fetchTree,xa as getItemTargetPath,pa as getPackageJsonRegistries,Ba as getPreset,Aa as getPresets,ya as getRegistries,oa as getRegistriesConfig,za as getRegistriesIndex,la as getRegistry,ua as getRegistryBaseColor,ta as getRegistryBaseColors,sa as getRegistryIcons,ma as getRegistryItems,ra as getRegistryStyles,qa as getShadcnRegistryIndex,na as resolveRegistryItems,va as resolveTree}from'./chunk-B2MD6U5O.js';import {a,t,b,s,c as c$2,e as e$1,i as i$1,m,n,j as j$2,k,f as f$2,r,h as h$1}from'./chunk-2XFBGS5K.js';import {c,f as f$3,n as n$1}from'./chunk-4WBGNKSZ.js';import {a as a$2,c as c$3,g as g$1,d as d$1,f as f$1,e as e$2}from'./chunk-G5AI2VJ6.js';import {a as a$4}from'./chunk-CHWMSXYA.js';import*as N from'path';import N__default from'path';import {promises,existsSync}from'fs';import D from'fs-extra';import ia from'open';import ge from'prompts';import Rn from'dedent';import aa$1,{tmpdir}from'os';import {execa}from'execa';import vn from'deepmerge';import {Command}from'commander';import Br,{z}from'zod';import {Project,ScriptKind,SyntaxKind,Node}from'ts-morph';import {loadConfig}from'tsconfig-paths';import {diffLines,structuredPatch,diffWords}from'diff';import {dim,yellow,bold,green,cyan,red}from'kleur/colors';import*as $e from'fs/promises';import $e__default from'fs/promises';import Vc from'postcss';import {StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import Qr from'fast-glob';import {randomBytes}from'crypto';async function Cn(e){let t={};if(!D.existsSync(e.cwd)||!D.existsSync(N__default.resolve(e.cwd,"package.json")))return t["1"]=true,{errors:t,projectInfo:null};let r=D$1("Preflight checks.",{silent:e.silent}).start();D.existsSync(N__default.resolve(e.cwd,"components.json"))&&!e.force&&(r?.fail(),g.break(),g.error(`A ${f.info("components.json")} file already exists at ${f.info(e.cwd)}.
3
3
  To start over, remove the ${f.info("components.json")} file and run ${f.info("init")} again.`),g.break(),process.exit(1)),r?.succeed();let o=D$1("Verifying framework.",{silent:e.silent}).start(),n=e.existingConfig?.tailwind,i$1=await Ca$1(e.cwd,{configCssFile:typeof n?.css=="string"?n.css:void 0});if(!i$1||i$1?.framework.name==="manual"){if(t["7"]=true,o?.fail(),!e.monorepo&&await h(e.cwd)){let m=await i(e.cwd);m.length>0&&(j$1("init",m),process.exit(1));}g.break(),i$1?.framework.links.installation&&g.error(`We could not detect a supported framework at ${f.info(e.cwd)}.
4
4
  Visit ${f.info(i$1?.framework.links.installation)} to manually configure your project.
5
- Once configured, you can use the cli to add components.`),g.break(),process.exit(1);}o?.succeed(`Verifying framework. Found ${f.info(i$1.framework.label)}.`);let s="Validating Tailwind CSS.";i$1.tailwindVersion==="v4"&&(s=`Validating Tailwind CSS. Found ${f.info("v4")}.`);let c=D$1(s,{silent:e.silent}).start();i$1.tailwindVersion==="v3"&&(!i$1?.tailwindConfigFile||!i$1?.tailwindCssFile)?(t["5"]=true,c?.fail()):i$1.tailwindVersion==="v4"&&!i$1?.tailwindCssFile?(t["5"]=true,c?.fail()):i$1.tailwindVersion?c?.succeed():(t["5"]=true,c?.fail());let l=D$1("Validating import alias.",{silent:e.silent}).start();return i$1?.aliasPrefix?l?.succeed():(t["6"]=true,l?.fail()),Object.keys(t).length>0&&(t["5"]&&(g.break(),g.error(`No Tailwind CSS configuration found at ${f.info(e.cwd)}.`),g.error("It is likely you do not have Tailwind CSS installed or have an invalid configuration."),g.error("Install Tailwind CSS then try again."),i$1?.framework.links.tailwind&&g.error(`Visit ${f.info(i$1?.framework.links.tailwind)} to get started.`)),t["6"]&&(g.break(),g.error(`Could not find valid path aliases or package imports for ${f.info("init")}.`),g.error(`Configure path aliases in ${f.info("tsconfig.json")} or imports in ${f.info("package.json")}, then run ${f.info("init")} again.`),g.error(`Learn more at ${f.info(`${a$1}/docs/installation/manual#configure-import-aliases`)}.`)),g.break(),process.exit(1)),{errors:t,projectInfo:i$1}}async function xn(e,t){let r=new Set,o=new Set,n=[...e];for(;n.length>0;){let i=n.shift();if(o.has(i))continue;o.add(i);let{registry:s}=z$1(i);s&&!c$1[s]&&r.add(s);try{let[c]=await fa$1([i],t,{useCache:!0});if(c?.registryDependencies)for(let l of c.registryDependencies){let{registry:m}=z$1(l);m&&!c$1[m]&&r.add(m),o.has(l)||n.push(l);}}catch(c){if(c instanceof r$1){let{registry:l}=z$1(i);l&&!c$1[l]&&r.add(l);continue}continue}}return Array.from(r)}async function U(e,t,r={}){r={silent:false,writeFile:true,...r};let n=(await xn(e,t)).filter(g=>!t.registries?.[g]&&!Object.keys(c$1).includes(g));if(n.length===0)return {config:t,newRegistries:[],discoveredRegistries:{},packageJsonRegistries:{}};let i=await pa$1(t.resolvedPaths.cwd),s={},c=[];for(let g of n)i[g]?s[g]=i[g]:c.push(g);let l={};if(c.length>0){let g=await za$1({useCache:process.env.NODE_ENV!=="development"});if(g)for(let u of c)g[u]&&(l[u]=g[u]);}let m={...s,...l};if(Object.keys(m).length===0)return {config:t,newRegistries:[],discoveredRegistries:{},packageJsonRegistries:{}};let p=Object.fromEntries(Object.entries(t.registries||{}).filter(([g])=>!Object.keys(c$1).includes(g))),f={...t,registries:{...p,...m}};if(r.writeFile&&Object.keys(l).length>0){let g=N__default.resolve(t.resolvedPaths.cwd,"components.json");if(D.existsSync(g)){let u=D$1("Updating components.json.",{silent:r.silent}).start(),h=await D.readJson(g),y={...h,registries:{...h.registries,...l}};await D.writeFile(g,JSON.stringify(y,null,2)+`
5
+ Once configured, you can use the cli to add components.`),g.break(),process.exit(1);}o?.succeed(`Verifying framework. Found ${f.info(i$1.framework.label)}.`);let s="Validating Tailwind CSS.";i$1.tailwindVersion==="v4"&&(s=`Validating Tailwind CSS. Found ${f.info("v4")}.`);let c=D$1(s,{silent:e.silent}).start();i$1.tailwindVersion==="v3"&&(!i$1?.tailwindConfigFile||!i$1?.tailwindCssFile)?(t["5"]=true,c?.fail()):i$1.tailwindVersion==="v4"&&!i$1?.tailwindCssFile?(t["5"]=true,c?.fail()):i$1.tailwindVersion?c?.succeed():(t["5"]=true,c?.fail());let l=D$1("Validating import alias.",{silent:e.silent}).start();return i$1?.aliasPrefix?l?.succeed():(t["6"]=true,l?.fail()),Object.keys(t).length>0&&(t["5"]&&(g.break(),g.error(`No Tailwind CSS configuration found at ${f.info(e.cwd)}.`),g.error("It is likely you do not have Tailwind CSS installed or have an invalid configuration."),g.error("Install Tailwind CSS then try again."),i$1?.framework.links.tailwind&&g.error(`Visit ${f.info(i$1?.framework.links.tailwind)} to get started.`)),t["6"]&&(g.break(),g.error(`Could not find valid path aliases or package imports for ${f.info("init")}.`),g.error(`Configure path aliases in ${f.info("tsconfig.json")} or imports in ${f.info("package.json")}, then run ${f.info("init")} again.`),g.error(`Learn more at ${f.info(`${a$1}/docs/installation/manual#configure-import-aliases`)}.`)),g.break(),process.exit(1)),{errors:t,projectInfo:i$1}}async function xn(e,t){let r=new Set,o=new Set,n=[...e];for(;n.length>0;){let i=n.shift();if(o.has(i))continue;o.add(i);let{registry:s}=z$1(i);s&&!c$1[s]&&r.add(s);try{let[c]=await fa$1([i],t,{useCache:!0});if(c?.registryDependencies)for(let l of c.registryDependencies){let{registry:m}=z$1(l);m&&!c$1[m]&&r.add(m),o.has(l)||n.push(l);}}catch(c){if(c instanceof r$1){let{registry:l}=z$1(i);l&&!c$1[l]&&r.add(l);continue}continue}}return Array.from(r)}async function U(e,t,r={}){r={silent:false,writeFile:true,...r};let n=(await xn(e,t)).filter(g=>!t.registries?.[g]&&!Object.keys(c$1).includes(g));if(n.length===0)return {config:t,newRegistries:[],discoveredRegistries:{},packageJsonRegistries:{}};let i=await pa$1(t.resolvedPaths.cwd),s={},c=[];for(let g of n)i[g]?s[g]=i[g]:c.push(g);let l={};if(c.length>0){let g=await za$1({useCache:process.env.NODE_ENV!=="development"});if(g)for(let u of c)g[u]&&(l[u]=g[u]);}let m={...s,...l};if(Object.keys(m).length===0)return {config:t,newRegistries:[],discoveredRegistries:{},packageJsonRegistries:{}};let d=Object.fromEntries(Object.entries(t.registries||{}).filter(([g])=>!Object.keys(c$1).includes(g))),f={...t,registries:{...d,...m}};if(r.writeFile&&Object.keys(l).length>0){let g=N__default.resolve(t.resolvedPaths.cwd,"components.json");if(D.existsSync(g)){let u=D$1("Updating components.json.",{silent:r.silent}).start(),h=await D.readJson(g),y={...h,registries:{...h.registries,...l}};await D.writeFile(g,JSON.stringify(y,null,2)+`
6
6
  `,"utf-8"),u.succeed();}}return {config:f,newRegistries:Object.keys(m),discoveredRegistries:l,packageJsonRegistries:s}}var q={nova:{title:"Nova",description:"Lucide / Geist",style:"nova",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"lucide",font:"geist",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},vega:{title:"Vega",description:"Lucide / Inter",style:"vega",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"lucide",font:"inter",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},maia:{title:"Maia",description:"Hugeicons / Figtree",style:"maia",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"hugeicons",font:"figtree",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},lyra:{title:"Lyra",description:"Phosphor / JetBrains Mono",style:"lyra",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"phosphor",font:"jetbrains-mono",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},mira:{title:"Mira",description:"Hugeicons / Inter",style:"mira",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"hugeicons",font:"inter",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},luma:{title:"Luma",description:"Lucide / Inter",style:"luma",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"lucide",font:"inter",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},sera:{title:"Sera",description:"Lucide / Noto Sans + Playfair Display",style:"sera",baseColor:"taupe",theme:"taupe",chartColor:"taupe",iconLibrary:"lucide",font:"noto-sans",fontHeading:"playfair-display",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},rhea:{title:"Rhea",description:"Lucide / Inter",style:"rhea",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"lucide",font:"inter",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false}};function xr(e){let t=new URL(`${a$1}/create`),{rtl:r,pointer:o,...n}=e??{};for(let[i,s]of Object.entries(n))s!==void 0&&t.searchParams.set(i,String(s));return r&&t.searchParams.set("rtl","true"),o&&t.searchParams.set("pointer","true"),t.toString()}async function br(e){if(g.break(),g.log(` Build your custom preset on ${f.info(e.createUrl)}`),g.log(` ${e.followUp}`),g.break(),e.prompt===false)return;let{proceed:t}=await ge({type:"confirm",name:"proceed",message:"Open in browser?",initial:true});t&&await ia(e.createUrl);}function pe(e,t){let r=new URLSearchParams({base:e.base,style:e.style,baseColor:e.baseColor,theme:e.theme,iconLibrary:e.iconLibrary,font:e.font,rtl:String(e.rtl??false),menuAccent:e.menuAccent,menuColor:e.menuColor,radius:e.radius});return e.chartColor&&e.chartColor!=="neutral"&&r.set("chartColor",e.chartColor),e.fontHeading&&e.fontHeading!=="inherit"&&r.set("fontHeading",e.fontHeading),t?.preset&&r.set("preset",t.preset),t?.template&&r.set("template",t.template),t?.only&&r.set("only",t.only),t?.pointer&&r.set("pointer","true"),r.set("track","1"),`${a$1}/init?${r.toString()}`}async function Be(){let{base:e}=await ge({type:"select",name:"base",message:`Select a ${f.info("component library")}`,choices:[{title:"Base UI (Recommended)",value:"base"},{title:"React Aria",value:"aria"},{title:"Radix UI",value:"radix"}]});return e||process.exit(1),e}async function tt(e){let t=Object.entries(q),{selectedPreset:r}=await ge({type:"select",name:"selectedPreset",message:`Which ${f.info("preset")} would you like to use?`,choices:[...t.map(([n,i])=>({title:i.title,description:i.description,value:n})),{title:"Custom",description:`Build your own at ${f.info(`${a$1}/create`)}`,value:"custom"}]});if(r||process.exit(1),r==="custom"){let n=xr({command:"init",rtl:e.rtl,pointer:e.pointer,base:e.base,...e.template&&{template:e.template}});await br({createUrl:n,followUp:`Then ${f.info("copy and run the command")} from ui.shadcn.com.`}),process.exit(0);}let o=q[r];return o||process.exit(1),{url:pe({...o,base:e.base,rtl:e.rtl},{template:e.template,pointer:e.pointer}),base:e.base}}async function Se(e,t,r){let o=ba(aa({resolvedPaths:{cwd:t},...r?.registries&&{registries:r.registries}})),{config:n}=await U([e],o,{silent:true,writeFile:false});o=n,da(e,o);let[i]=await ma$1([e],{config:o,useCache:true}),s=i?.type==="registry:base"&&i.config?i.config:void 0,c=e;if(sa(e)){let l=new URL(e);l.searchParams.delete("track"),c=l.toString();}return {registryBaseConfig:s,installStyleIndex:i?.extends!=="none",url:c}}function sa(e){try{return new URL(e).pathname==="/init"&&e.startsWith(a$1)}catch{return false}}var ca=process.env.SHADCN_GITHUB_URL??"https://github.com/shadcn-ui/ui.git";function X(e){return {...e,frameworks:e.frameworks??[],scaffold:e.scaffold??Sn({title:e.title,templateDir:e.templateDir}),postInit:e.postInit??pa}}function Re(e,{monorepo:t}){if(!t||!e.monorepo)return e;let r=e.monorepo,o={...e,templateDir:r.templateDir,defaultProjectName:r.defaultProjectName??r.templateDir,init:r.init??e.init,files:r.files??e.files};return o.scaffold=Sn({title:e.title,templateDir:r.templateDir}),o}function la(e){switch(e){case "pnpm":return ["--no-frozen-lockfile"];case "yarn":return ["--no-immutable"];default:return []}}async function ma(e,t){if(t==="pnpm")return;let r=N__default.join(e,"pnpm-workspace.yaml"),o=N__default.join(e,"package.json"),n=N__default.join(e,"pnpm-lock.yaml");D.existsSync(n)&&await D.remove(n);let i=D.existsSync(r),s=i?k$1(await D.readFile(r,"utf8")):[],c=s.length>0;if(D.existsSync(o)){let l=await D.readFile(o,"utf8"),m=JSON.parse(l);c?m.packageManager=await fa(t):delete m.packageManager,c&&(m.workspaces=s),await D.writeFile(o,JSON.stringify(m,null,2)+`
7
- `);}i&&await D.remove(r),c&&t==="npm"&&await bn(e);}async function fa(e){try{let{stdout:t}=await execa(e,["--version"]);return `${e}@${t.trim()}`}catch{return `${e}@*`}}async function bn(e){let t=await D.readdir(e,{withFileTypes:true});for(let r of t){if(r.name==="node_modules")continue;let o=N__default.join(e,r.name);if(r.isDirectory())await bn(o);else if(r.name==="package.json"){let n=await D.readFile(o,"utf8");if(!n.includes("workspace:"))continue;let i=JSON.parse(n),s=false;for(let c of ["dependencies","devDependencies","peerDependencies","optionalDependencies"]){let l=i[c];if(l)for(let[m,p]of Object.entries(l))typeof p=="string"&&p.startsWith("workspace:")&&(l[m]="*",s=true);}s&&await D.writeFile(o,JSON.stringify(i,null,2)+`
8
- `);}}}function Sn({title:e,templateDir:t}){return async({projectPath:r,packageManager:o})=>{let n=D$1(`Creating a new ${e} project. This may take a few minutes.`).start();try{let i=process.env.SHADCN_TEMPLATE_DIR;if(i){let m=N__default.resolve(i,t);await D.copy(m,r,{filter:p=>!p.includes("node_modules")});}else {let m=N__default.join(aa$1.tmpdir(),`shadcn-template-${Date.now()}`);await execa("git",["clone","--depth","1","--filter=blob:none","--sparse",ca,m]),await execa("git",["-C",m,"sparse-checkout","set",`templates/${t}`]);let p=N__default.resolve(m,"templates",t);await D.move(p,r),await D.remove(m);}await ma(r,o);let c=["install",...la(o)];await execa(o,c,{cwd:r});let l=N__default.join(r,"package.json");if(D.existsSync(l)){let m=await D.readFile(l,"utf8"),p=JSON.parse(m);p.name=N__default.basename(r),await D.writeFile(l,JSON.stringify(p,null,2)+`
9
- `);}n?.succeed(`Creating a new ${e} project.`);}catch(i){n?.fail(`Something went wrong creating a new ${e} project.`),ka$1(i);}}}async function pa({projectPath:e}){try{await execa("git",["init"],{cwd:e}),await execa("git",["add","-A"],{cwd:e}),await execa("git",["commit","-m","feat: initial commit"],{cwd:e});}catch{}}async function de(e){let t=N__default.resolve(e.projectPath,"packages/ui"),r=N__default.resolve(e.projectPath,"apps/web"),o=N__default.resolve(t,"components.json"),n=await D.readJson(o);e.registryBaseConfig&&(n=vn(n,e.registryBaseConfig)),n.tailwind.baseColor="neutral",e.rtl&&(n.rtl=true),e.menuColor&&(n.menuColor=e.menuColor),e.menuAccent&&(n.menuAccent=e.menuAccent),e.iconLibrary&&(n.iconLibrary=e.iconLibrary),await D.writeJson(o,n,{spaces:2});let i=N__default.resolve(r,"components.json"),s=await D.readJson(i);e.registryBaseConfig&&(s=vn(s,e.registryBaseConfig)),s.tailwind.baseColor="neutral",e.rtl&&(s.rtl=true),e.menuColor&&(s.menuColor=e.menuColor),e.menuAccent&&(s.menuAccent=e.menuAccent),e.iconLibrary&&(s.iconLibrary=e.iconLibrary),await D.writeJson(i,s,{spaces:2});let c$1=await Z$1(t,c.parse(n)),{config:l}=await U(e.components,c$1,{silent:true});await Ra$1(e.components,l,{overwrite:true,silent:e.silent,isNewProject:true,skipFonts:true});let m=await Z$1(r,c.parse(s)),p=await ga(e.components,ba(l));if(p?.fonts?.length){let g={},u=new Set;for(let h of p.fonts){let y=h.name.replace(/^font-heading-/,"").replace("font-",""),k=h.font.dependency??`@fontsource-variable/${y}`;g[h.font.variable]=h.font.family,u.add(k);}await Ma$1(Array.from(u),[],c$1,{silent:true}),await Ha$1({theme:g},c$1,{silent:e.silent,overwriteCssVars:false,tailwindVersion:"v4"}),await Ka$1(Object.fromEntries(Array.from(u).map(h=>[`@import "${h}"`,{}])),c$1,{silent:e.silent});}let f=c$1.iconLibrary;if(f&&f in a$4){let g=[...a$4[f].packages];await Ma$1(g,[],c$1,{silent:true}),await Ma$1(g,[],m,{silent:true});}return m}var In=X({name:"astro",title:"Astro",defaultProjectName:"astro-app",templateDir:"astro-app",frameworks:["astro"],create:async()=>{},files:[{type:"registry:page",path:"src/pages/index.astro",target:"src/pages/index.astro",content:Rn`---
7
+ `);}i&&await D.remove(r),c&&t==="npm"&&await bn(e);}async function fa(e){try{let{stdout:t}=await execa(e,["--version"]);return `${e}@${t.trim()}`}catch{return `${e}@*`}}async function bn(e){let t=await D.readdir(e,{withFileTypes:true});for(let r of t){if(r.name==="node_modules")continue;let o=N__default.join(e,r.name);if(r.isDirectory())await bn(o);else if(r.name==="package.json"){let n=await D.readFile(o,"utf8");if(!n.includes("workspace:"))continue;let i=JSON.parse(n),s=false;for(let c of ["dependencies","devDependencies","peerDependencies","optionalDependencies"]){let l=i[c];if(l)for(let[m,d]of Object.entries(l))typeof d=="string"&&d.startsWith("workspace:")&&(l[m]="*",s=true);}s&&await D.writeFile(o,JSON.stringify(i,null,2)+`
8
+ `);}}}function Sn({title:e,templateDir:t}){return async({projectPath:r,packageManager:o})=>{let n=D$1(`Creating a new ${e} project. This may take a few minutes.`).start();try{let i=process.env.SHADCN_TEMPLATE_DIR;if(i){let m=N__default.resolve(i,t);await D.copy(m,r,{filter:d=>!d.includes("node_modules")});}else {let m=N__default.join(aa$1.tmpdir(),`shadcn-template-${Date.now()}`);await execa("git",["clone","--depth","1","--filter=blob:none","--sparse",ca,m]),await execa("git",["-C",m,"sparse-checkout","set",`templates/${t}`]);let d=N__default.resolve(m,"templates",t);await D.move(d,r),await D.remove(m);}await ma(r,o);let c=["install",...la(o)];await execa(o,c,{cwd:r});let l=N__default.join(r,"package.json");if(D.existsSync(l)){let m=await D.readFile(l,"utf8"),d=JSON.parse(m);d.name=N__default.basename(r),await D.writeFile(l,JSON.stringify(d,null,2)+`
9
+ `);}n?.succeed(`Creating a new ${e} project.`);}catch(i){n?.fail(`Something went wrong creating a new ${e} project.`),ka$1(i);}}}async function pa({projectPath:e}){try{await execa("git",["init"],{cwd:e}),await execa("git",["add","-A"],{cwd:e}),await execa("git",["commit","-m","feat: initial commit"],{cwd:e});}catch{}}async function de(e){let t=N__default.resolve(e.projectPath,"packages/ui"),r=N__default.resolve(e.projectPath,"apps/web"),o=N__default.resolve(t,"components.json"),n=await D.readJson(o);e.registryBaseConfig&&(n=vn(n,e.registryBaseConfig)),n.tailwind.baseColor="neutral",e.rtl&&(n.rtl=true),e.menuColor&&(n.menuColor=e.menuColor),e.menuAccent&&(n.menuAccent=e.menuAccent),e.iconLibrary&&(n.iconLibrary=e.iconLibrary),await D.writeJson(o,n,{spaces:2});let i=N__default.resolve(r,"components.json"),s=await D.readJson(i);e.registryBaseConfig&&(s=vn(s,e.registryBaseConfig)),s.tailwind.baseColor="neutral",e.rtl&&(s.rtl=true),e.menuColor&&(s.menuColor=e.menuColor),e.menuAccent&&(s.menuAccent=e.menuAccent),e.iconLibrary&&(s.iconLibrary=e.iconLibrary),await D.writeJson(i,s,{spaces:2});let c$1=await Z$1(t,c.parse(n)),{config:l}=await U(e.components,c$1,{silent:true});await Ra$1(e.components,l,{overwrite:true,silent:e.silent,isNewProject:true,skipFonts:true});let m=await Z$1(r,c.parse(s)),d=await ga(e.components,ba(l));if(d?.fonts?.length){let g={},u=new Set;for(let h of d.fonts){let y=h.name.replace(/^font-heading-/,"").replace("font-",""),k=h.font.dependency??`@fontsource-variable/${y}`;g[h.font.variable]=h.font.family,u.add(k);}await Ma$1(Array.from(u),[],c$1,{silent:true}),await Ha$1({theme:g},c$1,{silent:e.silent,overwriteCssVars:false,tailwindVersion:"v4"}),await Ka$1(Object.fromEntries(Array.from(u).map(h=>[`@import "${h}"`,{}])),c$1,{silent:e.silent});}let f=c$1.iconLibrary;if(f&&f in a$4){let g=[...a$4[f].packages];await Ma$1(g,[],c$1,{silent:true}),await Ma$1(g,[],m,{silent:true});}return m}var In=X({name:"astro",title:"Astro",defaultProjectName:"astro-app",templateDir:"astro-app",frameworks:["astro"],create:async()=>{},files:[{type:"registry:page",path:"src/pages/index.astro",target:"src/pages/index.astro",content:Rn`---
10
10
  import Layout from "@/layouts/main.astro"
11
11
  import { ComponentExample } from "@/components/component-example"
12
12
  ---
@@ -34,7 +34,7 @@ import { ComponentExample } from "@/components/component-example"
34
34
  export default function Page() {
35
35
  return <ComponentExample />;
36
36
  }
37
- `}],monorepo:{templateDir:"next-monorepo",init:async e=>{let t=N__default.resolve(e.projectPath,"packages/ui"),r=N__default.resolve(e.projectPath,"apps/web"),o=N__default.resolve(t,"components.json"),n=await D.readJson(o);e.registryBaseConfig&&(n=vn(n,e.registryBaseConfig)),n.tailwind.baseColor="neutral",e.rtl&&(n.rtl=true),await D.writeJson(o,n,{spaces:2});let i=N__default.resolve(r,"components.json"),s=await D.readJson(i);e.registryBaseConfig&&(s=vn(s,e.registryBaseConfig)),s.tailwind.baseColor="neutral",e.rtl&&(s.rtl=true),await D.writeJson(i,s,{spaces:2});let c$1=await Z$1(t,c.parse(n)),{config:l}=await U(e.components,c$1,{silent:true});await Ra$1(e.components,l,{overwrite:true,silent:e.silent,isNewProject:true,skipFonts:true});let m=await Z$1(r,c.parse(s)),p=await ga(e.components,ba(l));if(p?.fonts?.length){let g={};for(let u of p.fonts)g[u.font.variable]=`var(${u.font.variable})`;await Ha$1({theme:g},c$1,{silent:e.silent,overwriteCssVars:false,tailwindVersion:"v4"}),await Qa$1(p.fonts,m,{silent:e.silent});}let f=c$1.iconLibrary;if(f&&f in a$4){let g=[...a$4[f].packages];await Ma$1(g,[],c$1,{silent:true}),await Ma$1(g,[],m,{silent:true});}return m},files:[{type:"registry:page",path:"app/page.tsx",target:"app/page.tsx",content:Rn`import { ComponentExample } from "@/components/component-example";
37
+ `}],monorepo:{templateDir:"next-monorepo",init:async e=>{let t=N__default.resolve(e.projectPath,"packages/ui"),r=N__default.resolve(e.projectPath,"apps/web"),o=N__default.resolve(t,"components.json"),n=await D.readJson(o);e.registryBaseConfig&&(n=vn(n,e.registryBaseConfig)),n.tailwind.baseColor="neutral",e.rtl&&(n.rtl=true),await D.writeJson(o,n,{spaces:2});let i=N__default.resolve(r,"components.json"),s=await D.readJson(i);e.registryBaseConfig&&(s=vn(s,e.registryBaseConfig)),s.tailwind.baseColor="neutral",e.rtl&&(s.rtl=true),await D.writeJson(i,s,{spaces:2});let c$1=await Z$1(t,c.parse(n)),{config:l}=await U(e.components,c$1,{silent:true});await Ra$1(e.components,l,{overwrite:true,silent:e.silent,isNewProject:true,skipFonts:true});let m=await Z$1(r,c.parse(s)),d=await ga(e.components,ba(l));if(d?.fonts?.length){let g={};for(let u of d.fonts)g[u.font.variable]=`var(${u.font.variable})`;await Ha$1({theme:g},c$1,{silent:e.silent,overwriteCssVars:false,tailwindVersion:"v4"}),await Qa$1(d.fonts,m,{silent:e.silent});}let f=c$1.iconLibrary;if(f&&f in a$4){let g=[...a$4[f].packages];await Ma$1(g,[],c$1,{silent:true}),await Ma$1(g,[],m,{silent:true});}return m},files:[{type:"registry:page",path:"app/page.tsx",target:"app/page.tsx",content:Rn`import { ComponentExample } from "@/components/component-example";
38
38
 
39
39
  export default function Page() {
40
40
  return <ComponentExample />;
@@ -84,10 +84,10 @@ export function App() {
84
84
 
85
85
  export default App;
86
86
  `}]}});var Z={next:Nn,vite:Dn,start:Fn,"react-router":jn,astro:In,laravel:Pn};function Ue(e){if(e){for(let[t,r]of Object.entries(Z))if(r.frameworks.includes(e))return t}}function _n(e,t){let r=t?.lib??Mt(e,"lib");return {ui:t?.ui??Mt(e,"ui"),lib:r,hooks:t?.hooks??Mt(e,"hooks"),utils:t?.utils??Mt(e,"utils",r)}}function Mt(e,t,r){let o=e||T;if(t==="ui")return `${o}/ui`;if(t==="utils"){let n=r||Ln(o,"lib");return n?`${n}/utils`:U$1}return Ln(o,t)}function Ln(e,t){return e==="components"?t:e.endsWith("/components")?`${e.slice(0,-11)}/${t}`:e.endsWith("components")&&!e.includes("/")?`${e.slice(0,-10)}${t}`:""}async function Vt(e){let t=e.template&&e.template in Z?e.template:"next",r=Re(Z[t],{monorepo:e.monorepo}),o=e.name??r.defaultProjectName,n=e.components?.length===1&&!!e.components[0].match(/\/chat\/b\//);if(n&&(t="next"),!e.force){let{type:l,name:m}=await ge([{type:e.template||n?null:"select",name:"type",message:`The path ${f.info(e.cwd)} does not contain a package.json file.
87
- Would you like to start a new project?`,choices:Object.entries(Z).map(([p,f])=>({title:f.title,value:p,description:f.description})),initial:0},{type:e.name?null:"text",name:"name",message:"What is your project named?",initial:o,format:p=>p.trim(),validate:p=>p.length>128?"Name should be less than 128 characters.":true}]);t=l??t,o=m??o;}let i=Re(Z[t],{monorepo:e.monorepo}),s=await ha(e.cwd,{withFallback:true}),c=N__default.join(e.cwd,o);try{await D.access(e.cwd,D.constants.W_OK);}catch{g.break(),g.error(`The path ${f.info(e.cwd)} is not writable.`),g.error(`It is likely you do not have write permissions for this folder or the path ${f.info(e.cwd)} does not exist.`),g.break(),process.exit(1);}return D.existsSync(N__default.resolve(e.cwd,o,"package.json"))&&(g.break(),g.error(`A project with the name ${f.info(o)} already exists.`),g.error("Please choose a different name and try again."),g.break(),process.exit(1)),await i.scaffold({projectPath:c,packageManager:s,cwd:e.cwd}),{projectPath:c,projectName:o,template:t}}var ze=".bak",We=class extends Error{filePath;constructor(t){super(`Could not back up ${t}.`),this.name="FileBackupError",this.filePath=t;}};function rt(e){if(!D.existsSync(e))return null;let t=`${e}${ze}`;try{return D.renameSync(e,t),t}catch{return null}}function Je(e){let t=`${e}${ze}`;if(!D.existsSync(t))return false;try{return D.renameSync(t,e),!0}catch(r){return console.error(`Warning: Could not restore backup file ${t}: ${r}`),false}}function ot(e){let t=`${e}${ze}`;if(!D.existsSync(t))return false;try{return D.unlinkSync(t),!0}catch{return false}}async function Vn(e,t){if(!D.existsSync(e))return t();if(!rt(e))throw new We(e);let o=()=>Je(e);process.on("exit",o);try{let n=await t();return process.removeListener("exit",o),ot(e),n}catch(n){throw process.removeListener("exit",o),Je(e),n}}var ya=z.object({cwd:z.string(),name:z.string().optional(),preset:z.union([z.boolean(),z.string()]).optional(),components:z.array(z.string()).optional(),yes:z.boolean(),defaults:z.boolean(),force:z.boolean(),reinstall:z.boolean().optional(),silent:z.boolean(),isNewProject:z.boolean().default(false),cssVariables:z.boolean().default(true),rtl:z.boolean().optional(),pointer:z.boolean().optional(),base:z.enum(a).optional(),template:z.string().optional(),monorepo:z.boolean().optional(),existingConfig:z.record(z.unknown()).optional(),installStyleIndex:z.boolean().default(true),registryBaseConfig:c.deepPartial().optional(),menuColor:z.enum(["default","inverted","default-translucent","inverted-translucent"]).optional(),menuAccent:z.enum(["subtle","bold"]).optional(),iconLibrary:z.string().optional()});function wa(e,t){return t.rtl?e.searchParams.set("rtl","true"):t.rtl===false&&e.searchParams.delete("rtl"),t.pointer?e.searchParams.set("pointer","true"):t.pointer===false&&e.searchParams.delete("pointer"),e}var Bn=new Command().name("init").alias("create").description("initialize your project and install dependencies").argument("[components...]","names, url or local path to component").option("-t, --template <template>","the template to use. (next, start, vite, react-router, laravel, astro)").option("-b, --base <base>","the component library to use. (base, radix, aria)").option("--monorepo","scaffold a monorepo project.").option("--no-monorepo","skip the monorepo prompt.").option("-p, --preset [name]","use a preset configuration").option("-y, --yes","skip confirmation prompt.",true).option("-d, --defaults","use default configuration: --template=next --preset=base-nova",false).option("-f, --force","force overwrite of existing configuration.",false).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-n, --name <name>","the name for the new project.").option("-s, --silent","mute output.",false).option("--css-variables","use css variables for theming.",true).option("--no-css-variables","do not use css variables for theming.").option("--rtl","enable RTL support.").option("--no-rtl","disable RTL support.").option("--pointer","enable pointer cursor for buttons.").option("--no-pointer","disable pointer cursor for buttons.").option("--reinstall","re-install existing UI components.").option("--no-reinstall","do not re-install existing UI components.").action(async(e,t$1)=>{let r,o=[],n=()=>{r&&Je(r.replace(ze,""));};process.on("exit",n);try{let i$1=ya.parse({...t$1,reinstall:t$1.reinstall,cwd:N__default.resolve(t$1.cwd)}),s$1=new Map(Object.entries(q)),c;if(i$1.defaults&&(i$1.template=i$1.template||"next",i$1.base=i$1.base||"base",i$1.reinstall=i$1.reinstall??!1),i$1.template&&!(i$1.template in Z)&&(g.error(`Invalid template: ${f.info(i$1.template)}. Available templates: ${Object.keys(Z).map(u=>f.info(u)).join(", ")}.`),g.break(),process.exit(1)),typeof i$1.preset=="string"&&!O(i$1.preset)&&!t(i$1.preset)){let u=Array.from(s$1.keys());s$1.has(i$1.preset)||(g.error(`Invalid preset: ${f.info(i$1.preset)}. Available presets: ${u.join(", ")}`),g.break(),process.exit(1));}let l=i$1.cwd,m=D.existsSync(N__default.resolve(l,"components.json"));if(!i$1.monorepo&&!m&&await h(l)){let u=await Ca$1(l);if(!u||u.framework.name==="manual"){let h=await i(l);h.length>0&&(j$1("init",h),process.exit(1));}}if(m&&!i$1.force){let{overwrite:u}=await ge({type:"confirm",name:"overwrite",message:`A ${f.info("components.json")} file already exists. Would you like to overwrite it?`,initial:!1});u||(g.info(` To start over, remove the ${f.info("components.json")} file and run ${f.info("init")} again.`),g.break(),process.exit(1)),i$1.force=!0;}let p;if(m){try{p=await D.readJson(N__default.resolve(l,"components.json"));}catch{g.warn(`Could not parse the existing ${f.info("components.json")}. Unable to detect the current base.`);}p&&(i$1.existingConfig=p);let u=i$1.reinstall;if(u===void 0){let{reinstall:h}=await ge({type:"confirm",name:"reinstall",message:"Would you like to re-install existing UI components?",initial:!1});u=h;}if(u&&(o=await Fa$1(l),o.length)){g.break(),g.log(" The following components will be re-installed and overwritten:");for(let h=0;h<o.length;h+=8)g.log(` - ${o.slice(h,h+8).join(", ")}`);g.break();}}if(i$1.preset===void 0&&e.length===0&&!i$1.defaults){let u=D.existsSync(N__default.resolve(l,"package.json"));if(!i$1.template&&!u){let{template:h}=await ge({type:"select",name:"template",message:"Select a template",choices:Object.entries(Z).map(([y,k])=>({title:k.title,value:y,description:k.description,disabled:i$1.monorepo&&y==="laravel"}))});h||process.exit(1),i$1.template=h;}if(!i$1.template&&u){let h=await Ca$1(l),y=Ue(h?.framework.name);y&&(i$1.template=y);}if(i$1.template==="laravel"&&!u&&(g.break(),g.log(` Please create a new app with ${f.info("laravel new --react")} first then run ${f.info("shadcn init")}.`),g.log(` See ${f.info(`${a$1}/docs/installation/laravel`)} for more information.`),g.break(),process.exit(0)),i$1.monorepo===void 0&&!u&&i$1.template&&Z[i$1.template]?.monorepo){let{monorepo:h}=await ge({type:"confirm",name:"monorepo",message:"Would you like to set up a monorepo?",initial:!1});i$1.monorepo=h;}i$1.base||(i$1.base=await Be()),i$1.preset=!0;}if(i$1.preset!==void 0){let u=i$1.preset===!0?!0:i$1.preset;if(u===!0){let h=await tt({rtl:i$1.rtl??!1,template:i$1.template,base:i$1.base,pointer:i$1.pointer});e=[h.url,...e],c=h.base;}if(typeof u=="string"){let h;if(O(u)){let y=new URL(u);wa(y,i$1),y.pathname==="/init"&&u.startsWith(a$1)&&y.searchParams.set("track","1"),h=y.toString();let k=y.searchParams.get("base");c=b(k)?k:void 0;}else if(t(u)){let y=s(u);y||(g.error(`Invalid preset code: ${f.info(u)}`),g.break(),process.exit(1)),h=pe({...y,base:"base",rtl:i$1.rtl??!1},{template:i$1.template,preset:u,pointer:i$1.pointer}),c=void 0;}else {let y=s$1.get(u);if(!y)throw new Error(`Unknown preset: ${u}`);h=pe({...y,base:i$1.base??"base",rtl:i$1.rtl??y.rtl},{template:i$1.template,pointer:i$1.pointer}),c=void 0;}e=[h,...e];}}let f$1=i$1.base??c??(typeof p?.style=="string"?$(p.style):void 0),g$1=m&&!p;if(!f$1)if(e.length>0&&!g$1)f$1="base";else {let u=await Be();f$1=u,i$1.base=u;}if(i$1.defaults&&!e.some(O)&&(e=[pe({...q.nova,base:f$1,rtl:i$1.rtl??!1},{template:i$1.template,pointer:i$1.pointer}),...e]),e.length>0&&O(e[0])){let u=new URL(e[0]);u.searchParams.set("base",f$1),e[0]=u.toString();}if(p?.style){let u=await xa(p.style,f$1);if(u!==f$1&&(f$1=u,e.length>0&&O(e[0]))){let h=new URL(e[0]);h.searchParams.set("base",u),e[0]=h.toString();}}if(o.length&&(e=[...e,...o]),i$1.components=e,await Sa(i$1.cwd),e.length>0){let u=N__default.resolve(l,"components.json");m&&(r=rt(u)??void 0,r||g.warn(`Could not back up ${f.info("components.json")}.`));let{registryBaseConfig:h,installStyleIndex:y,url:k}=await Se(e[0],l,{registries:p?.registries});e[0]=k,y||(i$1.installStyleIndex=!1),h&&(i$1.registryBaseConfig=h);}await He(i$1),g.break(),g.log(`Project initialization completed.
88
- You may now add components.`),process.removeListener("exit",n),ot(N__default.resolve(l,"components.json")),g.break();}catch(i){process.removeListener("exit",n),n(),g.break(),ka$1(i);}finally{S();}});async function He(e){let t,r,o,n=e.template,i=n?Re(Z[n],{monorepo:e.monorepo}):void 0;if(e.monorepo&&i?.init&&D.existsSync(N__default.resolve(e.cwd,"package.json")))t=await Ca$1(e.cwd);else if(e.skipPreflight)t=await Ca$1(e.cwd);else {let v=await Cn(e);if(v.errors["1"]){let{projectPath:F,template:G}=await Vt(e);F||process.exit(1),e.cwd=F,e.isNewProject=true,o=G,t=await Ca$1(e.cwd);}else t=v.projectInfo;}r=await Da$1(e.cwd,t);let c=o??n,l=c?Re(Z[c],{monorepo:e.monorepo}):void 0,m=[...e.installStyleIndex?["index"]:[],...e.components??[],...l?["button"]:[]],p=o?l?.postInit:void 0;if(l?.init){let v=await l.init({projectPath:e.cwd,components:m,registryBaseConfig:e.registryBaseConfig,rtl:e.rtl??false,menuColor:e.menuColor,menuAccent:e.menuAccent,iconLibrary:e.iconLibrary,silent:e.silent});return p&&await p({projectPath:e.cwd}),v}let f$1=r?await Ca(r,e):await ka(await Y(e.cwd));if(!e.yes){let{proceed:v}=await ge({type:"confirm",name:"proceed",message:`Write configuration to ${f.info("components.json")}. Proceed?`,initial:true});v||process.exit(1);}let g=await Z$1(e.cwd,f$1),{discoveredRegistries:u,packageJsonRegistries:h}=await U(m,g,{silent:true,writeFile:false});Object.keys(u).length>0&&(f$1.registries={...f$1.registries,...u});let y=D$1("Writing components.json.").start(),k=N__default.resolve(e.cwd,"components.json"),C=`${k}${ze}`,x=(v,F)=>{let{registries:G,...Qe}=vn(v,F);return {...Qe,registries:G}};if(D.existsSync(C)){let v=await D.readJson(C);e.force?v.registries&&(f$1.registries={...v.registries,...f$1.registries||{}}):f$1=x(v,f$1);}e.registryBaseConfig&&(f$1=x(f$1,e.registryBaseConfig)),e.rtl!==void 0&&(f$1.rtl=e.rtl),f$1.registries=Object.fromEntries(Object.entries(f$1.registries||{}).filter(([v])=>!Object.keys(c$1).includes(v))),await promises.writeFile(k,`${JSON.stringify(f$1,null,2)}
89
- `,"utf8"),y.succeed();let S=await Z$1(e.cwd,f$1);Object.keys(h).length>0&&(S.registries={...S.registries,...h});let O=await _(S);if(O){let v={};if(f$1.menuColor&&(v.menuColor=f$1.menuColor),f$1.menuAccent&&(v.menuAccent=f$1.menuAccent),f$1.rtl!==void 0&&(v.rtl=f$1.rtl),f$1.iconLibrary&&(v.iconLibrary=f$1.iconLibrary),Object.keys(v).length>0)for(let F of Object.keys(O)){let G=O[F];if(G.resolvedPaths.cwd===S.resolvedPaths.cwd)continue;let Qe=N__default.resolve(G.resolvedPaths.cwd,"components.json");if(D.existsSync(Qe)){let ra=await D.readJson(Qe);await D.writeJson(Qe,{...ra,...v},{spaces:2});}}}return X$1.clearCaches(),await Ra$1(m,S,{overwrite:true,overwriteCssVars:e.reinstall||void 0,silent:e.silent,isNewProject:e.isNewProject||t?.framework.name==="next-app"}),p&&await p({projectPath:e.cwd}),S}async function ka(e=null){let[t,r]=await Promise.all([ra(),ta$1()]);g.info("");let o=await ge([{type:"toggle",name:"typescript",message:`Would you like to use ${f.info("TypeScript")} (recommended)?`,initial:e?.tsx??true,active:"yes",inactive:"no"},{type:"select",name:"style",message:`Which ${f.info("style")} would you like to use?`,choices:t.map(s=>({title:s.label,value:s.name}))},{type:"select",name:"tailwindBaseColor",message:`Which color would you like to use as the ${f.info("base color")}?`,choices:r.map(s=>({title:s.label,value:s.name}))},{type:"text",name:"tailwindCss",message:`Where is your ${f.info("global CSS")} file?`,initial:e?.tailwind.css??V},{type:"toggle",name:"tailwindCssVariables",message:`Would you like to use ${f.info("CSS variables")} for theming?`,initial:e?.tailwind.cssVariables??true,active:"yes",inactive:"no"},{type:"text",name:"tailwindPrefix",message:`Are you using a custom ${f.info("tailwind prefix eg. tw-")}? (Leave blank if not)`,initial:""},{type:"text",name:"tailwindConfig",message:`Where is your ${f.info("tailwind.config.js")} located?`,initial:e?.tailwind.config??W},{type:"text",name:"components",message:`Configure the import alias for ${f.info("components")}:`,initial:e?.aliases.components??T},{type:"toggle",name:"rsc",message:`Are you using ${f.info("React Server Components")}?`,initial:e?.rsc??true,active:"yes",inactive:"no"}]);o.style||process.exit(1);let n=e&&e.aliases.components===o.components?e.aliases:void 0,i=_n(o.components,n);return c.parse({$schema:"https://ui.shadcn.com/schema.json",style:o.style,tailwind:{config:o.tailwindConfig,css:o.tailwindCss,baseColor:o.tailwindBaseColor,cssVariables:o.tailwindCssVariables,prefix:o.tailwindPrefix},rsc:o.rsc,tsx:o.typescript,aliases:{components:o.components,ui:i.ui,lib:i.lib,hooks:i.hooks,utils:i.utils}})}async function Ca(e,t){let r=e.style,o="neutral",n=e.tailwind.cssVariables,i=e.iconLibrary??"lucide";if(!t.defaults){let[s,c]=await Promise.all([ra(),Ea(e)]);r=(await ge([{type:c==="v4"||r?null:"select",name:"style",message:`Which ${f.info("style")} would you like to use?`,choices:s.map(m=>({title:m.name==="new-york"?"New York (Recommended)":m.label,value:m.name})),initial:0}])).style??r??"new-york";}return n=t.cssVariables,c.parse({$schema:e?.$schema,style:r,tailwind:{...e?.tailwind,baseColor:o,cssVariables:n},rsc:e?.rsc,tsx:e?.tsx,iconLibrary:i,rtl:t.rtl??e?.rtl??false,aliases:e?.aliases})}async function xa(e,t){let r=$(e);if(t===r)return t;g.warn(` You are switching from ${f.info(r)} to ${f.info(t)}.`),g.warn(` Components outside the ${f.info("ui")} directory that depend on ${f.info(r)} primitives may need manual updates.`),g.break();let{proceed:o}=await ge({type:"confirm",name:"proceed",message:"Would you like to continue?",initial:false});return o?t:r}async function Wn(e){let t={};if(!D.existsSync(e.cwd)||!D.existsSync(N__default.resolve(e.cwd,"package.json")))return t["1"]=true,{errors:t,config:null};if(!D.existsSync(N__default.resolve(e.cwd,"components.json"))){if(await h(e.cwd)){let r=await i(e.cwd);r.length>0&&(j$1("add [component]",r),process.exit(1));}return t["3"]=true,{errors:t,config:null}}try{let r=await Y(e.cwd);return {errors:t,config:r}}catch{g.break(),g.error(`An invalid ${f.info("components.json")} file was found at ${f.info(e.cwd)}.
90
- Before you can add components, you must create a valid ${f.info("components.json")} file by running the ${f.info("init")} command.`),g.error(`Learn more at ${f.info(`${a$1}/docs/components-json`)}.`),g.break(),process.exit(1);}}async function zn(e,t,r={}){let o={files:[],dependencies:[],devDependencies:[],css:null,envVars:null,fonts:[],docs:null};if(!e.length)return o;let n=await ga(e,ba(t));if(!n)throw new Error("Failed to fetch components from registry.");r.skipFonts||(n=await Pa$1(n,t));let i=Ga$1([n]);return o.dependencies=Array.from(new Set(n.dependencies??[])),o.devDependencies=Array.from(new Set(n.devDependencies??[])),o.docs=n.docs??null,await va(n,t,o,r,i),await Ra(n,t,o,r),Ia(n,t,o),r.skipFonts||Pa(n,o),o}async function va(e,t,r,o,n){let i=e.files;if(!i?.length)return;let[s,c]=await Promise.all([Ca$1(t.resolvedPaths.cwd),t.tailwind.baseColor?ua(t.tailwind.baseColor):Promise.resolve(void 0)]),l;try{l=loadConfig(t.resolvedPaths.cwd);}catch{l={resultType:"failed"};}let m=new Project({compilerOptions:{}}),p=M(i,t,{isSrcDir:s?.isSrcDir,framework:s?.framework.name});for(let f=0;f<i.length;f++){let g=i[f];if(!g.content)continue;let u=K(g,t,{isSrcDir:s?.isSrcDir,framework:s?.framework.name,commonRoot:L(i.map(v=>v.path),g.path),fileIndex:f});if(!u)continue;t.tsx||(u=u.replace(/\.tsx?$/,v=>v===".tsx"?".jsx":".js"));let h=existsSync(u),y=N__default.relative(t.resolvedPaths.cwd,u),k=g.type==="registry:file"||g.type==="registry:item",C$1=C(u)||k?g.content:await I({filename:g.path,raw:g.content,config:t,baseColor:c,transformJsx:!t.tsx,isRemote:false,supportedFontMarkers:n},[E,F,a$2,H,c$3,g$1,J,d$1,f$1,G]),x=C(u)||k?C$1:await N$1({config:t,content:C$1,filePaths:p,project:m,projectInfo:s,resolvedPath:u,tsConfig:l}),S="create",O;h&&(O=await promises.readFile(u,"utf-8"),B(O,x)?S="skip":S="overwrite"),r.files.push({path:y,action:S,content:x,...S==="overwrite"&&{existingContent:O},type:g.type??"registry:ui"});}}async function Ra(e,t,r,o){let n=e.css&&Object.keys(e.css).length>0,i=Object.keys(e.cssVars??{}).length>0;if(!t.resolvedPaths.tailwindCss||!n&&!i)return;let s=t.resolvedPaths.tailwindCss,c=existsSync(s),l=N__default.relative(t.resolvedPaths.cwd,s),m=c?await promises.readFile(s,"utf8"):"",p=m;i&&(p=await Ia$1(p,e.cssVars,t,{overwriteCssVars:o.overwriteCssVars})),n&&(p=await La$1(p,e.css));let f=0;if(e.cssVars)for(let g of Object.values(e.cssVars))g&&(f+=Object.keys(g).length);r.css={path:l,content:p,...c&&{existingContent:m},action:c?"update":"create",cssVarsCount:f};}function Ia(e,t,r){if(!e.envVars||Object.keys(e.envVars).length===0)return;let o=N__default.join(t.resolvedPaths.cwd,".env.local"),n=existsSync(o),i=N__default.relative(t.resolvedPaths.cwd,o);r.envVars={path:i,variables:e.envVars,action:n?"update":"create"};}function Pa(e,t){if(e.fonts?.length)for(let r of e.fonts)t.fonts.push({name:r.font.family,provider:r.font.provider==="google"?"Google Fonts":r.font.provider});}var ue=5,Na=dim("\u250C"+"\u2500".repeat(46)),Ta=dim("\u2514"+"\u2500".repeat(46)),ja={create:"+",overwrite:"~",skip:"="},Oa={create:"create",overwrite:"overwrite",skip:"skip (identical)"};function it(e){return e==="create"?green(e):e==="overwrite"||e==="update"?yellow(e):dim(e)}function st(e){return `${bold("\u250C")} ${bold(`shadcn add ${e.join(", ")}`)} ${dim("(dry run)")}`}function Kn(e,t){return e===t||e.includes(t)||e.endsWith(t)}function Pe(e,t,r=o=>o){e.push(`${dim("\u2502")} ${Na}`);for(let o of t)e.push(`${dim("\u2502")} ${dim("\u2502")} ${r(o)}`);e.push(`${dim("\u2502")} ${Ta}`);}function Yn(e,t,r={}){return r.diff?typeof r.diff=="string"?Aa(e,t,r.diff):Da(e,t):r.view?typeof r.view=="string"?_a(e,t,r.view):La(e,t):Fa(e,t)}function Fa(e,t){let r=[];r.push(st(t)),r.push(dim("\u2502")),Ma(e,r),Hn("Dependencies",e.dependencies,r),Hn("Dev Dependencies",e.devDependencies,r),Va(e,r),Ba(e,r),Ua(e,r);let o=e.files.filter(i=>i.action==="overwrite").length;o>0&&(r.push(yellow(`\u26A0 ${o} ${o===1?"file":"files"} will be overwritten.`)),r.push(dim("\u2502")));let n=[];return e.files.length>0&&n.push(`${e.files.length} ${e.files.length===1?"file":"files"}`),e.dependencies.length>0&&n.push(`${e.dependencies.length} ${e.dependencies.length===1?"dep":"deps"}`),e.css?.cssVarsCount&&n.push(`${e.css.cssVarsCount} CSS vars`),n.length>0&&(r.push(`${dim("\u2502")} ${dim(n.join(", "))}`),r.push(dim("\u2502"))),r.push(`${dim("\u2502")} ${dim("Run with --diff to view changes.")}`),r.push(`${dim("\u2502")} ${dim("Run with --view to view file contents.")}`),r.push(`${dim("\u2514")} ${dim("Run without --dry-run to apply.")}`),r.join(`
87
+ Would you like to start a new project?`,choices:Object.entries(Z).map(([d,f])=>({title:f.title,value:d,description:f.description})),initial:0},{type:e.name?null:"text",name:"name",message:"What is your project named?",initial:o,format:d=>d.trim(),validate:d=>d.length>128?"Name should be less than 128 characters.":true}]);t=l??t,o=m??o;}let i=Re(Z[t],{monorepo:e.monorepo}),s=await ha(e.cwd,{withFallback:true}),c=N__default.join(e.cwd,o);try{await D.access(e.cwd,D.constants.W_OK);}catch{g.break(),g.error(`The path ${f.info(e.cwd)} is not writable.`),g.error(`It is likely you do not have write permissions for this folder or the path ${f.info(e.cwd)} does not exist.`),g.break(),process.exit(1);}return D.existsSync(N__default.resolve(e.cwd,o,"package.json"))&&(g.break(),g.error(`A project with the name ${f.info(o)} already exists.`),g.error("Please choose a different name and try again."),g.break(),process.exit(1)),await i.scaffold({projectPath:c,packageManager:s,cwd:e.cwd}),{projectPath:c,projectName:o,template:t}}var ze=".bak",We=class extends Error{filePath;constructor(t){super(`Could not back up ${t}.`),this.name="FileBackupError",this.filePath=t;}};function rt(e){if(!D.existsSync(e))return null;let t=`${e}${ze}`;try{return D.renameSync(e,t),t}catch{return null}}function Je(e){let t=`${e}${ze}`;if(!D.existsSync(t))return false;try{return D.renameSync(t,e),!0}catch(r){return console.error(`Warning: Could not restore backup file ${t}: ${r}`),false}}function ot(e){let t=`${e}${ze}`;if(!D.existsSync(t))return false;try{return D.unlinkSync(t),!0}catch{return false}}async function Vn(e,t){if(!D.existsSync(e))return t();if(!rt(e))throw new We(e);let o=()=>Je(e);process.on("exit",o);try{let n=await t();return process.removeListener("exit",o),ot(e),n}catch(n){throw process.removeListener("exit",o),Je(e),n}}var ya=z.object({cwd:z.string(),name:z.string().optional(),preset:z.union([z.boolean(),z.string()]).optional(),components:z.array(z.string()).optional(),yes:z.boolean(),defaults:z.boolean(),force:z.boolean(),reinstall:z.boolean().optional(),silent:z.boolean(),isNewProject:z.boolean().default(false),cssVariables:z.boolean().default(true),rtl:z.boolean().optional(),pointer:z.boolean().optional(),base:z.enum(a).optional(),template:z.string().optional(),monorepo:z.boolean().optional(),existingConfig:z.record(z.unknown()).optional(),installStyleIndex:z.boolean().default(true),registryBaseConfig:c.deepPartial().optional(),menuColor:z.enum(["default","inverted","default-translucent","inverted-translucent"]).optional(),menuAccent:z.enum(["subtle","bold"]).optional(),iconLibrary:z.string().optional()});function wa(e,t){return t.rtl?e.searchParams.set("rtl","true"):t.rtl===false&&e.searchParams.delete("rtl"),t.pointer?e.searchParams.set("pointer","true"):t.pointer===false&&e.searchParams.delete("pointer"),e}var Bn=new Command().name("init").alias("create").description("initialize your project and install dependencies").argument("[components...]","names, url or local path to component").option("-t, --template <template>","the template to use. (next, start, vite, react-router, laravel, astro)").option("-b, --base <base>","the component library to use. (base, radix, aria)").option("--monorepo","scaffold a monorepo project.").option("--no-monorepo","skip the monorepo prompt.").option("-p, --preset [name]","use a preset configuration").option("-y, --yes","skip confirmation prompt.",true).option("-d, --defaults","use default configuration: --template=next --preset=base-nova",false).option("-f, --force","force overwrite of existing configuration.",false).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-n, --name <name>","the name for the new project.").option("-s, --silent","mute output.",false).option("--css-variables","use css variables for theming.",true).option("--no-css-variables","do not use css variables for theming.").option("--rtl","enable RTL support.").option("--no-rtl","disable RTL support.").option("--pointer","enable pointer cursor for buttons.").option("--no-pointer","disable pointer cursor for buttons.").option("--reinstall","re-install existing UI components.").option("--no-reinstall","do not re-install existing UI components.").action(async(e,t$1)=>{let r,o=[],n=()=>{r&&Je(r.replace(ze,""));};process.on("exit",n);try{let i$1=ya.parse({...t$1,reinstall:t$1.reinstall,cwd:N__default.resolve(t$1.cwd)}),s$1=new Map(Object.entries(q)),c;if(i$1.defaults&&(i$1.template=i$1.template||"next",i$1.base=i$1.base||"base",i$1.reinstall=i$1.reinstall??!1),i$1.template&&!(i$1.template in Z)&&(g.error(`Invalid template: ${f.info(i$1.template)}. Available templates: ${Object.keys(Z).map(u=>f.info(u)).join(", ")}.`),g.break(),process.exit(1)),typeof i$1.preset=="string"&&!O(i$1.preset)&&!t(i$1.preset)){let u=Array.from(s$1.keys());s$1.has(i$1.preset)||(g.error(`Invalid preset: ${f.info(i$1.preset)}. Available presets: ${u.join(", ")}`),g.break(),process.exit(1));}let l=i$1.cwd,m=D.existsSync(N__default.resolve(l,"components.json"));if(!i$1.monorepo&&!m&&await h(l)){let u=await Ca$1(l);if(!u||u.framework.name==="manual"){let h=await i(l);h.length>0&&(j$1("init",h),process.exit(1));}}if(m&&!i$1.force){let{overwrite:u}=await ge({type:"confirm",name:"overwrite",message:`A ${f.info("components.json")} file already exists. Would you like to overwrite it?`,initial:!1});u||(g.info(` To start over, remove the ${f.info("components.json")} file and run ${f.info("init")} again.`),g.break(),process.exit(1)),i$1.force=!0;}let d;if(m){try{d=await D.readJson(N__default.resolve(l,"components.json"));}catch{g.warn(`Could not parse the existing ${f.info("components.json")}. Unable to detect the current base.`);}d&&(i$1.existingConfig=d);let u=i$1.reinstall;if(u===void 0){let{reinstall:h}=await ge({type:"confirm",name:"reinstall",message:"Would you like to re-install existing UI components?",initial:!1});u=h;}if(u&&(o=await Fa$1(l),o.length)){g.break(),g.log(" The following components will be re-installed and overwritten:");for(let h=0;h<o.length;h+=8)g.log(` - ${o.slice(h,h+8).join(", ")}`);g.break();}}if(i$1.preset===void 0&&e.length===0&&!i$1.defaults){let u=D.existsSync(N__default.resolve(l,"package.json"));if(!i$1.template&&!u){let{template:h}=await ge({type:"select",name:"template",message:"Select a template",choices:Object.entries(Z).map(([y,k])=>({title:k.title,value:y,description:k.description,disabled:i$1.monorepo&&y==="laravel"}))});h||process.exit(1),i$1.template=h;}if(!i$1.template&&u){let h=await Ca$1(l),y=Ue(h?.framework.name);y&&(i$1.template=y);}if(i$1.template==="laravel"&&!u&&(g.break(),g.log(` Please create a new app with ${f.info("laravel new --react")} first then run ${f.info("shadcn init")}.`),g.log(` See ${f.info(`${a$1}/docs/installation/laravel`)} for more information.`),g.break(),process.exit(0)),i$1.monorepo===void 0&&!u&&i$1.template&&Z[i$1.template]?.monorepo){let{monorepo:h}=await ge({type:"confirm",name:"monorepo",message:"Would you like to set up a monorepo?",initial:!1});i$1.monorepo=h;}i$1.base||(i$1.base=await Be()),i$1.preset=!0;}if(i$1.preset!==void 0){let u=i$1.preset===!0?!0:i$1.preset;if(u===!0){let h=await tt({rtl:i$1.rtl??!1,template:i$1.template,base:i$1.base,pointer:i$1.pointer});e=[h.url,...e],c=h.base;}if(typeof u=="string"){let h;if(O(u)){let y=new URL(u);wa(y,i$1),y.pathname==="/init"&&u.startsWith(a$1)&&y.searchParams.set("track","1"),h=y.toString();let k=y.searchParams.get("base");c=b(k)?k:void 0;}else if(t(u)){let y=s(u);y||(g.error(`Invalid preset code: ${f.info(u)}`),g.break(),process.exit(1)),h=pe({...y,base:"base",rtl:i$1.rtl??!1},{template:i$1.template,preset:u,pointer:i$1.pointer}),c=void 0;}else {let y=s$1.get(u);if(!y)throw new Error(`Unknown preset: ${u}`);h=pe({...y,base:i$1.base??"base",rtl:i$1.rtl??y.rtl},{template:i$1.template,pointer:i$1.pointer}),c=void 0;}e=[h,...e];}}let f$1=i$1.base??c??(typeof d?.style=="string"?$(d.style):void 0),g$1=m&&!d;if(!f$1)if(e.length>0&&!g$1)f$1="base";else {let u=await Be();f$1=u,i$1.base=u;}if(i$1.defaults&&!e.some(O)&&(e=[pe({...q.nova,base:f$1,rtl:i$1.rtl??!1},{template:i$1.template,pointer:i$1.pointer}),...e]),e.length>0&&O(e[0])){let u=new URL(e[0]);u.searchParams.set("base",f$1),e[0]=u.toString();}if(d?.style){let u=await xa(d.style,f$1);if(u!==f$1&&(f$1=u,e.length>0&&O(e[0]))){let h=new URL(e[0]);h.searchParams.set("base",u),e[0]=h.toString();}}if(o.length&&(e=[...e,...o]),i$1.components=e,await Sa(i$1.cwd),e.length>0){let u=N__default.resolve(l,"components.json");m&&(r=rt(u)??void 0,r||g.warn(`Could not back up ${f.info("components.json")}.`));let{registryBaseConfig:h,installStyleIndex:y,url:k}=await Se(e[0],l,{registries:d?.registries});e[0]=k,y||(i$1.installStyleIndex=!1),h&&(i$1.registryBaseConfig=h);}await He(i$1),g.break(),g.log(`Project initialization completed.
88
+ You may now add components.`),process.removeListener("exit",n),ot(N__default.resolve(l,"components.json")),g.break();}catch(i){process.removeListener("exit",n),n(),g.break(),ka$1(i);}finally{S();}});async function He(e){let t,r,o,n=e.template,i=n?Re(Z[n],{monorepo:e.monorepo}):void 0;if(e.monorepo&&i?.init&&D.existsSync(N__default.resolve(e.cwd,"package.json")))t=await Ca$1(e.cwd);else if(e.skipPreflight)t=await Ca$1(e.cwd);else {let v=await Cn(e);if(v.errors["1"]){let{projectPath:F,template:G}=await Vt(e);F||process.exit(1),e.cwd=F,e.isNewProject=true,o=G,t=await Ca$1(e.cwd);}else t=v.projectInfo;}r=await Da$1(e.cwd,t);let c=o??n,l=c?Re(Z[c],{monorepo:e.monorepo}):void 0,m=[...e.installStyleIndex?["index"]:[],...e.components??[],...l?["button"]:[]],d=o?l?.postInit:void 0;if(l?.init){let v=await l.init({projectPath:e.cwd,components:m,registryBaseConfig:e.registryBaseConfig,rtl:e.rtl??false,menuColor:e.menuColor,menuAccent:e.menuAccent,iconLibrary:e.iconLibrary,silent:e.silent});return d&&await d({projectPath:e.cwd}),v}let f$1=r?await Ca(r,e):await ka(await Y(e.cwd));if(!e.yes){let{proceed:v}=await ge({type:"confirm",name:"proceed",message:`Write configuration to ${f.info("components.json")}. Proceed?`,initial:true});v||process.exit(1);}let g=await Z$1(e.cwd,f$1),{discoveredRegistries:u,packageJsonRegistries:h}=await U(m,g,{silent:true,writeFile:false});Object.keys(u).length>0&&(f$1.registries={...f$1.registries,...u});let y=D$1("Writing components.json.").start(),k=N__default.resolve(e.cwd,"components.json"),C=`${k}${ze}`,x=(v,F)=>{let{registries:G,...Qe}=vn(v,F);return {...Qe,registries:G}};if(D.existsSync(C)){let v=await D.readJson(C);e.force?v.registries&&(f$1.registries={...v.registries,...f$1.registries||{}}):f$1=x(v,f$1);}e.registryBaseConfig&&(f$1=x(f$1,e.registryBaseConfig)),e.rtl!==void 0&&(f$1.rtl=e.rtl),f$1.registries=Object.fromEntries(Object.entries(f$1.registries||{}).filter(([v])=>!Object.keys(c$1).includes(v))),await promises.writeFile(k,`${JSON.stringify(f$1,null,2)}
89
+ `,"utf8"),y.succeed();let S=await Z$1(e.cwd,f$1);Object.keys(h).length>0&&(S.registries={...S.registries,...h});let O=await _(S);if(O){let v={};if(f$1.menuColor&&(v.menuColor=f$1.menuColor),f$1.menuAccent&&(v.menuAccent=f$1.menuAccent),f$1.rtl!==void 0&&(v.rtl=f$1.rtl),f$1.iconLibrary&&(v.iconLibrary=f$1.iconLibrary),Object.keys(v).length>0)for(let F of Object.keys(O)){let G=O[F];if(G.resolvedPaths.cwd===S.resolvedPaths.cwd)continue;let Qe=N__default.resolve(G.resolvedPaths.cwd,"components.json");if(D.existsSync(Qe)){let ra=await D.readJson(Qe);await D.writeJson(Qe,{...ra,...v},{spaces:2});}}}return X$1.clearCaches(),await Ra$1(m,S,{overwrite:true,overwriteCssVars:e.reinstall||void 0,silent:e.silent,isNewProject:e.isNewProject||t?.framework.name==="next-app"}),d&&await d({projectPath:e.cwd}),S}async function ka(e=null){let[t,r]=await Promise.all([ra(),ta$1()]);g.info("");let o=await ge([{type:"toggle",name:"typescript",message:`Would you like to use ${f.info("TypeScript")} (recommended)?`,initial:e?.tsx??true,active:"yes",inactive:"no"},{type:"select",name:"style",message:`Which ${f.info("style")} would you like to use?`,choices:t.map(s=>({title:s.label,value:s.name}))},{type:"select",name:"tailwindBaseColor",message:`Which color would you like to use as the ${f.info("base color")}?`,choices:r.map(s=>({title:s.label,value:s.name}))},{type:"text",name:"tailwindCss",message:`Where is your ${f.info("global CSS")} file?`,initial:e?.tailwind.css??V},{type:"toggle",name:"tailwindCssVariables",message:`Would you like to use ${f.info("CSS variables")} for theming?`,initial:e?.tailwind.cssVariables??true,active:"yes",inactive:"no"},{type:"text",name:"tailwindPrefix",message:`Are you using a custom ${f.info("tailwind prefix eg. tw-")}? (Leave blank if not)`,initial:""},{type:"text",name:"tailwindConfig",message:`Where is your ${f.info("tailwind.config.js")} located?`,initial:e?.tailwind.config??W},{type:"text",name:"components",message:`Configure the import alias for ${f.info("components")}:`,initial:e?.aliases.components??T},{type:"toggle",name:"rsc",message:`Are you using ${f.info("React Server Components")}?`,initial:e?.rsc??true,active:"yes",inactive:"no"}]);o.style||process.exit(1);let n=e&&e.aliases.components===o.components?e.aliases:void 0,i=_n(o.components,n);return c.parse({$schema:"https://ui.shadcn.com/schema.json",style:o.style,tailwind:{config:o.tailwindConfig,css:o.tailwindCss,baseColor:o.tailwindBaseColor,cssVariables:o.tailwindCssVariables,prefix:o.tailwindPrefix},rsc:o.rsc,tsx:o.typescript,aliases:{components:o.components,ui:i.ui,lib:i.lib,hooks:i.hooks,utils:i.utils}})}async function Ca(e,t){let r=e.style,o="neutral",n=e.tailwind.cssVariables,i=e.iconLibrary??"lucide";if(!t.defaults){let[s,c]=await Promise.all([ra(),Ea(e)]);r=(await ge([{type:c==="v4"||r?null:"select",name:"style",message:`Which ${f.info("style")} would you like to use?`,choices:s.map(m=>({title:m.name==="new-york"?"New York (Recommended)":m.label,value:m.name})),initial:0}])).style??r??"new-york";}return n=t.cssVariables,c.parse({$schema:e?.$schema,style:r,tailwind:{...e?.tailwind,baseColor:o,cssVariables:n},rsc:e?.rsc,tsx:e?.tsx,iconLibrary:i,rtl:t.rtl??e?.rtl??false,aliases:e?.aliases})}async function xa(e,t){let r=$(e);if(t===r)return t;g.warn(` You are switching from ${f.info(r)} to ${f.info(t)}.`),g.warn(` Components outside the ${f.info("ui")} directory that depend on ${f.info(r)} primitives may need manual updates.`),g.break();let{proceed:o}=await ge({type:"confirm",name:"proceed",message:"Would you like to continue?",initial:false});return o?t:r}async function Wn(e){let t={};if(!D.existsSync(e.cwd)||!D.existsSync(N__default.resolve(e.cwd,"package.json")))return t["1"]=true,{errors:t,config:null};if(!D.existsSync(N__default.resolve(e.cwd,"components.json"))){if(await h(e.cwd)){let r=await i(e.cwd);r.length>0&&(j$1("add [component]",r),process.exit(1));}return t["3"]=true,{errors:t,config:null}}try{let r=await Y(e.cwd);return {errors:t,config:r}}catch{g.break(),g.error(`An invalid ${f.info("components.json")} file was found at ${f.info(e.cwd)}.
90
+ Before you can add components, you must create a valid ${f.info("components.json")} file by running the ${f.info("init")} command.`),g.error(`Learn more at ${f.info(`${a$1}/docs/components-json`)}.`),g.break(),process.exit(1);}}async function zn(e,t,r={}){let o={files:[],dependencies:[],devDependencies:[],css:null,envVars:null,fonts:[],docs:null};if(!e.length)return o;let n=await ga(e,ba(t));if(!n)throw new Error("Failed to fetch components from registry.");r.skipFonts||(n=await Pa$1(n,t));let i=Ga$1([n]);return o.dependencies=Array.from(new Set(n.dependencies??[])),o.devDependencies=Array.from(new Set(n.devDependencies??[])),o.docs=n.docs??null,await va(n,t,o,r,i),await Ra(n,t,o,r),Ia(n,t,o),r.skipFonts||Pa(n,o),o}async function va(e,t,r,o,n){let i=e.files;if(!i?.length)return;let[s,c]=await Promise.all([Ca$1(t.resolvedPaths.cwd),t.tailwind.baseColor?ua(t.tailwind.baseColor):Promise.resolve(void 0)]),l;try{l=loadConfig(t.resolvedPaths.cwd);}catch{l={resultType:"failed"};}let m=new Project({compilerOptions:{}}),d=M(i,t,{isSrcDir:s?.isSrcDir,framework:s?.framework.name});for(let f=0;f<i.length;f++){let g=i[f];if(!g.content)continue;let u=K(g,t,{isSrcDir:s?.isSrcDir,framework:s?.framework.name,commonRoot:L(i.map(v=>v.path),g.path),fileIndex:f});if(!u)continue;t.tsx||(u=u.replace(/\.tsx?$/,v=>v===".tsx"?".jsx":".js"));let h=existsSync(u),y=N__default.relative(t.resolvedPaths.cwd,u),k=g.type==="registry:file"||g.type==="registry:item",C$1=C(u)||k?g.content:await I({filename:g.path,raw:g.content,config:t,baseColor:c,transformJsx:!t.tsx,isRemote:false,supportedFontMarkers:n},[E,F,a$2,H,c$3,g$1,J,d$1,f$1,G]),x=C(u)||k?C$1:await N$1({config:t,content:C$1,filePaths:d,project:m,projectInfo:s,resolvedPath:u,tsConfig:l}),S="create",O;h&&(O=await promises.readFile(u,"utf-8"),B(O,x)?S="skip":S="overwrite"),r.files.push({path:y,action:S,content:x,...S==="overwrite"&&{existingContent:O},type:g.type??"registry:ui"});}}async function Ra(e,t,r,o){let n=e.css&&Object.keys(e.css).length>0,i=Object.keys(e.cssVars??{}).length>0;if(!t.resolvedPaths.tailwindCss||!n&&!i)return;let s=t.resolvedPaths.tailwindCss,c=existsSync(s),l=N__default.relative(t.resolvedPaths.cwd,s),m=c?await promises.readFile(s,"utf8"):"",d=m;i&&(d=await Ia$1(d,e.cssVars,t,{overwriteCssVars:o.overwriteCssVars})),n&&(d=await La$1(d,e.css));let f=0;if(e.cssVars)for(let g of Object.values(e.cssVars))g&&(f+=Object.keys(g).length);r.css={path:l,content:d,...c&&{existingContent:m},action:c?"update":"create",cssVarsCount:f};}function Ia(e,t,r){if(!e.envVars||Object.keys(e.envVars).length===0)return;let o=N__default.join(t.resolvedPaths.cwd,".env.local"),n=existsSync(o),i=N__default.relative(t.resolvedPaths.cwd,o);r.envVars={path:i,variables:e.envVars,action:n?"update":"create"};}function Pa(e,t){if(e.fonts?.length)for(let r of e.fonts)t.fonts.push({name:r.font.family,provider:r.font.provider==="google"?"Google Fonts":r.font.provider});}var ue=5,Na=dim("\u250C"+"\u2500".repeat(46)),Ta=dim("\u2514"+"\u2500".repeat(46)),ja={create:"+",overwrite:"~",skip:"="},Oa={create:"create",overwrite:"overwrite",skip:"skip (identical)"};function it(e){return e==="create"?green(e):e==="overwrite"||e==="update"?yellow(e):dim(e)}function st(e){return `${bold("\u250C")} ${bold(`shadcn add ${e.join(", ")}`)} ${dim("(dry run)")}`}function Kn(e,t){return e===t||e.includes(t)||e.endsWith(t)}function Pe(e,t,r=o=>o){e.push(`${dim("\u2502")} ${Na}`);for(let o of t)e.push(`${dim("\u2502")} ${dim("\u2502")} ${r(o)}`);e.push(`${dim("\u2502")} ${Ta}`);}function Yn(e,t,r={}){return r.diff?typeof r.diff=="string"?Aa(e,t,r.diff):Da(e,t):r.view?typeof r.view=="string"?_a(e,t,r.view):La(e,t):Fa(e,t)}function Fa(e,t){let r=[];r.push(st(t)),r.push(dim("\u2502")),Ma(e,r),Hn("Dependencies",e.dependencies,r),Hn("Dev Dependencies",e.devDependencies,r),Va(e,r),Ba(e,r),Ua(e,r);let o=e.files.filter(i=>i.action==="overwrite").length;o>0&&(r.push(yellow(`\u26A0 ${o} ${o===1?"file":"files"} will be overwritten.`)),r.push(dim("\u2502")));let n=[];return e.files.length>0&&n.push(`${e.files.length} ${e.files.length===1?"file":"files"}`),e.dependencies.length>0&&n.push(`${e.dependencies.length} ${e.dependencies.length===1?"dep":"deps"}`),e.css?.cssVarsCount&&n.push(`${e.css.cssVarsCount} CSS vars`),n.length>0&&(r.push(`${dim("\u2502")} ${dim(n.join(", "))}`),r.push(dim("\u2502"))),r.push(`${dim("\u2502")} ${dim("Run with --diff to view changes.")}`),r.push(`${dim("\u2502")} ${dim("Run with --view to view file contents.")}`),r.push(`${dim("\u2514")} ${dim("Run without --dry-run to apply.")}`),r.join(`
91
91
  `)}function Aa(e,t,r){let o=[];o.push(st(t)),o.push(dim("\u2502"));let n=Xn(e.files,r),i=e.css&&Kn(e.css.path,r);if(n.length===0&&!i)o.push(`${dim("\u2502")} ${yellow(`No file matching "${r}" found.`)}`),o.push(dim("\u2502"));else {for(let s of n)qn(s,o);if(i&&e.css){if(o.push(`${dim("\u251C")} ${bold(e.css.path)} ${dim("(")}${it(e.css.action)}${dim(")")}`),e.css.action==="create"||!e.css.existingContent)Pe(o,e.css.content.split(`
92
92
  `),s=>green(`+${s}`));else {let s=Zn(e.css.existingContent,e.css.content,e.css.path,{fullContext:true});Pe(o,s);}o.push(dim("\u2502"));}}return o.push(`${dim("\u2514")} ${dim("Run without --dry-run to apply.")}`),o.join(`
93
93
  `)}function Da(e,t){let r=[];r.push(st(t)),r.push(dim("\u2502"));let o=e.files.slice(0,ue);if(o.length===0&&!e.css)r.push(`${dim("\u2502")} ${dim("No changes.")}`),r.push(dim("\u2502"));else {for(let s of o)qn(s,r);e.files.length>ue&&r.push(dim("\u2502"));}let n=e.files.length;return n>ue&&r.push(` ${dim(`Showing ${ue} of ${n} files. Use --diff <path> to view a specific file.`)}`),r.push(`${dim("\u2514")} ${dim("Run without --dry-run to apply.")}`),r.join(`
@@ -97,38 +97,38 @@ Before you can add components, you must create a valid ${f.info("components.json
97
97
  `),r=>green(`+${r}`));else {let r=Zn(e.existingContent,e.content,e.path);Pe(t,r);}t.push(dim("\u2502"));}function _a(e,t,r){let o=[];o.push(st(t)),o.push(dim("\u2502"));let n=Xn(e.files,r),i=e.css&&Kn(e.css.path,r);if(n.length===0&&!i)o.push(`${dim("\u2502")} ${yellow(`No file matching "${r}" found.`)}`),o.push(dim("\u2502"));else {for(let s of n){let c=s.content.split(`
98
98
  `);o.push(`${dim("\u251C")} ${bold(s.path)} ${dim("(")}${it(s.action)}${dim(")")} ${dim(`${c.length} lines`)}`),Pe(o,c),o.push(dim("\u2502"));}if(i&&e.css){let s=e.css.content.split(`
99
99
  `);o.push(`${dim("\u251C")} ${bold(e.css.path)} ${dim("(")}${it(e.css.action)}${dim(")")} ${dim(`${s.length} lines`)}`),Pe(o,s),o.push(dim("\u2502"));}}return o.push(`${dim("\u2514")} ${dim("Run without --dry-run to apply.")}`),o.join(`
100
- `)}function Ma(e,t){if(e.files.length===0)return;let r={create:0,overwrite:0,skip:0};for(let s of e.files)r[s.action]++;let o=[];r.create>0&&o.push(green(`+${r.create} new`)),r.overwrite>0&&o.push(yellow(`~${r.overwrite} overwrite`)),r.skip>0&&o.push(dim(`=${r.skip} skip`));let n=o.length>0?` ${o.join(dim(", "))}`:"";t.push(`${dim("\u251C")} ${bold("Files")} ${dim(`(${e.files.length})`)}${n}`);let i=Math.max(...e.files.map(s=>s.path.length));for(let s of e.files){let c=ja[s.action],l=Oa[s.action],m=" ".repeat(Math.max(1,i-s.path.length+2)),p=s.action==="create"?green:s.action==="overwrite"?yellow:dim,f=s.action==="skip"?dim(s.path):s.path;t.push(`${dim("\u2502")} ${p(c)} ${f}${m}${p(l)}`);}t.push(dim("\u2502"));}function Hn(e,t,r){if(t.length){r.push(`${dim("\u251C")} ${bold(e)} ${dim(`(${t.length})`)}`);for(let o of t)r.push(`${dim("\u2502")} ${green("+")} ${o}`);r.push(dim("\u2502"));}}function Va(e,t){e.css&&(t.push(`${dim("\u251C")} ${bold("CSS")}`),e.css.cssVarsCount>0?t.push(`${dim("\u2502")} ${green("+")} ${e.css.cssVarsCount} CSS variables added to ${cyan(e.css.path)}`):t.push(`${dim("\u2502")} ${green("+")} Updated ${cyan(e.css.path)}`),t.push(dim("\u2502")));}function Ba(e,t){if(!e.envVars)return;let r=Object.keys(e.envVars.variables);t.push(`${dim("\u251C")} ${bold("Environment Variables")}`);for(let o of r)t.push(`${dim("\u2502")} ${green("+")} ${o}`);t.push(dim("\u2502"));}function Ua(e,t){if(e.fonts.length){t.push(`${dim("\u251C")} ${bold("Fonts")}`);for(let r of e.fonts)t.push(`${dim("\u2502")} ${green("+")} ${r.name} ${dim(`(${r.provider})`)}`);t.push(dim("\u2502"));}}function Xn(e,t){let r=e.filter(o=>o.path===t);return r.length>0?r:e.filter(o=>o.path.includes(t)||o.path.replace(/\\/g,"/").includes(t))}function Zn(e,t,r,o={}){if(Ga(e,t))return [dim(" Formatting-only changes (spacing, quotes, semicolons).")];let n=Gn(e),i=Gn(t),s=o.fullContext?Math.max(n.split(`
100
+ `)}function Ma(e,t){if(e.files.length===0)return;let r={create:0,overwrite:0,skip:0};for(let s of e.files)r[s.action]++;let o=[];r.create>0&&o.push(green(`+${r.create} new`)),r.overwrite>0&&o.push(yellow(`~${r.overwrite} overwrite`)),r.skip>0&&o.push(dim(`=${r.skip} skip`));let n=o.length>0?` ${o.join(dim(", "))}`:"";t.push(`${dim("\u251C")} ${bold("Files")} ${dim(`(${e.files.length})`)}${n}`);let i=Math.max(...e.files.map(s=>s.path.length));for(let s of e.files){let c=ja[s.action],l=Oa[s.action],m=" ".repeat(Math.max(1,i-s.path.length+2)),d=s.action==="create"?green:s.action==="overwrite"?yellow:dim,f=s.action==="skip"?dim(s.path):s.path;t.push(`${dim("\u2502")} ${d(c)} ${f}${m}${d(l)}`);}t.push(dim("\u2502"));}function Hn(e,t,r){if(t.length){r.push(`${dim("\u251C")} ${bold(e)} ${dim(`(${t.length})`)}`);for(let o of t)r.push(`${dim("\u2502")} ${green("+")} ${o}`);r.push(dim("\u2502"));}}function Va(e,t){e.css&&(t.push(`${dim("\u251C")} ${bold("CSS")}`),e.css.cssVarsCount>0?t.push(`${dim("\u2502")} ${green("+")} ${e.css.cssVarsCount} CSS variables added to ${cyan(e.css.path)}`):t.push(`${dim("\u2502")} ${green("+")} Updated ${cyan(e.css.path)}`),t.push(dim("\u2502")));}function Ba(e,t){if(!e.envVars)return;let r=Object.keys(e.envVars.variables);t.push(`${dim("\u251C")} ${bold("Environment Variables")}`);for(let o of r)t.push(`${dim("\u2502")} ${green("+")} ${o}`);t.push(dim("\u2502"));}function Ua(e,t){if(e.fonts.length){t.push(`${dim("\u251C")} ${bold("Fonts")}`);for(let r of e.fonts)t.push(`${dim("\u2502")} ${green("+")} ${r.name} ${dim(`(${r.provider})`)}`);t.push(dim("\u2502"));}}function Xn(e,t){let r=e.filter(o=>o.path===t);return r.length>0?r:e.filter(o=>o.path.includes(t)||o.path.replace(/\\/g,"/").includes(t))}function Zn(e,t,r,o={}){if(Ga(e,t))return [dim(" Formatting-only changes (spacing, quotes, semicolons).")];let n=Gn(e),i=Gn(t),s=o.fullContext?Math.max(n.split(`
101
101
  `).length,i.split(`
102
102
  `).length):3,c=structuredPatch(`a/${r}`,`b/${r}`,n,i,"","",{context:s});if(!c.hunks.length)return [dim(" No changes.")];let l=[dim(`--- a/${r}`),dim(`+++ b/${r}`)],m=t.split(`
103
- `);for(let p of c.hunks){let{entries:f}=Wa(p,m);if(!f.some(k=>k.kind!=="context"))continue;let u=f.filter(k=>k.kind==="context").length,h=f.filter(k=>k.kind==="removed").length,y=f.filter(k=>k.kind==="added").length;l.push(cyan(`@@ -${p.oldStart},${u+h} +${p.newStart},${u+y} @@`));for(let k of f)l.push(k.formatted);}return l}function Wa(e,t){let r=[],o=e.newStart-1,n=0;for(;n<e.lines.length;){let i=e.lines[n];if(i.startsWith("-")){let s=[];for(;n<e.lines.length&&e.lines[n].startsWith("-");)s.push(e.lines[n].slice(1)),n++;for(;n<e.lines.length&&e.lines[n].startsWith("\\");)n++;let c=[];for(;n<e.lines.length&&e.lines[n].startsWith("+");)c.push(e.lines[n].slice(1)),n++;for(;n<e.lines.length&&e.lines[n].startsWith("\\");)n++;o=Ja(s,c,t,o,r);}else if(i.startsWith("+")){let s=t[o]??i.slice(1);r.push({kind:"added",formatted:green(`+${s}`)}),o++,n++;}else if(i.startsWith("\\"))n++;else {let s=t[o]??i.slice(1);r.push({kind:"context",formatted:dim(` ${s}`)}),o++,n++;}}return {entries:r,newLineIndex:o}}function Ja(e,t,r,o,n){if(Ka(e,t)){for(let l=0;l<t.length;l++){let m=r[o]??t[l];n.push({kind:"context",formatted:dim(` ${m}`)}),o++;}return o}let i=za(e),s=i.map(Ut),c=new Set;for(let l=0;l<t.length;l++){let m=r[o]??t[l],p=Ut(t[l]),f=s.findIndex((g,u)=>!c.has(u)&&g===p);if(f!==-1)c.add(f),n.push({kind:"context",formatted:dim(` ${m}`)});else {let g=s.findIndex((u,h)=>!c.has(h));if(g!==-1){c.add(g);let{oldHighlighted:u,newHighlighted:h}=Ha(i[g],m);n.push({kind:"removed",formatted:u}),n.push({kind:"added",formatted:h});}else n.push({kind:"added",formatted:green(`+${m}`)});}o++;}for(let l=0;l<i.length;l++)c.has(l)||n.push({kind:"removed",formatted:red(`-${i[l]}`)});return o}function Gn(e){return e.split(`
103
+ `);for(let d of c.hunks){let{entries:f}=Wa(d,m);if(!f.some(k=>k.kind!=="context"))continue;let u=f.filter(k=>k.kind==="context").length,h=f.filter(k=>k.kind==="removed").length,y=f.filter(k=>k.kind==="added").length;l.push(cyan(`@@ -${d.oldStart},${u+h} +${d.newStart},${u+y} @@`));for(let k of f)l.push(k.formatted);}return l}function Wa(e,t){let r=[],o=e.newStart-1,n=0;for(;n<e.lines.length;){let i=e.lines[n];if(i.startsWith("-")){let s=[];for(;n<e.lines.length&&e.lines[n].startsWith("-");)s.push(e.lines[n].slice(1)),n++;for(;n<e.lines.length&&e.lines[n].startsWith("\\");)n++;let c=[];for(;n<e.lines.length&&e.lines[n].startsWith("+");)c.push(e.lines[n].slice(1)),n++;for(;n<e.lines.length&&e.lines[n].startsWith("\\");)n++;o=Ja(s,c,t,o,r);}else if(i.startsWith("+")){let s=t[o]??i.slice(1);r.push({kind:"added",formatted:green(`+${s}`)}),o++,n++;}else if(i.startsWith("\\"))n++;else {let s=t[o]??i.slice(1);r.push({kind:"context",formatted:dim(` ${s}`)}),o++,n++;}}return {entries:r,newLineIndex:o}}function Ja(e,t,r,o,n){if(Ka(e,t)){for(let l=0;l<t.length;l++){let m=r[o]??t[l];n.push({kind:"context",formatted:dim(` ${m}`)}),o++;}return o}let i=za(e),s=i.map(Ut),c=new Set;for(let l=0;l<t.length;l++){let m=r[o]??t[l],d=Ut(t[l]),f=s.findIndex((g,u)=>!c.has(u)&&g===d);if(f!==-1)c.add(f),n.push({kind:"context",formatted:dim(` ${m}`)});else {let g=s.findIndex((u,h)=>!c.has(h));if(g!==-1){c.add(g);let{oldHighlighted:u,newHighlighted:h}=Ha(i[g],m);n.push({kind:"removed",formatted:u}),n.push({kind:"added",formatted:h});}else n.push({kind:"added",formatted:green(`+${m}`)});}o++;}for(let l=0;l<i.length;l++)c.has(l)||n.push({kind:"removed",formatted:red(`-${i[l]}`)});return o}function Gn(e){return e.split(`
104
104
  `).map(t=>{let r=t.match(/^(\s*)/)?.[1]??"",o=t.slice(r.length);return r+o.replace(/['"]/g,'"').replace(/;$/g,"")}).join(`
105
105
  `)}function za(e){let t=[];for(let r=0;r<e.length;r++){let o=e[r];for(;r+1<e.length&&o.trimEnd().endsWith(":");)r++,o=o.trimEnd()+" "+e[r].trim();t.push(o);}return t}function Ha(e,t){let r=diffWords(e,t),o="-",n="+";for(let i of r)i.added?n+=bold(green(i.value)):i.removed?o+=bold(red(i.value)):(o+=red(i.value),n+=green(i.value));return {oldHighlighted:o,newHighlighted:n}}function Ut(e){return e.replace(/\s+/g," ").trim().replace(/['"]/g,"'").replace(/;/g,"").replace(/,$/,"")}function Ga(e,t){let r=o=>o.split(`
106
106
  `).map(Ut).filter(n=>n.length>0).join(" ");return r(e)===r(t)}function Ka(e,t){let r=o=>o.map(Ut).filter(n=>n.length>0).join(" ");return r(e)===r(t)}async function ei(e,t){let r=N__default.join(t.resolvedPaths.cwd,"app/page.tsx");if(!(await $e__default.stat(r)).isFile())return;let[o]=await ma$1([e],{config:t});if(!o?.meta?.importSpecifier||!o?.meta?.moduleSpecifier)return;let n=`import { ${o?.meta?.importSpecifier} } from "${o.meta.moduleSpecifier}"
107
107
 
108
108
  export default function Page() {
109
109
  return <${o?.meta?.importSpecifier} />
110
- }`;await $e__default.writeFile(r,n,"utf8");}var Za=z.object({components:z.array(z.string()).optional(),yes:z.boolean(),overwrite:z.boolean(),cwd:z.string(),all:z.boolean(),path:z.string().optional(),silent:z.boolean(),dryRun:z.boolean(),diff:z.union([z.string(),z.literal(true)]).optional(),view:z.union([z.string(),z.literal(true)]).optional()}),ri=new Command().name("add").description("add a component to your project").argument("[components...]","item addresses to add").option("-y, --yes","skip confirmation prompt.",false).option("-o, --overwrite","overwrite existing files.",false).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-a, --all","add all available components",false).option("-p, --path <path>","the path to add the component to.").option("-s, --silent","mute output.",false).option("--dry-run","preview changes without writing files.",false).option("--diff [path]","show diff for a file.").option("--view [path]","show file contents.").action(async(e,t)=>{try{let r=Za.parse({components:e,...t,cwd:N__default.resolve(t.cwd)});await Sa(r.cwd);let o=r.dryRun||r.diff||r.view,n=await Y(r.cwd),i=!!n;n||(n=aa({style:"new-york",resolvedPaths:{cwd:r.cwd}}));let s=!1;if(e.length>0){let{config:C,newRegistries:x}=await U(e,n,{silent:r.silent,writeFile:!1});n=C,s=x.length>0;}let c=await Ca$1(r.cwd),{base:l}=c$2(n.style);i&&c?.tailwindVersion==="v4"&&Wt(e,l);let m,p=!0;if(e.length>0&&(i||!d.some(C=>C.name===e[0]))){let[C]=await ma$1([e[0]],{config:n});if(m=C?.type,p=m!=="registry:theme"&&m!=="registry:style"&&m!=="registry:base",P(C)&&!o){await Ra$1(e,n,r);return}if(!r.yes&&!o&&(m==="registry:style"||m==="registry:theme")){g.break();let{confirm:x}=await ge({type:"confirm",name:"confirm",message:f.warn(`You are about to install a new ${m.replace("registry:","")}.
110
+ }`;await $e__default.writeFile(r,n,"utf8");}var Za=z.object({components:z.array(z.string()).optional(),yes:z.boolean(),overwrite:z.boolean(),cwd:z.string(),all:z.boolean(),path:z.string().optional(),silent:z.boolean(),dryRun:z.boolean(),diff:z.union([z.string(),z.literal(true)]).optional(),view:z.union([z.string(),z.literal(true)]).optional()}),ri=new Command().name("add").description("add a component to your project").argument("[components...]","item addresses to add").option("-y, --yes","skip confirmation prompt.",false).option("-o, --overwrite","overwrite existing files.",false).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-a, --all","add all available components",false).option("-p, --path <path>","the path to add the component to.").option("-s, --silent","mute output.",false).option("--dry-run","preview changes without writing files.",false).option("--diff [path]","show diff for a file.").option("--view [path]","show file contents.").action(async(e,t)=>{try{let r=Za.parse({components:e,...t,cwd:N__default.resolve(t.cwd)});await Sa(r.cwd);let o=r.dryRun||r.diff||r.view,n=await Y(r.cwd),i=!!n;n||(n=aa({style:"new-york",resolvedPaths:{cwd:r.cwd}}));let s=!1;if(e.length>0){let{config:C,newRegistries:x}=await U(e,n,{silent:r.silent,writeFile:!1});n=C,s=x.length>0;}let c=await Ca$1(r.cwd),{base:l}=c$2(n.style);i&&c?.tailwindVersion==="v4"&&Wt(e,l);let m,d$1=!0;if(e.length>0&&(i||!d.some(C=>C.name===e[0]))){let[C]=await ma$1([e[0]],{config:n});if(m=C?.type,d$1=m!=="registry:theme"&&m!=="registry:style"&&m!=="registry:base",P(C)&&!o){await Ra$1(e,n,r);return}if(!r.yes&&!o&&(m==="registry:style"||m==="registry:theme")){g.break();let{confirm:x}=await ge({type:"confirm",name:"confirm",message:f.warn(`You are about to install a new ${m.replace("registry:","")}.
111
111
  Existing CSS variables and components will be overwritten. Continue?`)});x||(g.break(),g.log("Installation cancelled."),g.break(),process.exit(1));}}r.components?.length||(r.components=await Qa(r,n.style)),!e.length&&c?.tailwindVersion==="v4"&&Wt(r.components??[],l);let{errors:g$1,config:u}=await Wn(r),h=!1;if(g$1["3"]){let{proceed:C}=await ge({type:"confirm",name:"proceed",message:`You need to create a ${f.info("components.json")} file to add components. Proceed?`,initial:!0});C||(g.break(),process.exit(1));let x=Ue(c?.framework.name),S=await Be();Wt(r.components??[],S);let{url:O}=await tt({rtl:!1,base:S,template:x}),{registryBaseConfig:v,installStyleIndex:F,url:G}=await Se(O,r.cwd);u=await He({cwd:r.cwd,yes:!0,force:!0,defaults:!1,skipPreflight:!1,silent:r.silent&&!s,isNewProject:!1,cssVariables:!0,rtl:!1,installStyleIndex:F,components:[G,...r.components??[]],registryBaseConfig:v}),h=!0;}let y=!1;if(g$1["1"]){let C=await Be();Wt(r.components??[],C);let{projectPath:x,template:S}=await Vt({cwd:r.cwd,force:r.overwrite,components:r.components});x||(g.break(),process.exit(1)),r.cwd=x;let{url:O}=await tt({rtl:!1,base:C,template:S}),{registryBaseConfig:v,installStyleIndex:F,url:G}=await Se(O,r.cwd);u=await He({cwd:r.cwd,yes:!0,force:!0,defaults:!1,skipPreflight:!0,silent:!s&&r.silent,isNewProject:!0,cssVariables:!0,rtl:!1,installStyleIndex:F,components:[G,...r.components??[]],registryBaseConfig:v}),h=!0,y=r.components?.length===1&&!!r.components[0].match(/\/chat\/b\//);}if(!u)throw new Error(`Failed to read config at ${f.info(r.cwd)}.`);let{config:k}=await U(r.components,u,{silent:r.silent||s,writeFile:!o});if(u=k,o){let C=D$1("Resolving items.",{silent:r.silent}).start(),x=await zn(r.components,u,{overwrite:r.overwrite});C.stop(),g.log(Yn(x,r.components,{diff:r.diff,view:r.view}));return}h||await Ra$1(r.components,u,r),y&&await ei(r.components[0],u);}catch(r){g.break(),ka$1(r);}finally{S();}});async function Qa(e,t){let r=await qa();if(!r)return g.break(),ka$1(new Error("Failed to fetch registry index.")),[];let{base:o}=c$2(t);if(e.all)return r.map(s=>s.name).filter(s=>ti(s,o));if(e.components?.length)return e.components;let{components:n}=await ge({type:"multiselect",name:"components",message:"Which components would you like to add?",hint:"Space to select. A to toggle all. Enter to submit.",instructions:false,choices:r.filter(s=>s.type==="registry:ui"&&ti(s.name,o)).map(s=>({title:s.name,value:s.name,selected:e.all?true:e.components?.includes(s.name)}))});n?.length||(g.warn("No components selected. Exiting."),g.info(""),process.exit(1));let i=z.array(z.string()).safeParse(n);return i.success?i.data:(g.error(""),ka$1(new Error("Something went wrong. Please try again.")),[])}function Wt(e,t){let r=d.filter(o=>e.includes(o.name)&&oi(o.name,t));r.length&&(g.break(),r.forEach(o=>{g.warn(f.warn(o.message));}),g.break(),process.exit(1));}function oi(e,t){let r=d.find(o=>o.name===e);return !!r&&(!r.availableIn||!t||!r.availableIn.includes(t))}function ti(e$1,t){if(oi(e$1,t))return false;let r=e.find(o=>o.name===e$1);return !r||!t||!r.hiddenIn.includes(t)}async function ni(e){let t={};if(!D.existsSync(e.cwd)||!D.existsSync(N__default.resolve(e.cwd,"package.json")))return t["1"]=true,{errors:t,config:null};if(!D.existsSync(N__default.resolve(e.cwd,"components.json"))){if(await h(e.cwd)){let r=await i(e.cwd),o=[];for(let n of r){let i=await Ca$1(N__default.resolve(e.cwd,n.name));i?.framework&&i.framework.name!=="manual"&&o.push(n);}o.length>0&&(j$1("apply --preset <preset>",o,{cwdFlag:"-c"}),process.exit(1));}return t["3"]=true,{errors:t,config:null}}try{let r=await Y(e.cwd);return {errors:t,config:r}}catch{g.break(),g.error(`An invalid ${f.info("components.json")} file was found at ${f.info(e.cwd)}.
112
- Before you can apply a preset, you must create a valid ${f.info("components.json")} file by running the ${f.info("init")} command.`),g.error(`Learn more at ${f.info(`${a$1}/docs/components-json`)}.`),g.break(),process.exit(1);}}var rc=z.object({cwd:z.string(),positionalPreset:z.string().optional(),preset:z.string().optional(),only:z.union([z.boolean(),z.string()]).optional(),yes:z.boolean(),silent:z.boolean()}),ai=["theme","font"],Ke=class extends Error{constructor(t){super(t),this.name="ApplyOnlyError";}},Jt=class extends Error{constructor(t){super(t),this.name="ApplyWorkspaceSyncError";}},ci=new Command().name("apply").description("apply a preset to an existing project").argument("[preset]","the preset to apply").option("--preset <preset>","preset configuration to apply").option("--only [parts]","apply only parts of a preset: theme, font").option("-y, --yes","skip confirmation prompt.",false).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-s, --silent","mute output.",false).action(async(e,t)=>{try{let r=rc.parse({...t,cwd:N__default.resolve(t.cwd),positionalPreset:e}),o=oc(r),n=ii(r.only);sc({preset:o,only:n});let i=await ni(r);i.errors["1"]&&(g.break(),g.error(`The ${f.info("apply")} command only works in an existing project.`),g.error(`Run ${f.info(si(o))} first.`),g.break(),process.exit(1)),i.errors["3"]&&(g.break(),g.error(`No ${f.info("components.json")} found at ${f.info(r.cwd)}.`),g.error(`Run ${f.info(si(o))} first.`),g.break(),process.exit(1));let s=i.config;s||process.exit(1);let c=s.rtl??!1,l=await lc(r.cwd);if(!o){let y=xr({command:"init",template:l,base:$(s.style),rtl:c});await br({createUrl:y,followUp:`Then run ${f.info("shadcn apply --preset <preset>")} with the preset code or preset URL from ui.shadcn.com.`,prompt:!r.yes}),process.exit(0);}cc(o);let m=n??ii(nc(o)),p=!m,f$1=p?await Fa$1(r.cwd):[];if(!r.yes){if(g.break(),m?g.warn(f.warn("Applying the selected preset parts will update your project configuration and styles.")):g.warn(f.warn("Applying a new preset will overwrite existing UI components, fonts, and CSS variables.")),g.warn("Commit or stash your changes before continuing so you can easily go back."),p)if(g.break(),g.log(" The following components will be re-installed:"),f$1.length)for(let k=0;k<f$1.length;k+=8)g.log(` - ${f$1.slice(k,k+8).join(", ")}`);else g.log(" - No installed UI components were detected.");g.break();let{proceed:y}=await ge({type:"confirm",name:"proceed",message:"Would you like to continue?",initial:!1});y||(g.break(),process.exit(1));}await Sa(r.cwd);let g$1=$(s.style),u=pc(o,g$1,{template:l,rtl:c,only:m?.join(",")}),h=await Vn(N__default.resolve(r.cwd,"components.json"),async()=>{let{registryBaseConfig:y,installStyleIndex:k,url:C}=await Se(u,r.cwd,{registries:s.registries}),x=ac({registryBaseConfig:y,existingConfig:s,only:m});return await He({cwd:r.cwd,yes:!0,force:!1,reinstall:p,defaults:!1,silent:r.silent,isNewProject:!1,cssVariables:!0,installStyleIndex:k,registryBaseConfig:x,existingConfig:s,components:[C,...f$1]})});await mc(h,{only:m}),g.break(),g.log("Preset applied successfully."),g.break();}catch(r){if(r instanceof Ke){for(let o of r.message.split(`
112
+ Before you can apply a preset, you must create a valid ${f.info("components.json")} file by running the ${f.info("init")} command.`),g.error(`Learn more at ${f.info(`${a$1}/docs/components-json`)}.`),g.break(),process.exit(1);}}var rc=z.object({cwd:z.string(),positionalPreset:z.string().optional(),preset:z.string().optional(),only:z.union([z.boolean(),z.string()]).optional(),yes:z.boolean(),silent:z.boolean()}),ai=["theme","font"],Ke=class extends Error{constructor(t){super(t),this.name="ApplyOnlyError";}},Jt=class extends Error{constructor(t){super(t),this.name="ApplyWorkspaceSyncError";}},ci=new Command().name("apply").description("apply a preset to an existing project").argument("[preset]","the preset to apply").option("--preset <preset>","preset configuration to apply").option("--only [parts]","apply only parts of a preset: theme, font").option("-y, --yes","skip confirmation prompt.",false).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-s, --silent","mute output.",false).action(async(e,t)=>{try{let r=rc.parse({...t,cwd:N__default.resolve(t.cwd),positionalPreset:e}),o=oc(r),n=ii(r.only);sc({preset:o,only:n});let i=await ni(r);i.errors["1"]&&(g.break(),g.error(`The ${f.info("apply")} command only works in an existing project.`),g.error(`Run ${f.info(si(o))} first.`),g.break(),process.exit(1)),i.errors["3"]&&(g.break(),g.error(`No ${f.info("components.json")} found at ${f.info(r.cwd)}.`),g.error(`Run ${f.info(si(o))} first.`),g.break(),process.exit(1));let s=i.config;s||process.exit(1);let c=s.rtl??!1,l=await lc(r.cwd);if(!o){let y=xr({command:"init",template:l,base:$(s.style),rtl:c});await br({createUrl:y,followUp:`Then run ${f.info("shadcn apply --preset <preset>")} with the preset code or preset URL from ui.shadcn.com.`,prompt:!r.yes}),process.exit(0);}cc(o);let m=n??ii(nc(o)),d=!m,f$1=d?await Fa$1(r.cwd):[];if(!r.yes){if(g.break(),m?g.warn(f.warn("Applying the selected preset parts will update your project configuration and styles.")):g.warn(f.warn("Applying a new preset will overwrite existing UI components, fonts, and CSS variables.")),g.warn("Commit or stash your changes before continuing so you can easily go back."),d)if(g.break(),g.log(" The following components will be re-installed:"),f$1.length)for(let k=0;k<f$1.length;k+=8)g.log(` - ${f$1.slice(k,k+8).join(", ")}`);else g.log(" - No installed UI components were detected.");g.break();let{proceed:y}=await ge({type:"confirm",name:"proceed",message:"Would you like to continue?",initial:!1});y||(g.break(),process.exit(1));}await Sa(r.cwd);let g$1=$(s.style),u=pc(o,g$1,{template:l,rtl:c,only:m?.join(",")}),h=await Vn(N__default.resolve(r.cwd,"components.json"),async()=>{let{registryBaseConfig:y,installStyleIndex:k,url:C}=await Se(u,r.cwd,{registries:s.registries}),x=ac({registryBaseConfig:y,existingConfig:s,only:m});return await He({cwd:r.cwd,yes:!0,force:!1,reinstall:d,defaults:!1,silent:r.silent,isNewProject:!1,cssVariables:!0,installStyleIndex:k,registryBaseConfig:x,existingConfig:s,components:[C,...f$1]})});await mc(h,{only:m}),g.break(),g.log("Preset applied successfully."),g.break();}catch(r){if(r instanceof Ke){for(let o of r.message.split(`
113
113
  `))g.error(o);g.break(),process.exit(1);}r instanceof We&&(g.error(`Could not back up ${f.info("components.json")}. Aborting.`),g.break(),process.exit(1)),r instanceof Jt&&(g.error(r.message),g.break(),process.exit(1)),g.break(),ka$1(r);}finally{S();}});function oc(e){let t=e.positionalPreset?.trim(),r=e.preset?.trim();return t&&r&&t!==r&&(g.error(`Received two different preset values. Use either the positional preset or ${f.info("--preset")}, or pass the same value to both.`),g.break(),process.exit(1)),r??t}function nc(e){if(!O(e))return;let t=new URL(e);if(t.pathname==="/init")return t.searchParams.get("only")??void 0}function ii(e){if(!(e===void 0||e===false)){if(e===true)throw new Ke(["Missing value for --only.",`Use one or more of: ${ai.join(", ")}.`,"Example: shadcn apply <preset> --only theme,font."].join(`
114
114
  `));return ic(e)}}function ic(e){let t={theme:"theme",font:"font",fonts:"font"},r=e.split(",").map(n=>n.trim().toLowerCase()).filter(Boolean),o=r.filter(n=>!t[n]);if(!r.length||o.length)throw new Ke([`Invalid value for --only: ${e}.`,`Use one or more of: ${ai.join(", ")}.`,"Example: shadcn apply <preset> --only theme,font."].join(`
115
115
  `));return Array.from(new Set(r.map(n=>t[n])))}function sc(e){if(!(!e.only||e.preset))throw new Ke(["Missing preset for --only.","Use: shadcn apply <preset> --only theme,font."].join(`
116
116
  `))}function ac(e){if(!e.only||e.only.includes("theme"))return e.registryBaseConfig;let t=typeof e.existingConfig.tailwind=="object"&&e.existingConfig.tailwind!==null?e.existingConfig.tailwind:{},r=typeof e.registryBaseConfig?.tailwind=="object"&&e.registryBaseConfig.tailwind!==null?e.registryBaseConfig.tailwind:{},o={...e.registryBaseConfig,tailwind:{...t,...r}};return e.existingConfig.menuColor&&(o.menuColor=e.existingConfig.menuColor),e.existingConfig.menuAccent&&(o.menuAccent=e.existingConfig.menuAccent),o}function cc(e){if(O(e)||t(e))return;let t$1=Object.keys(q);t$1.includes(e)||(g.error(`Invalid preset: ${f.info(e)}.
117
117
  Use one of the available presets: ${t$1.join(", ")}
118
- or build your own at ${f.info(`${a$1}/create`)}`),g.break(),process.exit(1));}async function lc(e){let t=await Ca$1(e);return Ue(t?.framework.name)}async function mc(e,t){if(t?.only&&!t.only.includes("theme"))return;let r=await fc(e);if(!r.length)return;let o={style:e.style,tailwind:{baseColor:e.tailwind.baseColor,cssVariables:e.tailwind.cssVariables},...e.iconLibrary?{iconLibrary:e.iconLibrary}:{},...e.rtl!==void 0?{rtl:e.rtl}:{},...e.menuColor?{menuColor:e.menuColor}:{},...e.menuAccent?{menuAccent:e.menuAccent}:{}},n=[];for(let i of r){let s=N__default.resolve(i.resolvedPaths.cwd,"components.json");await D.pathExists(s)&&n.push({configPath:s,existingConfig:await D.readJson(s)});}try{for(let i of n)if(!rt(i.configPath))throw new We(i.configPath);for(let i of n)await D.writeJson(i.configPath,{...i.existingConfig,...o,tailwind:{...i.existingConfig.tailwind,...o.tailwind}},{spaces:2});for(let i of n)ot(i.configPath);}catch(i){for(let s of [...n].reverse())Je(s.configPath);throw new Jt(`Failed to sync linked workspace configs.${i instanceof Error?` ${i.message}`:""}`)}}async function fc(e){let t=await _(e);if(!t)return [];let r=new Map;for(let o of Object.values(t))o.resolvedPaths.cwd!==e.resolvedPaths.cwd&&r.set(o.resolvedPaths.cwd,o);return Array.from(r.values()).sort((o,n)=>o.resolvedPaths.cwd.localeCompare(n.resolvedPaths.cwd))}function pc(e,t$1,r={}){if(O(e)){let n=new URL(e);return n.pathname==="/init"&&e.startsWith(a$1)&&n.searchParams.set("track","1"),n.searchParams.set("base",t$1),n.searchParams.set("rtl",String(r.rtl??false)),r.only&&n.searchParams.set("only",r.only),n.toString()}if(t(e)){let n=s(e);return n||(g.error(`Invalid preset code: ${f.info(e)}`),g.break(),process.exit(1)),pe({...n,base:t$1,rtl:r.rtl??false},{preset:e,template:r.template,only:r.only})}let o=q[e];return pe({...o,base:t$1,rtl:r.rtl??o.rtl},{template:r.template,only:r.only})}function dc(e){return /[^A-Za-z0-9_./:-]/.test(e)?JSON.stringify(e):e}function si(e){return e?`shadcn init --preset ${dc(e)}`:"shadcn init"}async function fi(e){let t={},r={cwd:e.cwd,registryFile:N__default.resolve(e.cwd,e.registryFile),outputDir:N__default.resolve(e.cwd,e.outputDir)};return D.existsSync(r.registryFile)||(t["13"]=true),await D.mkdir(r.outputDir,{recursive:true}),Object.keys(t).length>0&&(t["13"]&&(g.break(),g.error(`The path ${f.info(r.registryFile)} does not exist.`)),g.break(),process.exit(1)),{errors:t,resolvePaths:r}}var hc=z.object({cwd:z.string(),registryFile:z.string(),outputDir:z.string()}),pi=new Command().name("build").description("build components for a shadcn registry").argument("[registry]","path to registry.json file","./registry.json").option("-o, --output <path>","destination directory for json files","./public/r").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{try{let r=hc.parse({cwd:N.resolve(t.cwd),registryFile:e,outputDir:t.output}),{resolvePaths:o}=await fi(r),n=await Va$1(o.registryFile,{cwd:o.cwd}),i=n.registry,s=n.usesInclude?N.dirname(o.registryFile):o.cwd,c=Wa$1(n,s,o.cwd),l=D$1("Building registry...");for(let m of i.items){l.start(`Building ${m.name}...`);let p=await Xa(m,n,s,o.cwd),f=N.resolve(o.outputDir,`${p.name}.json`);await $e.mkdir(N.dirname(f),{recursive:!0}),await $e.writeFile(f,JSON.stringify(p,null,2));}n.usesInclude?await $e.writeFile(N.resolve(o.outputDir,"registry.json"),JSON.stringify(c,null,2)):await $e.copyFile(o.registryFile,N.resolve(o.outputDir,"registry.json")),l.succeed("Building registry.");}catch(r){g.break(),ka$1(r);}});var Cc=z.object({component:z.string().optional(),yes:z.boolean(),cwd:z.string(),path:z.string().optional()}),gi=new Command().name("diff").description("[DEPRECATED] Use `add [component] --diff` instead.").argument("[component]","the component name").option("-y, --yes","skip confirmation prompt.",false).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{try{let r=Cc.parse({component:e,...t}),o=N__default.resolve(r.cwd);existsSync(o)||(g.error(`The path ${o} does not exist. Please try again.`),process.exit(1));let n=await Y(o);if(!n){if(await h(o)){let l=await i(o);l.length>0&&(j$1("diff [component]",l),process.exit(1));}g.warn(`Configuration is missing. Please run ${f.success("init")} to create a components.json file.`),process.exit(1);}let i$1=await qa();if(i$1||(ka$1(new Error("Failed to fetch registry index.")),process.exit(1)),!r.component){let l=n.resolvedPaths.components,m=i$1.filter(f=>{for(let g of f.files??[]){let u=N__default.resolve(l,typeof g=="string"?g:g.path);if(existsSync(u))return !0}return !1}),p=[];for(let f of m){let g=await di(f,n);g.length&&p.push({name:f.name,changes:g});}p.length||(g.info("No updates found."),process.exit(0)),g.info("The following components have updates available:");for(let f of p){g.info(`- ${f.name}`);for(let g$1 of f.changes)g.info(` - ${g$1.filePath}`);}g.break(),g.info(`Run ${f.success("diff <component>")} to see the changes.`),process.exit(0);}let s=i$1.find(l=>l.name===r.component);s||(g.error(`The component ${f.success(r.component)} does not exist.`),process.exit(1));let c=await di(s,n);c.length||(g.info(`No updates found for ${r.component}.`),process.exit(0));for(let l of c)g.info(`- ${l.filePath}`),await xc(l.patch),g.info("");}catch(r){ka$1(r);}});async function di(e,t){let r=await wa$1(t.style,[e]),o=await ua(t.tailwind.baseColor),n=Ga$1(r);if(!r)return [];let i=[];for(let s of r){let c=await xa$1(t,s);if(c)for(let l of s.files??[]){let m=N__default.resolve(c,typeof l=="string"?l:l.path);if(!existsSync(m))continue;let p=await promises.readFile(m,"utf8");if(typeof l=="string"||!l.content)continue;let f=await I({filename:l.path,raw:l.content,config:t,baseColor:o,supportedFontMarkers:n},[E,F,a$2,H,c$3,g$1,d$1,f$1,G]),g=diffLines(f,p);g.length>1&&i.push({filePath:m,patch:g});}}return i}async function xc(e){e.forEach(t=>{if(t)return t.added?process.stdout.write(f.success(t.value)):t.removed?process.stdout.write(f.error(t.value)):process.stdout.write(t.value)});}var ui="https://ui.shadcn.com",hi=new Command().name("docs").description("get docs, api references and usage examples for components").argument("<components...>","component names").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-b, --base <base>","the base to use: base, radix, or aria. defaults to project base.").option("--json","output as JSON.",false).action(async(e,t)=>{try{let r=N__default.resolve(t.cwd),o=await Y(r),n=vc(t.base,o?.style),i=await qa();i||(g.error("Failed to fetch the registry index."),process.exit(1));let s=[];for(let l of e){let m=i.find(f=>f.name===l);m||(g.error(`Component ${f.info(l)} not found in the shadcn registry.`),process.exit(1));let p=m.meta?.links?.[n];if(!p||Object.keys(p).length===0){g.warn(`No documentation links available for ${f.info(l)}.`);continue}s.push({component:l,base:n,links:Rc(p)});}if(t.json){console.log(JSON.stringify({base:n,results:s},null,2));return}let c=Math.max(...s.flatMap(l=>Object.keys(l.links).map(m=>m.length)));for(let{component:l,links:m}of s){g.log(f.info(l));for(let[p,f]of Object.entries(m))g.log(` - ${p.padEnd(c+2)}${f}`);g.break();}}catch(r){ka$1(r);}});function vc(e,t){let r=e??$(t);if(!b(r))throw new Error(`Invalid base: ${String(r)}. Expected one of: ${a.join(", ")}.`);return r}function Rc(e){return Object.fromEntries(Object.entries(e).map(([t,r])=>[t,r.startsWith(ui)?`${a$1}${r.slice(ui.length)}`:r]))}var yi=/@import\s+["']shadcn\/tailwind\.css["'];?\s*\n?/,$c=z.object({cwd:z.string(),yes:z.boolean(),silent:z.boolean()}),wi=new Command().name("eject").description("inline shadcn/tailwind.css and remove the shadcn dependency").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-y, --yes","skip confirmation prompt.",false).option("-s, --silent","mute output.",false).action(async e=>{try{let t=$c.parse({cwd:N__default.resolve(e.cwd),yes:e.yes,silent:e.silent});await Ec(t);}catch(t){ka$1(t);}});async function Ec(e){if(!D.existsSync(N__default.resolve(e.cwd,"components.json"))){if(await h(e.cwd)){let p=await i(e.cwd);p.length>0&&(j$1("eject",p),process.exit(1));}g.break(),g.error(`No ${f.info("components.json")} found. Run ${f.info("shadcn init")} first.`),g.error(`Learn more at ${f.info(`${a$1}/docs/components-json`)}.`),g.break(),process.exit(1);}let t=await Y(e.cwd);t?.resolvedPaths.tailwindCss||(g.break(),g.error("Could not resolve the Tailwind CSS file from components.json."),g.break(),process.exit(1));let r=t.resolvedPaths.tailwindCss,o=N__default.relative(e.cwd,r),n=await promises.readFile(r,"utf8");yi.test(n)||(g.break(),g.error(`Could not find ${f.info('@import "shadcn/tailwind.css"')} in ${f.info(o)}.`),g.error("Nothing to eject."),g.break(),process.exit(1));let i$1=A(e.cwd,false),s=Nc(i$1),c=jc(e.cwd),l=await promises.readFile(c,"utf8");if(e.silent||(g.break(),g.warn("This action is not reversible. Future shadcn CLI updates to tailwind.css will not apply automatically."),g.break()),!e.yes){g.log("This will:"),g.log(` - Inline ${f.info("shadcn/tailwind.css")} into ${f.info(o)}`),g.log(` - Remove the ${f.info("shadcn")} dependency`),g.break();let{proceed:p}=await ge({type:"confirm",name:"proceed",message:"Proceed?",initial:false});p||process.exit(0);}let m=D$1(`Inlining ${f.info("shadcn/tailwind.css")}.`,{silent:e.silent})?.start();if(n=n.replace(yi,()=>`/* ejected from shadcn@${s} */
118
+ or build your own at ${f.info(`${a$1}/create`)}`),g.break(),process.exit(1));}async function lc(e){let t=await Ca$1(e);return Ue(t?.framework.name)}async function mc(e,t){if(t?.only&&!t.only.includes("theme"))return;let r=await fc(e);if(!r.length)return;let o={style:e.style,tailwind:{baseColor:e.tailwind.baseColor,cssVariables:e.tailwind.cssVariables},...e.iconLibrary?{iconLibrary:e.iconLibrary}:{},...e.rtl!==void 0?{rtl:e.rtl}:{},...e.menuColor?{menuColor:e.menuColor}:{},...e.menuAccent?{menuAccent:e.menuAccent}:{}},n=[];for(let i of r){let s=N__default.resolve(i.resolvedPaths.cwd,"components.json");await D.pathExists(s)&&n.push({configPath:s,existingConfig:await D.readJson(s)});}try{for(let i of n)if(!rt(i.configPath))throw new We(i.configPath);for(let i of n)await D.writeJson(i.configPath,{...i.existingConfig,...o,tailwind:{...i.existingConfig.tailwind,...o.tailwind}},{spaces:2});for(let i of n)ot(i.configPath);}catch(i){for(let s of [...n].reverse())Je(s.configPath);throw new Jt(`Failed to sync linked workspace configs.${i instanceof Error?` ${i.message}`:""}`)}}async function fc(e){let t=await _(e);if(!t)return [];let r=new Map;for(let o of Object.values(t))o.resolvedPaths.cwd!==e.resolvedPaths.cwd&&r.set(o.resolvedPaths.cwd,o);return Array.from(r.values()).sort((o,n)=>o.resolvedPaths.cwd.localeCompare(n.resolvedPaths.cwd))}function pc(e,t$1,r={}){if(O(e)){let n=new URL(e);return n.pathname==="/init"&&e.startsWith(a$1)&&n.searchParams.set("track","1"),n.searchParams.set("base",t$1),n.searchParams.set("rtl",String(r.rtl??false)),r.only&&n.searchParams.set("only",r.only),n.toString()}if(t(e)){let n=s(e);return n||(g.error(`Invalid preset code: ${f.info(e)}`),g.break(),process.exit(1)),pe({...n,base:t$1,rtl:r.rtl??false},{preset:e,template:r.template,only:r.only})}let o=q[e];return pe({...o,base:t$1,rtl:r.rtl??o.rtl},{template:r.template,only:r.only})}function dc(e){return /[^A-Za-z0-9_./:-]/.test(e)?JSON.stringify(e):e}function si(e){return e?`shadcn init --preset ${dc(e)}`:"shadcn init"}async function fi(e){let t={},r={cwd:e.cwd,registryFile:N__default.resolve(e.cwd,e.registryFile),outputDir:N__default.resolve(e.cwd,e.outputDir)};return D.existsSync(r.registryFile)||(t["13"]=true),await D.mkdir(r.outputDir,{recursive:true}),Object.keys(t).length>0&&(t["13"]&&(g.break(),g.error(`The path ${f.info(r.registryFile)} does not exist.`)),g.break(),process.exit(1)),{errors:t,resolvePaths:r}}var hc=z.object({cwd:z.string(),registryFile:z.string(),outputDir:z.string()}),pi=new Command().name("build").description("build components for a shadcn registry").argument("[registry]","path to registry.json file","./registry.json").option("-o, --output <path>","destination directory for json files","./public/r").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{try{let r=hc.parse({cwd:N.resolve(t.cwd),registryFile:e,outputDir:t.output}),{resolvePaths:o}=await fi(r),n=await Va$1(o.registryFile,{cwd:o.cwd}),i=n.registry,s=n.usesInclude?N.dirname(o.registryFile):o.cwd,c=Wa$1(n,s,o.cwd),l=D$1("Building registry...");for(let m of i.items){l.start(`Building ${m.name}...`);let d=await Xa(m,n,s,o.cwd),f=N.resolve(o.outputDir,`${d.name}.json`);await $e.mkdir(N.dirname(f),{recursive:!0}),await $e.writeFile(f,JSON.stringify(d,null,2));}n.usesInclude?await $e.writeFile(N.resolve(o.outputDir,"registry.json"),JSON.stringify(c,null,2)):await $e.copyFile(o.registryFile,N.resolve(o.outputDir,"registry.json")),l.succeed("Building registry.");}catch(r){g.break(),ka$1(r);}});var Cc=z.object({component:z.string().optional(),yes:z.boolean(),cwd:z.string(),path:z.string().optional()}),gi=new Command().name("diff").description("[DEPRECATED] Use `add [component] --diff` instead.").argument("[component]","the component name").option("-y, --yes","skip confirmation prompt.",false).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{try{let r=Cc.parse({component:e,...t}),o=N__default.resolve(r.cwd);existsSync(o)||(g.error(`The path ${o} does not exist. Please try again.`),process.exit(1));let n=await Y(o);if(!n){if(await h(o)){let l=await i(o);l.length>0&&(j$1("diff [component]",l),process.exit(1));}g.warn(`Configuration is missing. Please run ${f.success("init")} to create a components.json file.`),process.exit(1);}let i$1=await qa();if(i$1||(ka$1(new Error("Failed to fetch registry index.")),process.exit(1)),!r.component){let l=n.resolvedPaths.components,m=i$1.filter(f=>{for(let g of f.files??[]){let u=N__default.resolve(l,typeof g=="string"?g:g.path);if(existsSync(u))return !0}return !1}),d=[];for(let f of m){let g=await di(f,n);g.length&&d.push({name:f.name,changes:g});}d.length||(g.info("No updates found."),process.exit(0)),g.info("The following components have updates available:");for(let f of d){g.info(`- ${f.name}`);for(let g$1 of f.changes)g.info(` - ${g$1.filePath}`);}g.break(),g.info(`Run ${f.success("diff <component>")} to see the changes.`),process.exit(0);}let s=i$1.find(l=>l.name===r.component);s||(g.error(`The component ${f.success(r.component)} does not exist.`),process.exit(1));let c=await di(s,n);c.length||(g.info(`No updates found for ${r.component}.`),process.exit(0));for(let l of c)g.info(`- ${l.filePath}`),await xc(l.patch),g.info("");}catch(r){ka$1(r);}});async function di(e,t){let r=await wa$1(t.style,[e]),o=await ua(t.tailwind.baseColor),n=Ga$1(r);if(!r)return [];let i=[];for(let s of r){let c=await xa$1(t,s);if(c)for(let l of s.files??[]){let m=N__default.resolve(c,typeof l=="string"?l:l.path);if(!existsSync(m))continue;let d=await promises.readFile(m,"utf8");if(typeof l=="string"||!l.content)continue;let f=await I({filename:l.path,raw:l.content,config:t,baseColor:o,supportedFontMarkers:n},[E,F,a$2,H,c$3,g$1,d$1,f$1,G]),g=diffLines(f,d);g.length>1&&i.push({filePath:m,patch:g});}}return i}async function xc(e){e.forEach(t=>{if(t)return t.added?process.stdout.write(f.success(t.value)):t.removed?process.stdout.write(f.error(t.value)):process.stdout.write(t.value)});}var ui="https://ui.shadcn.com",hi=new Command().name("docs").description("get docs, api references and usage examples for components").argument("<components...>","component names").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-b, --base <base>","the base to use: base, radix, or aria. defaults to project base.").option("--json","output as JSON.",false).action(async(e,t)=>{try{let r=N__default.resolve(t.cwd),o=await Y(r),n=vc(t.base,o?.style),i=await qa();i||(g.error("Failed to fetch the registry index."),process.exit(1));let s=[];for(let l of e){let m=i.find(f=>f.name===l);m||(g.error(`Component ${f.info(l)} not found in the shadcn registry.`),process.exit(1));let d=m.meta?.links?.[n];if(!d||Object.keys(d).length===0){g.warn(`No documentation links available for ${f.info(l)}.`);continue}s.push({component:l,base:n,links:Rc(d)});}if(t.json){console.log(JSON.stringify({base:n,results:s},null,2));return}let c=Math.max(...s.flatMap(l=>Object.keys(l.links).map(m=>m.length)));for(let{component:l,links:m}of s){g.log(f.info(l));for(let[d,f]of Object.entries(m))g.log(` - ${d.padEnd(c+2)}${f}`);g.break();}}catch(r){ka$1(r);}});function vc(e,t){let r=e??$(t);if(!b(r))throw new Error(`Invalid base: ${String(r)}. Expected one of: ${a.join(", ")}.`);return r}function Rc(e){return Object.fromEntries(Object.entries(e).map(([t,r])=>[t,r.startsWith(ui)?`${a$1}${r.slice(ui.length)}`:r]))}var yi=/@import\s+["']shadcn\/tailwind\.css["'];?\s*\n?/,$c=z.object({cwd:z.string(),yes:z.boolean(),silent:z.boolean()}),wi=new Command().name("eject").description("inline shadcn/tailwind.css and remove the shadcn dependency").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-y, --yes","skip confirmation prompt.",false).option("-s, --silent","mute output.",false).action(async e=>{try{let t=$c.parse({cwd:N__default.resolve(e.cwd),yes:e.yes,silent:e.silent});await Ec(t);}catch(t){ka$1(t);}});async function Ec(e){if(!D.existsSync(N__default.resolve(e.cwd,"components.json"))){if(await h(e.cwd)){let d=await i(e.cwd);d.length>0&&(j$1("eject",d),process.exit(1));}g.break(),g.error(`No ${f.info("components.json")} found. Run ${f.info("shadcn init")} first.`),g.error(`Learn more at ${f.info(`${a$1}/docs/components-json`)}.`),g.break(),process.exit(1);}let t=await Y(e.cwd);t?.resolvedPaths.tailwindCss||(g.break(),g.error("Could not resolve the Tailwind CSS file from components.json."),g.break(),process.exit(1));let r=t.resolvedPaths.tailwindCss,o=N__default.relative(e.cwd,r),n=await promises.readFile(r,"utf8");yi.test(n)||(g.break(),g.error(`Could not find ${f.info('@import "shadcn/tailwind.css"')} in ${f.info(o)}.`),g.error("Nothing to eject."),g.break(),process.exit(1));let i$1=A(e.cwd,false),s=Nc(i$1),c=jc(e.cwd),l=await promises.readFile(c,"utf8");if(e.silent||(g.break(),g.warn("This action is not reversible. Future shadcn CLI updates to tailwind.css will not apply automatically."),g.break()),!e.yes){g.log("This will:"),g.log(` - Inline ${f.info("shadcn/tailwind.css")} into ${f.info(o)}`),g.log(` - Remove the ${f.info("shadcn")} dependency`),g.break();let{proceed:d}=await ge({type:"confirm",name:"proceed",message:"Proceed?",initial:false});d||process.exit(0);}let m=D$1(`Inlining ${f.info("shadcn/tailwind.css")}.`,{silent:e.silent})?.start();if(n=n.replace(yi,()=>`/* ejected from shadcn@${s} */
119
119
  ${l.trim()}
120
120
 
121
- `),await promises.writeFile(r,n,"utf8"),m?.succeed(),Tc(i$1)){let p=D$1(`Removing ${f.info("shadcn")}.`,{silent:e.silent})?.start();await Oc(e.cwd),p?.succeed();}else e.silent||g.warn(`The ${f.info("shadcn")} package was not found in package.json. Skipped removal.`);g.break(),g.log(`Ejected ${f.info("shadcn/tailwind.css")} into ${f.info(o)}.`),g.break();}function Nc(e){return e?(e.dependencies?.shadcn??e.devDependencies?.shadcn??"unknown").replace(/^[\^~]/,"").trim():"unknown"}function Tc(e){return e?!!(e.dependencies?.shadcn||e.devDependencies?.shadcn):false}function jc(e){let t=N__default.join(e,"node_modules/shadcn/dist/tailwind.css");if(D.existsSync(t))return t;let r=process.argv[1]?N__default.dirname(N__default.resolve(process.argv[1])):e;for(let o of [N__default.join(r,"tailwind.css"),N__default.join(r,"dist","tailwind.css"),N__default.join(r,"src","tailwind.css"),N__default.join(process.cwd(),"src/tailwind.css"),N__default.join(process.cwd(),"dist/tailwind.css")])if(D.existsSync(o))return o;throw new Error("Could not resolve shadcn/tailwind.css.")}async function Oc(e){switch(await ha(e)){case "npm":await execa("npm",["uninstall","shadcn"],{cwd:e});break;case "pnpm":await execa("pnpm",["remove","shadcn"],{cwd:e});break;case "yarn":await execa("yarn",["remove","shadcn"],{cwd:e});break;case "bun":await execa("bun",["remove","shadcn"],{cwd:e});break;case "deno":{let r=N__default.join(e,"package.json"),o=await D.readJson(r);for(let n of ["dependencies","devDependencies"])o[n]?.shadcn&&delete o[n].shadcn;await D.writeJson(r,o,{spaces:2});break}}}var Fc=["50","100","200","300","400","500","600","700","800","900","950"],Ac=["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone","mauve","olive","mist","taupe"],Dc={red:{50:"oklch(97.1% 0.013 17.38)",100:"oklch(93.6% 0.032 17.717)",200:"oklch(88.5% 0.062 18.334)",300:"oklch(80.8% 0.114 19.571)",400:"oklch(70.4% 0.191 22.216)",500:"oklch(63.7% 0.237 25.331)",600:"oklch(57.7% 0.245 27.325)",700:"oklch(50.5% 0.213 27.518)",800:"oklch(44.4% 0.177 26.899)",900:"oklch(39.6% 0.141 25.723)",950:"oklch(25.8% 0.092 26.042)"},orange:{50:"oklch(98% 0.016 73.684)",100:"oklch(95.4% 0.038 75.164)",200:"oklch(90.1% 0.076 70.697)",300:"oklch(83.7% 0.128 66.29)",400:"oklch(75% 0.183 55.934)",500:"oklch(70.5% 0.213 47.604)",600:"oklch(64.6% 0.222 41.116)",700:"oklch(55.3% 0.195 38.402)",800:"oklch(47% 0.157 37.304)",900:"oklch(40.8% 0.123 38.172)",950:"oklch(26.6% 0.079 36.259)"},amber:{50:"oklch(98.7% 0.022 95.277)",100:"oklch(96.2% 0.059 95.617)",200:"oklch(92.4% 0.12 95.746)",300:"oklch(87.9% 0.169 91.605)",400:"oklch(82.8% 0.189 84.429)",500:"oklch(76.9% 0.188 70.08)",600:"oklch(66.6% 0.179 58.318)",700:"oklch(55.5% 0.163 48.998)",800:"oklch(47.3% 0.137 46.201)",900:"oklch(41.4% 0.112 45.904)",950:"oklch(27.9% 0.077 45.635)"},yellow:{50:"oklch(98.7% 0.026 102.212)",100:"oklch(97.3% 0.071 103.193)",200:"oklch(94.5% 0.129 101.54)",300:"oklch(90.5% 0.182 98.111)",400:"oklch(85.2% 0.199 91.936)",500:"oklch(79.5% 0.184 86.047)",600:"oklch(68.1% 0.162 75.834)",700:"oklch(55.4% 0.135 66.442)",800:"oklch(47.6% 0.114 61.907)",900:"oklch(42.1% 0.095 57.708)",950:"oklch(28.6% 0.066 53.813)"},lime:{50:"oklch(98.6% 0.031 120.757)",100:"oklch(96.7% 0.067 122.328)",200:"oklch(93.8% 0.127 124.321)",300:"oklch(89.7% 0.196 126.665)",400:"oklch(84.1% 0.238 128.85)",500:"oklch(76.8% 0.233 130.85)",600:"oklch(64.8% 0.2 131.684)",700:"oklch(53.2% 0.157 131.589)",800:"oklch(45.3% 0.124 130.933)",900:"oklch(40.5% 0.101 131.063)",950:"oklch(27.4% 0.072 132.109)"},green:{50:"oklch(98.2% 0.018 155.826)",100:"oklch(96.2% 0.044 156.743)",200:"oklch(92.5% 0.084 155.995)",300:"oklch(87.1% 0.15 154.449)",400:"oklch(79.2% 0.209 151.711)",500:"oklch(72.3% 0.219 149.579)",600:"oklch(62.7% 0.194 149.214)",700:"oklch(52.7% 0.154 150.069)",800:"oklch(44.8% 0.119 151.328)",900:"oklch(39.3% 0.095 152.535)",950:"oklch(26.6% 0.065 152.934)"},emerald:{50:"oklch(97.9% 0.021 166.113)",100:"oklch(95% 0.052 163.051)",200:"oklch(90.5% 0.093 164.15)",300:"oklch(84.5% 0.143 164.978)",400:"oklch(76.5% 0.177 163.223)",500:"oklch(69.6% 0.17 162.48)",600:"oklch(59.6% 0.145 163.225)",700:"oklch(50.8% 0.118 165.612)",800:"oklch(43.2% 0.095 166.913)",900:"oklch(37.8% 0.077 168.94)",950:"oklch(26.2% 0.051 172.552)"},teal:{50:"oklch(98.4% 0.014 180.72)",100:"oklch(95.3% 0.051 180.801)",200:"oklch(91% 0.096 180.426)",300:"oklch(85.5% 0.138 181.071)",400:"oklch(77.7% 0.152 181.912)",500:"oklch(70.4% 0.14 182.503)",600:"oklch(60% 0.118 184.704)",700:"oklch(51.1% 0.096 186.391)",800:"oklch(43.7% 0.078 188.216)",900:"oklch(38.6% 0.063 188.416)",950:"oklch(27.7% 0.046 192.524)"},cyan:{50:"oklch(98.4% 0.019 200.873)",100:"oklch(95.6% 0.045 203.388)",200:"oklch(91.7% 0.08 205.041)",300:"oklch(86.5% 0.127 207.078)",400:"oklch(78.9% 0.154 211.53)",500:"oklch(71.5% 0.143 215.221)",600:"oklch(60.9% 0.126 221.723)",700:"oklch(52% 0.105 223.128)",800:"oklch(45% 0.085 224.283)",900:"oklch(39.8% 0.07 227.392)",950:"oklch(30.2% 0.056 229.695)"},sky:{50:"oklch(97.7% 0.013 236.62)",100:"oklch(95.1% 0.026 236.824)",200:"oklch(90.1% 0.058 230.902)",300:"oklch(82.8% 0.111 230.318)",400:"oklch(74.6% 0.16 232.661)",500:"oklch(68.5% 0.169 237.323)",600:"oklch(58.8% 0.158 241.966)",700:"oklch(50% 0.134 242.749)",800:"oklch(44.3% 0.11 240.79)",900:"oklch(39.1% 0.09 240.876)",950:"oklch(29.3% 0.066 243.157)"},blue:{50:"oklch(97% 0.014 254.604)",100:"oklch(93.2% 0.032 255.585)",200:"oklch(88.2% 0.059 254.128)",300:"oklch(80.9% 0.105 251.813)",400:"oklch(70.7% 0.165 254.624)",500:"oklch(62.3% 0.214 259.815)",600:"oklch(54.6% 0.245 262.881)",700:"oklch(48.8% 0.243 264.376)",800:"oklch(42.4% 0.199 265.638)",900:"oklch(37.9% 0.146 265.522)",950:"oklch(28.2% 0.091 267.935)"},indigo:{50:"oklch(96.2% 0.018 272.314)",100:"oklch(93% 0.034 272.788)",200:"oklch(87% 0.065 274.039)",300:"oklch(78.5% 0.115 274.713)",400:"oklch(67.3% 0.182 276.935)",500:"oklch(58.5% 0.233 277.117)",600:"oklch(51.1% 0.262 276.966)",700:"oklch(45.7% 0.24 277.023)",800:"oklch(39.8% 0.195 277.366)",900:"oklch(35.9% 0.144 278.697)",950:"oklch(25.7% 0.09 281.288)"},violet:{50:"oklch(96.9% 0.016 293.756)",100:"oklch(94.3% 0.029 294.588)",200:"oklch(89.4% 0.057 293.283)",300:"oklch(81.1% 0.111 293.571)",400:"oklch(70.2% 0.183 293.541)",500:"oklch(60.6% 0.25 292.717)",600:"oklch(54.1% 0.281 293.009)",700:"oklch(49.1% 0.27 292.581)",800:"oklch(43.2% 0.232 292.759)",900:"oklch(38% 0.189 293.745)",950:"oklch(28.3% 0.141 291.089)"},purple:{50:"oklch(97.7% 0.014 308.299)",100:"oklch(94.6% 0.033 307.174)",200:"oklch(90.2% 0.063 306.703)",300:"oklch(82.7% 0.119 306.383)",400:"oklch(71.4% 0.203 305.504)",500:"oklch(62.7% 0.265 303.9)",600:"oklch(55.8% 0.288 302.321)",700:"oklch(49.6% 0.265 301.924)",800:"oklch(43.8% 0.218 303.724)",900:"oklch(38.1% 0.176 304.987)",950:"oklch(29.1% 0.149 302.717)"},fuchsia:{50:"oklch(97.7% 0.017 320.058)",100:"oklch(95.2% 0.037 318.852)",200:"oklch(90.3% 0.076 319.62)",300:"oklch(83.3% 0.145 321.434)",400:"oklch(74% 0.238 322.16)",500:"oklch(66.7% 0.295 322.15)",600:"oklch(59.1% 0.293 322.896)",700:"oklch(51.8% 0.253 323.949)",800:"oklch(45.2% 0.211 324.591)",900:"oklch(40.1% 0.17 325.612)",950:"oklch(29.3% 0.136 325.661)"},pink:{50:"oklch(97.1% 0.014 343.198)",100:"oklch(94.8% 0.028 342.258)",200:"oklch(89.9% 0.061 343.231)",300:"oklch(82.3% 0.12 346.018)",400:"oklch(71.8% 0.202 349.761)",500:"oklch(65.6% 0.241 354.308)",600:"oklch(59.2% 0.249 0.584)",700:"oklch(52.5% 0.223 3.958)",800:"oklch(45.9% 0.187 3.815)",900:"oklch(40.8% 0.153 2.432)",950:"oklch(28.4% 0.109 3.907)"},rose:{50:"oklch(96.9% 0.015 12.422)",100:"oklch(94.1% 0.03 12.58)",200:"oklch(89.2% 0.058 10.001)",300:"oklch(81% 0.117 11.638)",400:"oklch(71.2% 0.194 13.428)",500:"oklch(64.5% 0.246 16.439)",600:"oklch(58.6% 0.253 17.585)",700:"oklch(51.4% 0.222 16.935)",800:"oklch(45.5% 0.188 13.697)",900:"oklch(41% 0.159 10.272)",950:"oklch(27.1% 0.105 12.094)"},slate:{50:"oklch(98.4% 0.003 247.858)",100:"oklch(96.8% 0.007 247.896)",200:"oklch(92.9% 0.013 255.508)",300:"oklch(86.9% 0.022 252.894)",400:"oklch(70.4% 0.04 256.788)",500:"oklch(55.4% 0.046 257.417)",600:"oklch(44.6% 0.043 257.281)",700:"oklch(37.2% 0.044 257.287)",800:"oklch(27.9% 0.041 260.031)",900:"oklch(20.8% 0.042 265.755)",950:"oklch(12.9% 0.042 264.695)"},gray:{50:"oklch(98.5% 0.002 247.839)",100:"oklch(96.7% 0.003 264.542)",200:"oklch(92.8% 0.006 264.531)",300:"oklch(87.2% 0.01 258.338)",400:"oklch(70.7% 0.022 261.325)",500:"oklch(55.1% 0.027 264.364)",600:"oklch(44.6% 0.03 256.802)",700:"oklch(37.3% 0.034 259.733)",800:"oklch(27.8% 0.033 256.848)",900:"oklch(21% 0.034 264.665)",950:"oklch(13% 0.028 261.692)"},zinc:{50:"oklch(98.5% 0 0)",100:"oklch(96.7% 0.001 286.375)",200:"oklch(92% 0.004 286.32)",300:"oklch(87.1% 0.006 286.286)",400:"oklch(70.5% 0.015 286.067)",500:"oklch(55.2% 0.016 285.938)",600:"oklch(44.2% 0.017 285.786)",700:"oklch(37% 0.013 285.805)",800:"oklch(27.4% 0.006 286.033)",900:"oklch(21% 0.006 285.885)",950:"oklch(14.1% 0.005 285.823)"},neutral:{50:"oklch(98.5% 0 0)",100:"oklch(97% 0 0)",200:"oklch(92.2% 0 0)",300:"oklch(87% 0 0)",400:"oklch(70.8% 0 0)",500:"oklch(55.6% 0 0)",600:"oklch(43.9% 0 0)",700:"oklch(37.1% 0 0)",800:"oklch(26.9% 0 0)",900:"oklch(20.5% 0 0)",950:"oklch(14.5% 0 0)"},stone:{50:"oklch(98.5% 0.001 106.423)",100:"oklch(97% 0.001 106.424)",200:"oklch(92.3% 0.003 48.717)",300:"oklch(86.9% 0.005 56.366)",400:"oklch(70.9% 0.01 56.259)",500:"oklch(55.3% 0.013 58.071)",600:"oklch(44.4% 0.011 73.639)",700:"oklch(37.4% 0.01 67.558)",800:"oklch(26.8% 0.007 34.298)",900:"oklch(21.6% 0.006 56.043)",950:"oklch(14.7% 0.004 49.25)"},mauve:{50:"oklch(98.5% 0 0)",100:"oklch(96% 0.003 325.6)",200:"oklch(92.2% 0.005 325.62)",300:"oklch(86.5% 0.012 325.68)",400:"oklch(71.1% 0.019 323.02)",500:"oklch(54.2% 0.034 322.5)",600:"oklch(43.5% 0.029 321.78)",700:"oklch(36.4% 0.029 323.89)",800:"oklch(26.3% 0.024 320.12)",900:"oklch(21.2% 0.019 322.12)",950:"oklch(14.5% 0.008 326)"},olive:{50:"oklch(98.8% 0.003 106.5)",100:"oklch(96.6% 0.005 106.5)",200:"oklch(93% 0.007 106.5)",300:"oklch(88% 0.011 106.6)",400:"oklch(73.7% 0.021 106.9)",500:"oklch(58% 0.031 107.3)",600:"oklch(46.6% 0.025 107.3)",700:"oklch(39.4% 0.023 107.4)",800:"oklch(28.6% 0.016 107.4)",900:"oklch(22.8% 0.013 107.4)",950:"oklch(15.3% 0.006 107.1)"},mist:{50:"oklch(98.7% 0.002 197.1)",100:"oklch(96.3% 0.002 197.1)",200:"oklch(92.5% 0.005 214.3)",300:"oklch(87.2% 0.007 219.6)",400:"oklch(72.3% 0.014 214.4)",500:"oklch(56% 0.021 213.5)",600:"oklch(45% 0.017 213.2)",700:"oklch(37.8% 0.015 216)",800:"oklch(27.5% 0.011 216.9)",900:"oklch(21.8% 0.008 223.9)",950:"oklch(14.8% 0.004 228.8)"},taupe:{50:"oklch(98.6% 0.002 67.8)",100:"oklch(96% 0.002 17.2)",200:"oklch(92.2% 0.005 34.3)",300:"oklch(86.8% 0.007 39.5)",400:"oklch(71.4% 0.014 41.2)",500:"oklch(54.7% 0.021 43.1)",600:"oklch(43.8% 0.017 39.3)",700:"oklch(36.7% 0.016 35.7)",800:"oklch(26.8% 0.011 36.5)",900:"oklch(21.4% 0.009 43.1)",950:"oklch(14.7% 0.004 49.3)"}},Lc={"220.9 39.3% 11%":"gray","210 20% 98%":"gray","12 76% 61%":"gray","220 70% 50%":"gray"},Ci=new Map;for(let e of Ac)for(let t of Fc)Ci.set(bi(Dc[e][t]),e);function xi(e){let t=bi(e);return t?Ci.get(t)??Lc[t]??null:null}function bi(e){if(!e)return "";let t=e.trim().replace(/\s+/g," ").toLowerCase();if(!t.startsWith("oklch(")||!t.endsWith(")"))return t;let r=t.slice(6,-1).trim(),[o]=r.split(/\s*\/\s*/),n=o.split(/\s+/);if(n.length<3)return t;let i=Dr(n[0],{percentage:true}),s=Dr(n[1]),c=Dr(n[2]);return `oklch(${i} ${s} ${c})`}function Dr(e,t={}){return t.percentage&&e.endsWith("%")?ki(Number.parseFloat(e)/100):ki(Number.parseFloat(e))}function ki(e){return Number.isNaN(e)?"":Number(e.toFixed(12)).toString()}var Wc=new Set(e$1),Jc=new Set(i$1),zc=new Set(m),Hc=new Set(n),Gc=new Set(j$2),Kc=new Set(k),Yc=new Set(f$2),qc=new Set(["eb-garamond","instrument-serif","lora","merriweather","playfair-display","noto-serif","roboto-slab"]),Xc=new Set(["jetbrains-mono","geist-mono"]),mt=["--font-sans","--font-serif","--font-mono"],Pi=new Set(mt),Zc=[...mt,"--font-heading"],$i=new Set(Zc),Si={appliedBodyVariable:null,variables:{}},Qc={0:"none","0rem":"none","0.45rem":"small","0.625rem":"default","0.875rem":"large"};async function qt(e,t){let r$1=tl(e.style);if(!r$1)return {code:null,fallbacks:[],values:null};let o=q[r$1],n=await el(e.resolvedPaths.tailwindCss),i=Kt(Wc,e.tailwind.baseColor),s=nl(n),c=il(n),l=Kt(Jc,e.iconLibrary),m=vi(n,Si),p=m??o.font,f=Ri(n,p,Si);if(!m||!f){let x=t;if(t===void 0)try{x=await Ca$1(e.resolvedPaths.cwd,{configCssFile:e.tailwind.css});}catch{x=null;}let S=await ml(e,x);m??=vi(n,S),p=m??o.font,f??=Ri(n,p,S);}let g=al(f??o.fontHeading,p,o.fontHeading),u=sl(n.rootVars["--radius"]),h=Kt(zc,e.menuAccent),y=Kt(Hc,e.menuColor),k={style:r$1,baseColor:i??o.baseColor,theme:s??o.theme,chartColor:c??o.chartColor,iconLibrary:l??o.iconLibrary,font:p,fontHeading:g,radius:u??o.radius,menuAccent:h??o.menuAccent,menuColor:y??o.menuColor},C=[!i&&"baseColor",!s&&"theme",!c&&"chartColor",!l&&"iconLibrary",!m&&"font",!f&&"fontHeading",!u&&"radius",!h&&"menuAccent",!y&&"menuColor"].filter(Boolean);return {code:r(k),fallbacks:C,values:k}}async function el(e){let t={darkVars:{},imports:[],rootVars:{},themeVars:{}};if(!e)return t;try{let r=await promises.readFile(e,"utf8");return rl(r)}catch{return t}}function tl(e){let t=c$2(e).style;return !t||!(t in q)?null:t}function rl(e){let t=Vc.parse(e),r={darkVars:{},imports:[],rootVars:{},themeVars:{}};return t.walkAtRules("import",o=>{let n=ol(o.params);n&&r.imports.push(n);}),t.walkRules(o=>{let n=o.selector.split(",").map(i=>i.trim()).filter(Boolean);n.includes(":root")&&Lr(o,r.rootVars),n.includes(".dark")&&Lr(o,r.darkVars);}),t.walkAtRules("theme",o=>{o.params.trim()==="inline"&&Lr(o,r.themeVars);}),r}function Lr(e,t){for(let r of e.nodes??[])r.type!=="decl"||!r.prop.startsWith("--")||(t[r.prop]=r.value.trim());}function ol(e){let t=e.trim();return (t.match(/^url\((['"]?)(.+?)\1\)$/)??t.match(/^(['"])(.+?)\1$/))?.[2]??null}function nl(e){let t=Yt(e.rootVars["--primary"]);if(!t)return null;let r=e.darkVars["--primary"];return r?Yt(r)===t?t:null:t}function il(e){let t=Yt(e.rootVars["--chart-1"]);if(!t)return null;let r=e.darkVars["--chart-1"];return r?Yt(r)===t?t:null:t}function Yt(e){let t=xi(e);return !t||!Yc.has(t)?null:t}function sl(e){if(!e)return null;let t=Xt(e);return Qc[t]??null}function vi(e,t){for(let r of mt){let o=Ni(e,r);if(o)return o}for(let r of mt){let o=cl(e.imports,r);if(o)return o}return ll(t)}function Ri(e,t,r){let o=_r(e,"--font-heading"),n=o?ji(o):null;if(n)return n===t?"inherit":n;let i=r.variables["--font-heading"],s=Ei(e,"--font-heading");if(!s)return i&&i!==t?i:null;let c=Mr(s);if(c&&Pi.has(c)){let l=Ni(e,c),m=r.variables[c],p=l??m??null;return !p||p===t?"inherit":p}return c==="--font-heading"?i?i===t?"inherit":i:null:i&&i!==t?i:null}function al(e,t,r){let o=e===t?"inherit":e;return Kc.has(o)?o:r}function _r(e,t,r=new Set){if(r.has(t))return null;r.add(t);let o=Ei(e,t);if(!o)return null;let n=Mr(o);return n?$i.has(n)?_r(e,n,r):null:o}function Ei(e,t){let r=e.themeVars[t];return r&&Mr(r)!==t?r:e.rootVars[t]??r??null}function Mr(e){return Xt(e).match(/^var\((--[a-z0-9-]+)\)$/)?.[1]??null}function Ni(e,t){let r=_r(e,t),o=r?ji(r):null;return o||null}function cl(e,t){let r=e.flatMap(o=>{let n=wl(o);return n&&Cl(n)===t?[n]:[]});return r.length===1?r[0]:null}function ll(e){if(e.appliedBodyVariable&&e.variables[e.appliedBodyVariable])return e.variables[e.appliedBodyVariable]??null;let t=mt.map(r=>e.variables[r]).filter(Boolean).filter((r,o,n)=>n.indexOf(r)===o);return t.length===1?t[0]:null}async function ml(e,t){let r={appliedBodyVariable:null,variables:{}};if(!t||t.framework.name!=="next-app"&&t.framework.name!=="next-pages")return r;let o=fl(e,t);if(!o)return r;try{let n=await promises.readFile(o,"utf8");return pl(n,t.framework.name)}catch{return r}}function fl(e,t){let r=t.isTsx?"tsx":"jsx",o=t.framework.name==="next-app"?t.isSrcDir?[`src/app/layout.${r}`,`app/layout.${r}`]:[`app/layout.${r}`]:t.isSrcDir?[`src/pages/_app.${r}`,`pages/_app.${r}`]:[`pages/_app.${r}`];for(let n of o){let i=N__default.join(e.resolvedPaths.cwd,n);if(existsSync(i))return i}return null}function pl(e,t){let o=new Project({compilerOptions:{}}).createSourceFile("font-source.tsx",e,{overwrite:true,scriptKind:ScriptKind.TSX}),n=new Map;for(let c of o.getImportDeclarations())if(c.getModuleSpecifierValue()==="next/font/google")for(let l of c.getNamedImports()){let m=l.getName(),p=l.getAliasNode()?.getText()??m,f=kl(m);f&&n.set(p,f);}let i={},s=new Map;for(let c of o.getVariableStatements())for(let l of c.getDeclarations()){let m=l.getInitializer();if(!m?.isKind(SyntaxKind.CallExpression))continue;let p=n.get(m.getExpression().getText());if(!p)continue;let f=dl(m);f&&(s.set(l.getName(),f),i[f]=p);}return {appliedBodyVariable:gl(o,s,t),variables:i}}function dl(e){let t=e.getArguments()[0];if(!t||!Node.isObjectLiteralExpression(t))return null;let r=t.getProperty("variable");if(!r||!Node.isPropertyAssignment(r))return null;let o=r.getInitializer();if(!o)return null;let n=Ti(o.getText());return $i.has(n)?n:null}function gl(e,t,r){let o=e.getDescendantsOfKind(SyntaxKind.JsxOpeningElement).filter(i=>r==="next-app"?i.getTagNameNode().getText()==="html":true),n=new Set;for(let i of o){let s=i.getAttribute("className");if(!s||!Node.isJsxAttribute(s))continue;let c=s.getInitializer();if(!c)continue;let l=ul(c,t),m=hl(c);if(m&&l.includes(m))return m;l.length===1&&n.add(l[0]);}return n.size===1?Array.from(n)[0]:null}function ul(e,t){let r=Node.isJsxExpression(e)?[e.getExpression(),...e.getDescendantsOfKind(SyntaxKind.PropertyAccessExpression)].filter(Boolean):[],o=new Set;for(let n of r){if(!n||!Node.isPropertyAccessExpression(n)||n.getName()!=="variable")continue;let i=n.getExpression().getText(),s=t.get(i);s&&Pi.has(s)&&o.add(s);}return Array.from(o)}function hl(e){let t=yl(e);return /\bfont-sans\b/.test(t)?"--font-sans":/\bfont-serif\b/.test(t)?"--font-serif":/\bfont-mono\b/.test(t)?"--font-mono":null}function yl(e){let t=[];(Node.isStringLiteral(e)||Node.isNoSubstitutionTemplateLiteral(e))&&t.push(e.getLiteralValue());for(let r of e.getDescendantsOfKind(SyntaxKind.StringLiteral))t.push(r.getLiteralValue());for(let r of e.getDescendantsOfKind(SyntaxKind.NoSubstitutionTemplateLiteral))t.push(r.getLiteralValue());return t.length>0?t.join(" "):e.getText()}function Ti(e){return e.replace(/^['"]|['"]$/g,"")}function ji(e){if(!e)return null;let t=Ti(e.split(",")[0]?.trim()??"").replace(/\s+variable$/i,"").trim();return t?Vr(t.replace(/\s+/g,"-")):null}function wl(e){if(!e)return null;let t=Xt(e),r="@fontsource-variable/";return t.startsWith(r)?Vr(t.slice(r.length)):null}function kl(e){return e?Vr(e.replace(/_/g,"-")):null}function Vr(e){let t=Xt(e);return Gc.has(t)?t:null}function Cl(e){return Xc.has(e)?"--font-mono":qc.has(e)?"--font-serif":"--font-sans"}function Xt(e){return e?e.trim().replace(/\s+/g," ").replace(/\s*,\s*/g,", ").replace(/"/g,"'").toLowerCase():""}function Kt(e,t){return t&&e.has(t)?t:null}var Fi=`${a$1}/code/apps/v4/registry/bases`,Ai=new Command().name("info").description("get information about your project").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("--json","output as JSON.",false).action(async e=>{try{let t=N__default.resolve(e.cwd);if(!existsSync(N__default.resolve(t,"components.json"))&&await h(t)){let c=await i(t);c.length>0&&(e.json?console.log(JSON.stringify({error:"monorepo_root",message:"You are running info from a monorepo root. Use the -c flag to specify a workspace.",targets:c.map(l=>l.name)},null,2)):j$1("info",c),process.exit(1));}let r=await Ca$1(t),o=await Y(t),n=await Fa$1(t),i$1=$(o?.style),s=await vl(r,o,n,i$1);if(e.json){console.log(JSON.stringify(s,null,2));return}Rl(s);}catch(t){ka$1(t);}});function Sl(e){if(!e)return {};let t={};for(let[r,o]of Object.entries(e))t[r]=typeof o=="string"?o:o.url;return t}async function vl(e,t,r,o){let n=t?await qt(t,e):null;return {project:e?{framework:e.framework.label,frameworkName:e.framework.name,frameworkVersion:e.frameworkVersion??null,srcDirectory:e.isSrcDir,rsc:e.isRSC,typescript:e.isTsx,tailwindVersion:e.tailwindVersion??null,tailwindConfig:e.tailwindConfigFile??null,tailwindCss:e.tailwindCssFile??null,importAlias:e.aliasPrefix??null}:null,config:t?{style:t.style,base:o,rsc:t.rsc,typescript:t.tsx,iconLibrary:t.iconLibrary??null,rtl:t.rtl??false,menuColor:t.menuColor??null,menuAccent:t.menuAccent??null,aliases:{components:t.aliases.components,utils:t.aliases.utils,ui:t.aliases.ui??null,lib:t.aliases.lib??null,hooks:t.aliases.hooks??null},resolvedPaths:{cwd:t.resolvedPaths.cwd,tailwindConfig:t.resolvedPaths.tailwindConfig||null,tailwindCss:t.resolvedPaths.tailwindCss||null,utils:t.resolvedPaths.utils,components:t.resolvedPaths.components,lib:t.resolvedPaths.lib,hooks:t.resolvedPaths.hooks,ui:t.resolvedPaths.ui},registries:Sl(t.registries)}:null,preset:n,components:r,links:{docs:`${a$1}/docs`,components:`${a$1}/docs/components/${o}/[component].md`,ui:`${Fi}/${o}/ui/[component].tsx`,examples:`${Fi}/${o}/examples/[component]-example.tsx`,schema:`${a$1}/schema.json`}}}function Rl(e){g.log(f.info("Project")),e.project?ye({framework:`${e.project.framework} (${e.project.frameworkName})`,frameworkVersion:e.project.frameworkVersion??"-",srcDirectory:e.project.srcDirectory?"Yes":"No",rsc:e.project.rsc?"Yes":"No",typescript:e.project.typescript?"Yes":"No",tailwindVersion:e.project.tailwindVersion??"-",tailwindConfig:e.project.tailwindConfig??"-",tailwindCss:e.project.tailwindCss??"-",importAlias:e.project.importAlias??"-"}):g.log(" No project info detected."),g.break(),g.log(f.info("Configuration")),e.config?(ye({style:e.config.style,base:e.config.base,rsc:e.config.rsc?"Yes":"No",typescript:e.config.typescript?"Yes":"No",iconLibrary:e.config.iconLibrary??"-",rtl:e.config.rtl?"Yes":"No",menuColor:e.config.menuColor??"-",menuAccent:e.config.menuAccent??"-"}),g.break(),Zt(e.preset),g.break(),g.log(f.info("Aliases")),ye({components:e.config.aliases.components,utils:e.config.aliases.utils,ui:e.config.aliases.ui??"-",lib:e.config.aliases.lib??"-",hooks:e.config.aliases.hooks??"-"}),g.break(),g.log(f.info("Resolved Paths")),ye({cwd:e.config.resolvedPaths.cwd,tailwindConfig:e.config.resolvedPaths.tailwindConfig??"-",tailwindCss:e.config.resolvedPaths.tailwindCss??"-",utils:e.config.resolvedPaths.utils,components:e.config.resolvedPaths.components,lib:e.config.resolvedPaths.lib,hooks:e.config.resolvedPaths.hooks,ui:e.config.resolvedPaths.ui}),Object.keys(e.config.registries).length>0&&(g.break(),g.log("registries:"),ye(e.config.registries))):g.log(" No components.json found."),g.break(),g.log(f.info("Installed Components")),e.components.length>0?g.log(` ${e.components.join(", ")}`):g.log(" No components installed."),g.break(),g.log(f.info("Links")),ye(e.links),g.break();}function Zt(e,t={}){if(g.log(f.info("Preset")),!e?.code)ye({code:"-"});else {let r=e.fallbacks??[],o=(n,i)=>{let s=r.includes(n)?"*":"";return `${i??"-"}${s}`};ye({code:e.code,version:e.code[0],style:e.values?.style??"-",baseColor:o("baseColor",e.values?.baseColor),theme:o("theme",e.values?.theme),chartColor:o("chartColor",e.values?.chartColor),iconLibrary:o("iconLibrary",e.values?.iconLibrary),font:o("font",e.values?.font),fontHeading:o("fontHeading",e.values?.fontHeading),radius:o("radius",e.values?.radius),menuAccent:o("menuAccent",e.values?.menuAccent),menuColor:o("menuColor",e.values?.menuColor),url:`${a$1}/create?preset=${e.code}`}),r.length>0&&(g.log(""),g.log(t.fallbackNote??" * Uses preset defaults for values not available as options on shadcn/create."));}}function ye(e){let t=Math.max(...Object.keys(e).map(r=>r.length));for(let[r,o]of Object.entries(e))g.log(` ${r.padEnd(t+2)}${o}`);}var Ne="latest",er=[{name:"claude",label:"Claude Code",configPath:".mcp.json",config:{mcpServers:{shadcn:{command:"npx",args:[`shadcn@${Ne}`,"mcp"]}}}},{name:"cursor",label:"Cursor",configPath:".cursor/mcp.json",config:{mcpServers:{shadcn:{command:"npx",args:[`shadcn@${Ne}`,"mcp"]}}}},{name:"vscode",label:"VS Code",configPath:".vscode/mcp.json",config:{servers:{shadcn:{command:"npx",args:[`shadcn@${Ne}`,"mcp"]}}}},{name:"codex",label:"Codex",configPath:".codex/config.toml",config:`[mcp_servers.shadcn]
121
+ `),await promises.writeFile(r,n,"utf8"),m?.succeed(),Tc(i$1)){let d=D$1(`Removing ${f.info("shadcn")}.`,{silent:e.silent})?.start();await Oc(e.cwd),d?.succeed();}else e.silent||g.warn(`The ${f.info("shadcn")} package was not found in package.json. Skipped removal.`);g.break(),g.log(`Ejected ${f.info("shadcn/tailwind.css")} into ${f.info(o)}.`),g.break();}function Nc(e){return e?(e.dependencies?.shadcn??e.devDependencies?.shadcn??"unknown").replace(/^[\^~]/,"").trim():"unknown"}function Tc(e){return e?!!(e.dependencies?.shadcn||e.devDependencies?.shadcn):false}function jc(e){let t=N__default.join(e,"node_modules/shadcn/dist/tailwind.css");if(D.existsSync(t))return t;let r=process.argv[1]?N__default.dirname(N__default.resolve(process.argv[1])):e;for(let o of [N__default.join(r,"tailwind.css"),N__default.join(r,"dist","tailwind.css"),N__default.join(r,"src","tailwind.css"),N__default.join(process.cwd(),"src/tailwind.css"),N__default.join(process.cwd(),"dist/tailwind.css")])if(D.existsSync(o))return o;throw new Error("Could not resolve shadcn/tailwind.css.")}async function Oc(e){switch(await ha(e)){case "npm":await execa("npm",["uninstall","shadcn"],{cwd:e});break;case "pnpm":await execa("pnpm",["remove","shadcn"],{cwd:e});break;case "yarn":await execa("yarn",["remove","shadcn"],{cwd:e});break;case "bun":await execa("bun",["remove","shadcn"],{cwd:e});break;case "deno":{let r=N__default.join(e,"package.json"),o=await D.readJson(r);for(let n of ["dependencies","devDependencies"])o[n]?.shadcn&&delete o[n].shadcn;await D.writeJson(r,o,{spaces:2});break}}}var Fc=["50","100","200","300","400","500","600","700","800","900","950"],Ac=["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone","mauve","olive","mist","taupe"],Dc={red:{50:"oklch(97.1% 0.013 17.38)",100:"oklch(93.6% 0.032 17.717)",200:"oklch(88.5% 0.062 18.334)",300:"oklch(80.8% 0.114 19.571)",400:"oklch(70.4% 0.191 22.216)",500:"oklch(63.7% 0.237 25.331)",600:"oklch(57.7% 0.245 27.325)",700:"oklch(50.5% 0.213 27.518)",800:"oklch(44.4% 0.177 26.899)",900:"oklch(39.6% 0.141 25.723)",950:"oklch(25.8% 0.092 26.042)"},orange:{50:"oklch(98% 0.016 73.684)",100:"oklch(95.4% 0.038 75.164)",200:"oklch(90.1% 0.076 70.697)",300:"oklch(83.7% 0.128 66.29)",400:"oklch(75% 0.183 55.934)",500:"oklch(70.5% 0.213 47.604)",600:"oklch(64.6% 0.222 41.116)",700:"oklch(55.3% 0.195 38.402)",800:"oklch(47% 0.157 37.304)",900:"oklch(40.8% 0.123 38.172)",950:"oklch(26.6% 0.079 36.259)"},amber:{50:"oklch(98.7% 0.022 95.277)",100:"oklch(96.2% 0.059 95.617)",200:"oklch(92.4% 0.12 95.746)",300:"oklch(87.9% 0.169 91.605)",400:"oklch(82.8% 0.189 84.429)",500:"oklch(76.9% 0.188 70.08)",600:"oklch(66.6% 0.179 58.318)",700:"oklch(55.5% 0.163 48.998)",800:"oklch(47.3% 0.137 46.201)",900:"oklch(41.4% 0.112 45.904)",950:"oklch(27.9% 0.077 45.635)"},yellow:{50:"oklch(98.7% 0.026 102.212)",100:"oklch(97.3% 0.071 103.193)",200:"oklch(94.5% 0.129 101.54)",300:"oklch(90.5% 0.182 98.111)",400:"oklch(85.2% 0.199 91.936)",500:"oklch(79.5% 0.184 86.047)",600:"oklch(68.1% 0.162 75.834)",700:"oklch(55.4% 0.135 66.442)",800:"oklch(47.6% 0.114 61.907)",900:"oklch(42.1% 0.095 57.708)",950:"oklch(28.6% 0.066 53.813)"},lime:{50:"oklch(98.6% 0.031 120.757)",100:"oklch(96.7% 0.067 122.328)",200:"oklch(93.8% 0.127 124.321)",300:"oklch(89.7% 0.196 126.665)",400:"oklch(84.1% 0.238 128.85)",500:"oklch(76.8% 0.233 130.85)",600:"oklch(64.8% 0.2 131.684)",700:"oklch(53.2% 0.157 131.589)",800:"oklch(45.3% 0.124 130.933)",900:"oklch(40.5% 0.101 131.063)",950:"oklch(27.4% 0.072 132.109)"},green:{50:"oklch(98.2% 0.018 155.826)",100:"oklch(96.2% 0.044 156.743)",200:"oklch(92.5% 0.084 155.995)",300:"oklch(87.1% 0.15 154.449)",400:"oklch(79.2% 0.209 151.711)",500:"oklch(72.3% 0.219 149.579)",600:"oklch(62.7% 0.194 149.214)",700:"oklch(52.7% 0.154 150.069)",800:"oklch(44.8% 0.119 151.328)",900:"oklch(39.3% 0.095 152.535)",950:"oklch(26.6% 0.065 152.934)"},emerald:{50:"oklch(97.9% 0.021 166.113)",100:"oklch(95% 0.052 163.051)",200:"oklch(90.5% 0.093 164.15)",300:"oklch(84.5% 0.143 164.978)",400:"oklch(76.5% 0.177 163.223)",500:"oklch(69.6% 0.17 162.48)",600:"oklch(59.6% 0.145 163.225)",700:"oklch(50.8% 0.118 165.612)",800:"oklch(43.2% 0.095 166.913)",900:"oklch(37.8% 0.077 168.94)",950:"oklch(26.2% 0.051 172.552)"},teal:{50:"oklch(98.4% 0.014 180.72)",100:"oklch(95.3% 0.051 180.801)",200:"oklch(91% 0.096 180.426)",300:"oklch(85.5% 0.138 181.071)",400:"oklch(77.7% 0.152 181.912)",500:"oklch(70.4% 0.14 182.503)",600:"oklch(60% 0.118 184.704)",700:"oklch(51.1% 0.096 186.391)",800:"oklch(43.7% 0.078 188.216)",900:"oklch(38.6% 0.063 188.416)",950:"oklch(27.7% 0.046 192.524)"},cyan:{50:"oklch(98.4% 0.019 200.873)",100:"oklch(95.6% 0.045 203.388)",200:"oklch(91.7% 0.08 205.041)",300:"oklch(86.5% 0.127 207.078)",400:"oklch(78.9% 0.154 211.53)",500:"oklch(71.5% 0.143 215.221)",600:"oklch(60.9% 0.126 221.723)",700:"oklch(52% 0.105 223.128)",800:"oklch(45% 0.085 224.283)",900:"oklch(39.8% 0.07 227.392)",950:"oklch(30.2% 0.056 229.695)"},sky:{50:"oklch(97.7% 0.013 236.62)",100:"oklch(95.1% 0.026 236.824)",200:"oklch(90.1% 0.058 230.902)",300:"oklch(82.8% 0.111 230.318)",400:"oklch(74.6% 0.16 232.661)",500:"oklch(68.5% 0.169 237.323)",600:"oklch(58.8% 0.158 241.966)",700:"oklch(50% 0.134 242.749)",800:"oklch(44.3% 0.11 240.79)",900:"oklch(39.1% 0.09 240.876)",950:"oklch(29.3% 0.066 243.157)"},blue:{50:"oklch(97% 0.014 254.604)",100:"oklch(93.2% 0.032 255.585)",200:"oklch(88.2% 0.059 254.128)",300:"oklch(80.9% 0.105 251.813)",400:"oklch(70.7% 0.165 254.624)",500:"oklch(62.3% 0.214 259.815)",600:"oklch(54.6% 0.245 262.881)",700:"oklch(48.8% 0.243 264.376)",800:"oklch(42.4% 0.199 265.638)",900:"oklch(37.9% 0.146 265.522)",950:"oklch(28.2% 0.091 267.935)"},indigo:{50:"oklch(96.2% 0.018 272.314)",100:"oklch(93% 0.034 272.788)",200:"oklch(87% 0.065 274.039)",300:"oklch(78.5% 0.115 274.713)",400:"oklch(67.3% 0.182 276.935)",500:"oklch(58.5% 0.233 277.117)",600:"oklch(51.1% 0.262 276.966)",700:"oklch(45.7% 0.24 277.023)",800:"oklch(39.8% 0.195 277.366)",900:"oklch(35.9% 0.144 278.697)",950:"oklch(25.7% 0.09 281.288)"},violet:{50:"oklch(96.9% 0.016 293.756)",100:"oklch(94.3% 0.029 294.588)",200:"oklch(89.4% 0.057 293.283)",300:"oklch(81.1% 0.111 293.571)",400:"oklch(70.2% 0.183 293.541)",500:"oklch(60.6% 0.25 292.717)",600:"oklch(54.1% 0.281 293.009)",700:"oklch(49.1% 0.27 292.581)",800:"oklch(43.2% 0.232 292.759)",900:"oklch(38% 0.189 293.745)",950:"oklch(28.3% 0.141 291.089)"},purple:{50:"oklch(97.7% 0.014 308.299)",100:"oklch(94.6% 0.033 307.174)",200:"oklch(90.2% 0.063 306.703)",300:"oklch(82.7% 0.119 306.383)",400:"oklch(71.4% 0.203 305.504)",500:"oklch(62.7% 0.265 303.9)",600:"oklch(55.8% 0.288 302.321)",700:"oklch(49.6% 0.265 301.924)",800:"oklch(43.8% 0.218 303.724)",900:"oklch(38.1% 0.176 304.987)",950:"oklch(29.1% 0.149 302.717)"},fuchsia:{50:"oklch(97.7% 0.017 320.058)",100:"oklch(95.2% 0.037 318.852)",200:"oklch(90.3% 0.076 319.62)",300:"oklch(83.3% 0.145 321.434)",400:"oklch(74% 0.238 322.16)",500:"oklch(66.7% 0.295 322.15)",600:"oklch(59.1% 0.293 322.896)",700:"oklch(51.8% 0.253 323.949)",800:"oklch(45.2% 0.211 324.591)",900:"oklch(40.1% 0.17 325.612)",950:"oklch(29.3% 0.136 325.661)"},pink:{50:"oklch(97.1% 0.014 343.198)",100:"oklch(94.8% 0.028 342.258)",200:"oklch(89.9% 0.061 343.231)",300:"oklch(82.3% 0.12 346.018)",400:"oklch(71.8% 0.202 349.761)",500:"oklch(65.6% 0.241 354.308)",600:"oklch(59.2% 0.249 0.584)",700:"oklch(52.5% 0.223 3.958)",800:"oklch(45.9% 0.187 3.815)",900:"oklch(40.8% 0.153 2.432)",950:"oklch(28.4% 0.109 3.907)"},rose:{50:"oklch(96.9% 0.015 12.422)",100:"oklch(94.1% 0.03 12.58)",200:"oklch(89.2% 0.058 10.001)",300:"oklch(81% 0.117 11.638)",400:"oklch(71.2% 0.194 13.428)",500:"oklch(64.5% 0.246 16.439)",600:"oklch(58.6% 0.253 17.585)",700:"oklch(51.4% 0.222 16.935)",800:"oklch(45.5% 0.188 13.697)",900:"oklch(41% 0.159 10.272)",950:"oklch(27.1% 0.105 12.094)"},slate:{50:"oklch(98.4% 0.003 247.858)",100:"oklch(96.8% 0.007 247.896)",200:"oklch(92.9% 0.013 255.508)",300:"oklch(86.9% 0.022 252.894)",400:"oklch(70.4% 0.04 256.788)",500:"oklch(55.4% 0.046 257.417)",600:"oklch(44.6% 0.043 257.281)",700:"oklch(37.2% 0.044 257.287)",800:"oklch(27.9% 0.041 260.031)",900:"oklch(20.8% 0.042 265.755)",950:"oklch(12.9% 0.042 264.695)"},gray:{50:"oklch(98.5% 0.002 247.839)",100:"oklch(96.7% 0.003 264.542)",200:"oklch(92.8% 0.006 264.531)",300:"oklch(87.2% 0.01 258.338)",400:"oklch(70.7% 0.022 261.325)",500:"oklch(55.1% 0.027 264.364)",600:"oklch(44.6% 0.03 256.802)",700:"oklch(37.3% 0.034 259.733)",800:"oklch(27.8% 0.033 256.848)",900:"oklch(21% 0.034 264.665)",950:"oklch(13% 0.028 261.692)"},zinc:{50:"oklch(98.5% 0 0)",100:"oklch(96.7% 0.001 286.375)",200:"oklch(92% 0.004 286.32)",300:"oklch(87.1% 0.006 286.286)",400:"oklch(70.5% 0.015 286.067)",500:"oklch(55.2% 0.016 285.938)",600:"oklch(44.2% 0.017 285.786)",700:"oklch(37% 0.013 285.805)",800:"oklch(27.4% 0.006 286.033)",900:"oklch(21% 0.006 285.885)",950:"oklch(14.1% 0.005 285.823)"},neutral:{50:"oklch(98.5% 0 0)",100:"oklch(97% 0 0)",200:"oklch(92.2% 0 0)",300:"oklch(87% 0 0)",400:"oklch(70.8% 0 0)",500:"oklch(55.6% 0 0)",600:"oklch(43.9% 0 0)",700:"oklch(37.1% 0 0)",800:"oklch(26.9% 0 0)",900:"oklch(20.5% 0 0)",950:"oklch(14.5% 0 0)"},stone:{50:"oklch(98.5% 0.001 106.423)",100:"oklch(97% 0.001 106.424)",200:"oklch(92.3% 0.003 48.717)",300:"oklch(86.9% 0.005 56.366)",400:"oklch(70.9% 0.01 56.259)",500:"oklch(55.3% 0.013 58.071)",600:"oklch(44.4% 0.011 73.639)",700:"oklch(37.4% 0.01 67.558)",800:"oklch(26.8% 0.007 34.298)",900:"oklch(21.6% 0.006 56.043)",950:"oklch(14.7% 0.004 49.25)"},mauve:{50:"oklch(98.5% 0 0)",100:"oklch(96% 0.003 325.6)",200:"oklch(92.2% 0.005 325.62)",300:"oklch(86.5% 0.012 325.68)",400:"oklch(71.1% 0.019 323.02)",500:"oklch(54.2% 0.034 322.5)",600:"oklch(43.5% 0.029 321.78)",700:"oklch(36.4% 0.029 323.89)",800:"oklch(26.3% 0.024 320.12)",900:"oklch(21.2% 0.019 322.12)",950:"oklch(14.5% 0.008 326)"},olive:{50:"oklch(98.8% 0.003 106.5)",100:"oklch(96.6% 0.005 106.5)",200:"oklch(93% 0.007 106.5)",300:"oklch(88% 0.011 106.6)",400:"oklch(73.7% 0.021 106.9)",500:"oklch(58% 0.031 107.3)",600:"oklch(46.6% 0.025 107.3)",700:"oklch(39.4% 0.023 107.4)",800:"oklch(28.6% 0.016 107.4)",900:"oklch(22.8% 0.013 107.4)",950:"oklch(15.3% 0.006 107.1)"},mist:{50:"oklch(98.7% 0.002 197.1)",100:"oklch(96.3% 0.002 197.1)",200:"oklch(92.5% 0.005 214.3)",300:"oklch(87.2% 0.007 219.6)",400:"oklch(72.3% 0.014 214.4)",500:"oklch(56% 0.021 213.5)",600:"oklch(45% 0.017 213.2)",700:"oklch(37.8% 0.015 216)",800:"oklch(27.5% 0.011 216.9)",900:"oklch(21.8% 0.008 223.9)",950:"oklch(14.8% 0.004 228.8)"},taupe:{50:"oklch(98.6% 0.002 67.8)",100:"oklch(96% 0.002 17.2)",200:"oklch(92.2% 0.005 34.3)",300:"oklch(86.8% 0.007 39.5)",400:"oklch(71.4% 0.014 41.2)",500:"oklch(54.7% 0.021 43.1)",600:"oklch(43.8% 0.017 39.3)",700:"oklch(36.7% 0.016 35.7)",800:"oklch(26.8% 0.011 36.5)",900:"oklch(21.4% 0.009 43.1)",950:"oklch(14.7% 0.004 49.3)"}},Lc={"220.9 39.3% 11%":"gray","210 20% 98%":"gray","12 76% 61%":"gray","220 70% 50%":"gray"},Ci=new Map;for(let e of Ac)for(let t of Fc)Ci.set(bi(Dc[e][t]),e);function xi(e){let t=bi(e);return t?Ci.get(t)??Lc[t]??null:null}function bi(e){if(!e)return "";let t=e.trim().replace(/\s+/g," ").toLowerCase();if(!t.startsWith("oklch(")||!t.endsWith(")"))return t;let r=t.slice(6,-1).trim(),[o]=r.split(/\s*\/\s*/),n=o.split(/\s+/);if(n.length<3)return t;let i=Dr(n[0],{percentage:true}),s=Dr(n[1]),c=Dr(n[2]);return `oklch(${i} ${s} ${c})`}function Dr(e,t={}){return t.percentage&&e.endsWith("%")?ki(Number.parseFloat(e)/100):ki(Number.parseFloat(e))}function ki(e){return Number.isNaN(e)?"":Number(e.toFixed(12)).toString()}var Wc=new Set(e$1),Jc=new Set(i$1),zc=new Set(m),Hc=new Set(n),Gc=new Set(j$2),Kc=new Set(k),Yc=new Set(f$2),qc=new Set(["eb-garamond","instrument-serif","lora","merriweather","playfair-display","noto-serif","roboto-slab"]),Xc=new Set(["jetbrains-mono","geist-mono"]),mt=["--font-sans","--font-serif","--font-mono"],Pi=new Set(mt),Zc=[...mt,"--font-heading"],$i=new Set(Zc),Si={appliedBodyVariable:null,variables:{}},Qc={0:"none","0rem":"none","0.45rem":"small","0.625rem":"default","0.875rem":"large"};async function qt(e,t){let r$1=tl(e.style);if(!r$1)return {code:null,fallbacks:[],values:null};let o=q[r$1],n=await el(e.resolvedPaths.tailwindCss),i=Kt(Wc,e.tailwind.baseColor),s=nl(n),c=il(n),l=Kt(Jc,e.iconLibrary),m=vi(n,Si),d=m??o.font,f=Ri(n,d,Si);if(!m||!f){let x=t;if(t===void 0)try{x=await Ca$1(e.resolvedPaths.cwd,{configCssFile:e.tailwind.css});}catch{x=null;}let S=await ml(e,x);m??=vi(n,S),d=m??o.font,f??=Ri(n,d,S);}let g=al(f??o.fontHeading,d,o.fontHeading),u=sl(n.rootVars["--radius"]),h=Kt(zc,e.menuAccent),y=Kt(Hc,e.menuColor),k={style:r$1,baseColor:i??o.baseColor,theme:s??o.theme,chartColor:c??o.chartColor,iconLibrary:l??o.iconLibrary,font:d,fontHeading:g,radius:u??o.radius,menuAccent:h??o.menuAccent,menuColor:y??o.menuColor},C=[!i&&"baseColor",!s&&"theme",!c&&"chartColor",!l&&"iconLibrary",!m&&"font",!f&&"fontHeading",!u&&"radius",!h&&"menuAccent",!y&&"menuColor"].filter(Boolean);return {code:r(k),fallbacks:C,values:k}}async function el(e){let t={darkVars:{},imports:[],rootVars:{},themeVars:{}};if(!e)return t;try{let r=await promises.readFile(e,"utf8");return rl(r)}catch{return t}}function tl(e){let t=c$2(e).style;return !t||!(t in q)?null:t}function rl(e){let t=Vc.parse(e),r={darkVars:{},imports:[],rootVars:{},themeVars:{}};return t.walkAtRules("import",o=>{let n=ol(o.params);n&&r.imports.push(n);}),t.walkRules(o=>{let n=o.selector.split(",").map(i=>i.trim()).filter(Boolean);n.includes(":root")&&Lr(o,r.rootVars),n.includes(".dark")&&Lr(o,r.darkVars);}),t.walkAtRules("theme",o=>{o.params.trim()==="inline"&&Lr(o,r.themeVars);}),r}function Lr(e,t){for(let r of e.nodes??[])r.type!=="decl"||!r.prop.startsWith("--")||(t[r.prop]=r.value.trim());}function ol(e){let t=e.trim();return (t.match(/^url\((['"]?)(.+?)\1\)$/)??t.match(/^(['"])(.+?)\1$/))?.[2]??null}function nl(e){let t=Yt(e.rootVars["--primary"]);if(!t)return null;let r=e.darkVars["--primary"];return r?Yt(r)===t?t:null:t}function il(e){let t=Yt(e.rootVars["--chart-1"]);if(!t)return null;let r=e.darkVars["--chart-1"];return r?Yt(r)===t?t:null:t}function Yt(e){let t=xi(e);return !t||!Yc.has(t)?null:t}function sl(e){if(!e)return null;let t=Xt(e);return Qc[t]??null}function vi(e,t){for(let r of mt){let o=Ni(e,r);if(o)return o}for(let r of mt){let o=cl(e.imports,r);if(o)return o}return ll(t)}function Ri(e,t,r){let o=_r(e,"--font-heading"),n=o?ji(o):null;if(n)return n===t?"inherit":n;let i=r.variables["--font-heading"],s=Ei(e,"--font-heading");if(!s)return i&&i!==t?i:null;let c=Mr(s);if(c&&Pi.has(c)){let l=Ni(e,c),m=r.variables[c],d=l??m??null;return !d||d===t?"inherit":d}return c==="--font-heading"?i?i===t?"inherit":i:null:i&&i!==t?i:null}function al(e,t,r){let o=e===t?"inherit":e;return Kc.has(o)?o:r}function _r(e,t,r=new Set){if(r.has(t))return null;r.add(t);let o=Ei(e,t);if(!o)return null;let n=Mr(o);return n?$i.has(n)?_r(e,n,r):null:o}function Ei(e,t){let r=e.themeVars[t];return r&&Mr(r)!==t?r:e.rootVars[t]??r??null}function Mr(e){return Xt(e).match(/^var\((--[a-z0-9-]+)\)$/)?.[1]??null}function Ni(e,t){let r=_r(e,t),o=r?ji(r):null;return o||null}function cl(e,t){let r=e.flatMap(o=>{let n=wl(o);return n&&Cl(n)===t?[n]:[]});return r.length===1?r[0]:null}function ll(e){if(e.appliedBodyVariable&&e.variables[e.appliedBodyVariable])return e.variables[e.appliedBodyVariable]??null;let t=mt.map(r=>e.variables[r]).filter(Boolean).filter((r,o,n)=>n.indexOf(r)===o);return t.length===1?t[0]:null}async function ml(e,t){let r={appliedBodyVariable:null,variables:{}};if(!t||t.framework.name!=="next-app"&&t.framework.name!=="next-pages")return r;let o=fl(e,t);if(!o)return r;try{let n=await promises.readFile(o,"utf8");return pl(n,t.framework.name)}catch{return r}}function fl(e,t){let r=t.isTsx?"tsx":"jsx",o=t.framework.name==="next-app"?t.isSrcDir?[`src/app/layout.${r}`,`app/layout.${r}`]:[`app/layout.${r}`]:t.isSrcDir?[`src/pages/_app.${r}`,`pages/_app.${r}`]:[`pages/_app.${r}`];for(let n of o){let i=N__default.join(e.resolvedPaths.cwd,n);if(existsSync(i))return i}return null}function pl(e,t){let o=new Project({compilerOptions:{}}).createSourceFile("font-source.tsx",e,{overwrite:true,scriptKind:ScriptKind.TSX}),n=new Map;for(let c of o.getImportDeclarations())if(c.getModuleSpecifierValue()==="next/font/google")for(let l of c.getNamedImports()){let m=l.getName(),d=l.getAliasNode()?.getText()??m,f=kl(m);f&&n.set(d,f);}let i={},s=new Map;for(let c of o.getVariableStatements())for(let l of c.getDeclarations()){let m=l.getInitializer();if(!m?.isKind(SyntaxKind.CallExpression))continue;let d=n.get(m.getExpression().getText());if(!d)continue;let f=dl(m);f&&(s.set(l.getName(),f),i[f]=d);}return {appliedBodyVariable:gl(o,s,t),variables:i}}function dl(e){let t=e.getArguments()[0];if(!t||!Node.isObjectLiteralExpression(t))return null;let r=t.getProperty("variable");if(!r||!Node.isPropertyAssignment(r))return null;let o=r.getInitializer();if(!o)return null;let n=Ti(o.getText());return $i.has(n)?n:null}function gl(e,t,r){let o=e.getDescendantsOfKind(SyntaxKind.JsxOpeningElement).filter(i=>r==="next-app"?i.getTagNameNode().getText()==="html":true),n=new Set;for(let i of o){let s=i.getAttribute("className");if(!s||!Node.isJsxAttribute(s))continue;let c=s.getInitializer();if(!c)continue;let l=ul(c,t),m=hl(c);if(m&&l.includes(m))return m;l.length===1&&n.add(l[0]);}return n.size===1?Array.from(n)[0]:null}function ul(e,t){let r=Node.isJsxExpression(e)?[e.getExpression(),...e.getDescendantsOfKind(SyntaxKind.PropertyAccessExpression)].filter(Boolean):[],o=new Set;for(let n of r){if(!n||!Node.isPropertyAccessExpression(n)||n.getName()!=="variable")continue;let i=n.getExpression().getText(),s=t.get(i);s&&Pi.has(s)&&o.add(s);}return Array.from(o)}function hl(e){let t=yl(e);return /\bfont-sans\b/.test(t)?"--font-sans":/\bfont-serif\b/.test(t)?"--font-serif":/\bfont-mono\b/.test(t)?"--font-mono":null}function yl(e){let t=[];(Node.isStringLiteral(e)||Node.isNoSubstitutionTemplateLiteral(e))&&t.push(e.getLiteralValue());for(let r of e.getDescendantsOfKind(SyntaxKind.StringLiteral))t.push(r.getLiteralValue());for(let r of e.getDescendantsOfKind(SyntaxKind.NoSubstitutionTemplateLiteral))t.push(r.getLiteralValue());return t.length>0?t.join(" "):e.getText()}function Ti(e){return e.replace(/^['"]|['"]$/g,"")}function ji(e){if(!e)return null;let t=Ti(e.split(",")[0]?.trim()??"").replace(/\s+variable$/i,"").trim();return t?Vr(t.replace(/\s+/g,"-")):null}function wl(e){if(!e)return null;let t=Xt(e),r="@fontsource-variable/";return t.startsWith(r)?Vr(t.slice(r.length)):null}function kl(e){return e?Vr(e.replace(/_/g,"-")):null}function Vr(e){let t=Xt(e);return Gc.has(t)?t:null}function Cl(e){return Xc.has(e)?"--font-mono":qc.has(e)?"--font-serif":"--font-sans"}function Xt(e){return e?e.trim().replace(/\s+/g," ").replace(/\s*,\s*/g,", ").replace(/"/g,"'").toLowerCase():""}function Kt(e,t){return t&&e.has(t)?t:null}var Fi=`${a$1}/code/apps/v4/registry/bases`,Ai=new Command().name("info").description("get information about your project").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("--json","output as JSON.",false).action(async e=>{try{let t=N__default.resolve(e.cwd);if(!existsSync(N__default.resolve(t,"components.json"))&&await h(t)){let c=await i(t);c.length>0&&(e.json?console.log(JSON.stringify({error:"monorepo_root",message:"You are running info from a monorepo root. Use the -c flag to specify a workspace.",targets:c.map(l=>l.name)},null,2)):j$1("info",c),process.exit(1));}let r=await Ca$1(t),o=await Y(t),n=await Fa$1(t),i$1=$(o?.style),s=await vl(r,o,n,i$1);if(e.json){console.log(JSON.stringify(s,null,2));return}Rl(s);}catch(t){ka$1(t);}});function Sl(e){if(!e)return {};let t={};for(let[r,o]of Object.entries(e))t[r]=typeof o=="string"?o:o.url;return t}async function vl(e,t,r,o){let n=t?await qt(t,e):null;return {project:e?{framework:e.framework.label,frameworkName:e.framework.name,frameworkVersion:e.frameworkVersion??null,srcDirectory:e.isSrcDir,rsc:e.isRSC,typescript:e.isTsx,tailwindVersion:e.tailwindVersion??null,tailwindConfig:e.tailwindConfigFile??null,tailwindCss:e.tailwindCssFile??null,importAlias:e.aliasPrefix??null}:null,config:t?{style:t.style,base:o,rsc:t.rsc,typescript:t.tsx,iconLibrary:t.iconLibrary??null,rtl:t.rtl??false,menuColor:t.menuColor??null,menuAccent:t.menuAccent??null,aliases:{components:t.aliases.components,utils:t.aliases.utils,ui:t.aliases.ui??null,lib:t.aliases.lib??null,hooks:t.aliases.hooks??null},resolvedPaths:{cwd:t.resolvedPaths.cwd,tailwindConfig:t.resolvedPaths.tailwindConfig||null,tailwindCss:t.resolvedPaths.tailwindCss||null,utils:t.resolvedPaths.utils,components:t.resolvedPaths.components,lib:t.resolvedPaths.lib,hooks:t.resolvedPaths.hooks,ui:t.resolvedPaths.ui},registries:Sl(t.registries)}:null,preset:n,components:r,links:{docs:`${a$1}/docs`,components:`${a$1}/docs/components/${o}/[component].md`,ui:`${Fi}/${o}/ui/[component].tsx`,examples:`${Fi}/${o}/examples/[component]-example.tsx`,schema:`${a$1}/schema.json`}}}function Rl(e){g.log(f.info("Project")),e.project?ye({framework:`${e.project.framework} (${e.project.frameworkName})`,frameworkVersion:e.project.frameworkVersion??"-",srcDirectory:e.project.srcDirectory?"Yes":"No",rsc:e.project.rsc?"Yes":"No",typescript:e.project.typescript?"Yes":"No",tailwindVersion:e.project.tailwindVersion??"-",tailwindConfig:e.project.tailwindConfig??"-",tailwindCss:e.project.tailwindCss??"-",importAlias:e.project.importAlias??"-"}):g.log(" No project info detected."),g.break(),g.log(f.info("Configuration")),e.config?(ye({style:e.config.style,base:e.config.base,rsc:e.config.rsc?"Yes":"No",typescript:e.config.typescript?"Yes":"No",iconLibrary:e.config.iconLibrary??"-",rtl:e.config.rtl?"Yes":"No",menuColor:e.config.menuColor??"-",menuAccent:e.config.menuAccent??"-"}),g.break(),Zt(e.preset),g.break(),g.log(f.info("Aliases")),ye({components:e.config.aliases.components,utils:e.config.aliases.utils,ui:e.config.aliases.ui??"-",lib:e.config.aliases.lib??"-",hooks:e.config.aliases.hooks??"-"}),g.break(),g.log(f.info("Resolved Paths")),ye({cwd:e.config.resolvedPaths.cwd,tailwindConfig:e.config.resolvedPaths.tailwindConfig??"-",tailwindCss:e.config.resolvedPaths.tailwindCss??"-",utils:e.config.resolvedPaths.utils,components:e.config.resolvedPaths.components,lib:e.config.resolvedPaths.lib,hooks:e.config.resolvedPaths.hooks,ui:e.config.resolvedPaths.ui}),Object.keys(e.config.registries).length>0&&(g.break(),g.log("registries:"),ye(e.config.registries))):g.log(" No components.json found."),g.break(),g.log(f.info("Installed Components")),e.components.length>0?g.log(` ${e.components.join(", ")}`):g.log(" No components installed."),g.break(),g.log(f.info("Links")),ye(e.links),g.break();}function Zt(e,t={}){if(g.log(f.info("Preset")),!e?.code)ye({code:"-"});else {let r=e.fallbacks??[],o=(n,i)=>{let s=r.includes(n)?"*":"";return `${i??"-"}${s}`};ye({code:e.code,version:e.code[0],style:e.values?.style??"-",baseColor:o("baseColor",e.values?.baseColor),theme:o("theme",e.values?.theme),chartColor:o("chartColor",e.values?.chartColor),iconLibrary:o("iconLibrary",e.values?.iconLibrary),font:o("font",e.values?.font),fontHeading:o("fontHeading",e.values?.fontHeading),radius:o("radius",e.values?.radius),menuAccent:o("menuAccent",e.values?.menuAccent),menuColor:o("menuColor",e.values?.menuColor),url:`${a$1}/create?preset=${e.code}`}),r.length>0&&(g.log(""),g.log(t.fallbackNote??" * Uses preset defaults for values not available as options on shadcn/create."));}}function ye(e){let t=Math.max(...Object.keys(e).map(r=>r.length));for(let[r,o]of Object.entries(e))g.log(` ${r.padEnd(t+2)}${o}`);}var Ne="latest",er=[{name:"claude",label:"Claude Code",configPath:".mcp.json",config:{mcpServers:{shadcn:{command:"npx",args:[`shadcn@${Ne}`,"mcp"]}}}},{name:"cursor",label:"Cursor",configPath:".cursor/mcp.json",config:{mcpServers:{shadcn:{command:"npx",args:[`shadcn@${Ne}`,"mcp"]}}}},{name:"vscode",label:"VS Code",configPath:".vscode/mcp.json",config:{servers:{shadcn:{command:"npx",args:[`shadcn@${Ne}`,"mcp"]}}}},{name:"codex",label:"Codex",configPath:".codex/config.toml",config:`[mcp_servers.shadcn]
122
122
  command = "npx"
123
123
  args = ["shadcn@${Ne}", "mcp"]
124
- `},{name:"opencode",label:"OpenCode",configPath:"opencode.json",config:{$schema:"https://opencode.ai/config.json",mcp:{shadcn:{type:"local",command:["npx",`shadcn@${Ne}`,"mcp"],enabled:true}}}}],Qt=[`shadcn@${Ne}`],Ur=new Command().name("mcp").description("MCP server and configuration commands").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async e=>{try{await Sa(e.cwd);let t=new StdioServerTransport;await a$3.connect(t);}catch(t){g.break(),ka$1(t);}}),Tl=Br.object({client:Br.enum(["claude","cursor","vscode","codex","opencode"]),cwd:Br.string()});Ur.command("init").description("Initialize MCP configuration for your client").option("--client <client>",`MCP client (${er.map(e=>e.name).join(", ")})`).action(async(e,t)=>{try{let o=(t.parent?.opts()||{}).cwd||process.cwd(),n=e.client;if(!n){let m=await ge({type:"select",name:"client",message:"Which MCP client are you using?",choices:er.map(p=>({title:p.label,value:p.name}))});m.client||(g.break(),process.exit(1)),n=m.client;}let i=Tl.parse({client:n,cwd:o}),s=await Y(i.cwd);if(i.client==="codex"){if(s)await Ma$1([],Qt,s,{silent:!1});else {let m=await ha(i.cwd),p=m==="npm"?"install":"add",f=m==="npm"?"--save-dev":"-D",g=D$1("Installing dependencies...").start();await execa(m,[p,f,...Qt],{cwd:i.cwd}),g.succeed("Installing dependencies.");}g.break(),g.log("To configure the shadcn MCP server in Codex:"),g.break(),g.log(`1. Open or create the file ${f.info("~/.codex/config.toml")}`),g.log("2. Add the following configuration:"),g.log(),g.info(`[mcp_servers.shadcn]
124
+ `},{name:"opencode",label:"OpenCode",configPath:"opencode.json",config:{$schema:"https://opencode.ai/config.json",mcp:{shadcn:{type:"local",command:["npx",`shadcn@${Ne}`,"mcp"],enabled:true}}}}],Qt=[`shadcn@${Ne}`],Ur=new Command().name("mcp").description("MCP server and configuration commands").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async e=>{try{await Sa(e.cwd);let t=new StdioServerTransport;await a$3.connect(t);}catch(t){g.break(),ka$1(t);}}),Tl=Br.object({client:Br.enum(["claude","cursor","vscode","codex","opencode"]),cwd:Br.string()});Ur.command("init").description("Initialize MCP configuration for your client").option("--client <client>",`MCP client (${er.map(e=>e.name).join(", ")})`).action(async(e,t)=>{try{let o=(t.parent?.opts()||{}).cwd||process.cwd(),n=e.client;if(!n){let m=await ge({type:"select",name:"client",message:"Which MCP client are you using?",choices:er.map(d=>({title:d.label,value:d.name}))});m.client||(g.break(),process.exit(1)),n=m.client;}let i=Tl.parse({client:n,cwd:o}),s=await Y(i.cwd);if(i.client==="codex"){if(s)await Ma$1([],Qt,s,{silent:!1});else {let m=await ha(i.cwd),d=m==="npm"?"install":"add",f=m==="npm"?"--save-dev":"-D",g=D$1("Installing dependencies...").start();await execa(m,[d,f,...Qt],{cwd:i.cwd}),g.succeed("Installing dependencies.");}g.break(),g.log("To configure the shadcn MCP server in Codex:"),g.break(),g.log(`1. Open or create the file ${f.info("~/.codex/config.toml")}`),g.log("2. Add the following configuration:"),g.log(),g.info(`[mcp_servers.shadcn]
125
125
  command = "npx"
126
- args = ["shadcn@${Ne}", "mcp"]`),g.break(),g.info("3. Restart Codex to load the MCP server"),g.break(),process.exit(0);}let c=D$1("Configuring MCP server...").start(),l=await Ol(i);if(c.succeed("Configuring MCP server."),s)await Ma$1([],Qt,s,{silent:!1});else {let m=await ha(i.cwd),p=m==="npm"?"install":"add",f=m==="npm"?"--save-dev":"-D",g=D$1("Installing dependencies...").start();await execa(m,[p,f,...Qt],{cwd:i.cwd}),g.succeed("Installing dependencies.");}g.break(),g.success(`Configuration saved to ${l}.`),g.break();}catch(r){ka$1(r);}});var jl=(e,t)=>t;async function Ol(e){let{client:t,cwd:r}=e,o=er.find(l=>l.name===t);if(!o)throw new Error(`Unknown client: ${t}. Available clients: ${er.map(l=>l.name).join(", ")}`);let n=N__default.join(r,o.configPath),i=N__default.dirname(n);await D.ensureDir(i);let s={};try{let l=await promises.readFile(n,"utf-8");s=JSON.parse(l);}catch{}let c=vn(s,o.config,{arrayMerge:jl});return await promises.writeFile(n,JSON.stringify(c,null,2)+`
127
- `,"utf-8"),o.configPath}async function Ui(e,t={}){if(!e.resolvedPaths.tailwindCss)throw new Error("We could not find a valid CSS file in your `components.json` file. Please ensure you have a valid `tailwind.css` path in your `components.json` file.");if(!e.tailwind.cssVariables)throw new Error("The `base-color` migration requires CSS variables. Your `components.json` has `cssVariables: false`, which uses inline Tailwind color classes instead of theme variables.");let r=b$1.map(C=>({title:C.label,value:C.name})),o=b$1.map(C=>C.name);if(t.to&&!o.includes(t.to))throw new Error(`Unknown base color: ${t.to}. Available base colors: ${o.join(", ")}.`);let n=t.from||e.tailwind.baseColor,i=t.to;if(!n||!i){let C=r.findIndex(S=>S.value===e.tailwind.baseColor),x=await ge([{type:n?null:"select",name:"sourceBaseColor",message:`Which base color would you like to ${f.info("migrate from")}?`,choices:r,initial:C===-1?0:C},{type:i?null:"select",name:"targetBaseColor",message:`Which base color would you like to ${f.info("migrate to")}?`,choices:r}]);n=n||x.sourceBaseColor,i=i||x.targetBaseColor;}if((!n||!i)&&(g.info("Migration cancelled."),process.exit(0)),n===i)throw new Error("You cannot migrate to the same base color. Please choose a different base color.");if(!t.yes){let C=`./${N__default.relative(e.resolvedPaths.cwd,e.resolvedPaths.tailwindCss)}`,{confirm:x}=await ge({type:"confirm",name:"confirm",initial:true,message:`We will migrate ${f.info(C)} from ${f.info(n)} to ${f.info(i)}. Continue?`});x||(g.info("Migration cancelled."),process.exit(0));}let s=await ua(n),c=await ua(i);if(!s)throw new Error(`Unknown base color: ${n}.`);if(!c)throw new Error("Something went wrong fetching the base colors.");let m=(await Ca$1(e.resolvedPaths.cwd))?.tailwindVersion??"v4",p=Vi(s,m),f$1=Vi(c,m),g$1=D$1("Migrating base color...")?.start(),u=await promises.readFile(e.resolvedPaths.tailwindCss,"utf-8"),{cssVars:h,skipped:y}=Dl(u,p,f$1,m);(Object.keys(h.light).length>0||Object.keys(h.dark).length>0)&&await Ha$1(h,e,{overwriteCssVars:true,tailwindVersion:m,silent:true}),g$1.succeed("Migration complete."),await Ml(e,i);let k=new Map;for(let{token:C,reason:x}of y)k.has(C)||k.set(C,x);if(k.size>0){g.break(),g.warn(`Skipped ${k.size} token${k.size===1?"":"s"}. These were left untouched:`);for(let[C,x]of Array.from(k))g.warn(` - ${C}: ${x}`);}}function Dl(e,t,r,o){let n=Ll(e),i={},s={},c=[],l=[{mode:"light",selector:":root",target:i},{mode:"dark",selector:".dark",target:s}];for(let{mode:m,selector:p,target:f}of l)for(let[g,u]of Object.entries(t[m]??{})){let h=r[m]?.[g];if(h===void 0||tr(u)===tr(h))continue;let y=`--${g.replace(/^--/,"")}`,k=n[p][y];if(k===void 0){c.push({token:y,reason:"not found in your CSS"});continue}tr(k)===tr(_l(u,o))?f[g]=h:c.push({token:y,reason:"does not match the source base color"});}return {cssVars:{light:i,dark:s},skipped:c}}function Vi(e,t){return t==="v4"&&e.cssVarsV4?e.cssVarsV4:e.cssVars}function Ll(e){let t={":root":{},".dark":{}};return Vc.parse(e).walkRules(r=>{r.selector!==":root"&&r.selector!==".dark"||r.walkDecls(o=>{o.prop.startsWith("--")&&(t[r.selector][o.prop]=o.value);});}),t}function _l(e,t){return t==="v4"&&Ja$1(e)?`hsl(${e})`:e}function tr(e){return e.trim().replace(/\s+/g," ")}async function Ml(e,t){let r=N__default.resolve(e.resolvedPaths.cwd,"components.json");if(!D.existsSync(r))return;let o=await D.readJson(r);o.tailwind?.baseColor!==t&&(o.tailwind={...o.tailwind,baseColor:t},await D.writeJson(r,o,{spaces:2}),g.info(`Updated ${f.info("baseColor")} in components.json to ${f.info(t)}.`));}var Ul="**/*.{js,jsx,ts,tsx,mjs,mts,cjs,cts,vue,svelte,astro}",Wl=["**/node_modules/**","**/.git/**","**/.next/**","**/.nuxt/**","**/.svelte-kit/**","**/.astro/**","**/.output/**","**/.vercel/**","**/dist/**","**/build/**","**/out/**","**/coverage/**"];async function Wi(e,t){if(!t)return Jr(e);if(t.includes("*")){let n=await Jr(e,t);if(!n.length)throw new Error(`No files found matching: ${t}`);return n}let r=N__default.resolve(e,t),o=await promises.stat(r).catch(()=>null);if(!o)throw new Error(`File not found: ${t}`);if(o.isFile())return [r];if(o.isDirectory()){let n=await Jr(r);if(!n.length)throw new Error(`No files found matching: ${t}`);return n}throw new Error(`Unsupported path type: ${t}`)}function Jr(e,t=Ul){return Qr(t,{cwd:e,absolute:true,onlyFiles:true,ignore:Wl,suppressErrors:true,dot:true})}function Hr(e,t){let r=[],o=/<script\b([^>]*)>([\s\S]*?)<\/script(?:\s[^>]*)?>/gi,n;for(;(n=o.exec(e))!==null;){let i=n[1],s=n[2],c=n[0].indexOf(s),l=i.match(/\blang=["'](js|jsx|ts|tsx)["']/i)?.[1];r.push({start:n.index+c,end:n.index+c+s.length,filename:`${t}.${r.length}.${l?.toLowerCase()??"js"}`});}return r}function Ji(e,t){let r=e.match(/^(?:\uFEFF)?---[\t ]*\r?\n([\s\S]*?)\r?\n---/);if(!r||r.index===void 0)return [];let o=r[1],n=r[0].indexOf(o);return [{start:r.index+n,end:r.index+n+o.length,filename:`${t}.frontmatter.ts`}]}function zi(e){let t=N__default.basename(e).replace(/[^a-zA-Z0-9_.-]/g,"-");return t.match(/\.(?:js|jsx|ts|tsx|mjs|mts|cjs|cts)$/)?`/${t}`:`/${t}.tsx`}function Hi(e){switch(N__default.extname(e).toLowerCase()){case ".ts":case ".mts":case ".cts":return ScriptKind.TS;case ".tsx":return ScriptKind.TSX;case ".jsx":return ScriptKind.JSX;default:return ScriptKind.JS}}function qi(e,t,r){let o=Zi(t).filter(c=>c.kind==="esm"),n=Qi(t).filter(c=>c.kind==="esm"),i=0,s=[];for(let c of e.getFunctions()){let l=c.getNameNode();if(!l)continue;let m=Gi(c);m&&s.push({statement:c,name:l,...m,isInlineExport:c.isExported()&&!c.isDefaultExport(),isDefaultExport:c.isDefaultExport()});}for(let c of e.getVariableStatements()){if(c.getDeclarations().length!==1)continue;let l=c.getDeclarations()[0],m=l.getNameNode(),p=l.getInitializer();if(!Node.isIdentifier(m)||!Node.isArrowFunction(p)&&!Node.isFunctionExpression(p))continue;let f=Gi(p);f&&s.push({statement:c,name:m,...f,isInlineExport:c.isExported(),isDefaultExport:false});}for(let c of s){if(!Jl(c.expression,c.restName,o,n))continue;let l=c.name.findReferencesAsNodes(),m=l.map(g=>g.getParentIfKind(SyntaxKind.ExportSpecifier)).filter(g=>g!==void 0);if(l.length!==m.length||!c.isInlineExport&&!c.isDefaultExport&&!m.length)continue;let p=new Set;c.isInlineExport&&p.add(c.name.getText()),c.isDefaultExport&&p.add("default");for(let g of m){p.add(g.getAliasNode()?.getText()??g.getNameNode().getText());let u=g.getExportDeclaration();u.getNamedExports().length===1?u.remove():g.remove();}let f=e.getStatements().findIndex(g=>g===c.statement);c.statement.remove(),e.insertExportDeclaration(Math.max(f,0),{moduleSpecifier:"cn",namedExports:Array.from(p).map(g=>({name:"cn",alias:g==="cn"?void 0:g}))}),r.add("clsx"),r.add("tailwind-merge"),i++;}return i}function Gi(e){let t=e.getParameters();if(t.length!==1||!t[0].isRestParameter())return null;let r=t[0].getNameNode(),o=e.getBody();if(!Node.isIdentifier(r)||!o)return null;if(!Node.isBlock(o))return {expression:o,restName:r.getText()};let n=o.getStatements();if(n.length!==1||!Node.isReturnStatement(n[0]))return null;let i=n[0].getExpression();return i?{expression:i,restName:r.getText()}:null}function Jl(e,t,r,o){if(!Node.isCallExpression(e)||!Ki(e,o))return false;let n=e.getArguments();if(n.length!==1||!Node.isCallExpression(n[0])||!Ki(n[0],r))return false;let i=n[0].getArguments();if(i.length!==1)return false;let s=i[0];return Node.isIdentifier(s)?s.getText()===t:Node.isSpreadElement(s)&&Node.isIdentifier(s.getExpression())&&s.getExpression().getText()===t}function Xi(e,t){let r=Zi(t),o=Qi(t),n=[];for(let i of e.getDescendantsOfKind(SyntaxKind.CallExpression)){let s=Gr(i,o);if(!s)continue;let c=false,l=i.getArguments().flatMap(m=>{let p=Gr(m,r);if(!p||p.kind!==s.kind)return [m.getText()];c=true;let f=zl(m);return f?[f]:[]});c&&n.push({outerCall:i,argumentsText:l.join(", "),kind:s.kind});}return n}function Zi(e){return e.filter(t=>t.module.startsWith("clsx")&&(t.importedName==="default"||t.importedName==="clsx"))}function Qi(e){return e.filter(t=>t.module==="tailwind-merge"&&t.importedName==="twMerge")}function Ki(e,t){return Gr(e,t)!==null}function Gr(e,t){if(!Node.isCallExpression(e))return null;let r=e.getExpression();return Node.isIdentifier(r)?t.find(o=>o.localName===r.getText()&&o.identifier.findReferencesAsNodes().some(n=>n.getStart()===r.getStart()))??null:null}function zl(e){return Node.isCallExpression(e)?e.getArguments().map(t=>Node.isIdentifier(t)&&t.getFirstAncestor(n=>Node.isFunctionLikeDeclaration(n))?.getParameters().find(n=>n.isRestParameter()&&n.getNameNode().getText()===t.getText())?`...${t.getText()}`:t.getText()).join(", "):""}function rs(e,t){let r=0;for(let o of e.getImportDeclarations())o.getModuleSpecifierValue()==="cnfast"&&(o.setModuleSpecifier("cn"),r++);for(let o of e.getExportDeclarations())o.getModuleSpecifierValue()==="cnfast"&&(o.setModuleSpecifier("cn"),r++);for(let o of e.getDescendantsOfKind(SyntaxKind.CallExpression)){let n=o.getExpression();if(n.getKind()!==SyntaxKind.ImportKeyword&&(!Node.isIdentifier(n)||n.getText()!=="require"))continue;let i=o.getArguments()[0];Node.isStringLiteral(i)&&i.getLiteralValue()==="cnfast"&&(i.replaceWithText('"cn"'),r++);}return r&&t.add("cnfast"),r}function ft(e){let t=e.getSymbol()?.compilerSymbol,r=e.getSourceFile().getDescendantsOfKind(SyntaxKind.Identifier).filter(n=>n!==e),o=r.filter(n=>t&&n.getSymbol()?.compilerSymbol===t);for(let n of e.findReferencesAsNodes()){let i=r.find(s=>s.getStart()===n.getStart()&&s.getText()===n.getText());i&&!o.includes(i)&&o.push(i);}return o}function or(e,t){let r=ft(e);return t==="validators"&&r.some(n=>{let i=n.getParentIfKind(SyntaxKind.PropertyAccessExpression);if(i){let c=i.getParentIfKind(SyntaxKind.CallExpression);if(c!==void 0&&c.getExpression().getStart()===i.getStart())return true}let s=n.getParentIfKind(SyntaxKind.VariableDeclaration);return s!==void 0&&Node.isObjectBindingPattern(s.getNameNode())&&s.getInitializer()?.getStart()===n.getStart()})?"callable validators are not supported by cn":t==="createTailwindMerge"&&r.some(n=>{let i=n.getParentIfKind(SyntaxKind.CallExpression);return i!==void 0&&i.getExpression().getStart()===n.getStart()&&i.getArguments().length>1})?"variadic createTailwindMerge calls are not supported by cn":null}function os(e,t,r){let o=new Set(e.getDescendantsOfKind(SyntaxKind.Identifier).map(i=>i.getText()));if(!o.has(t))return t;if(!o.has(r))return r;let n=2;for(;o.has(`${r}${n}`);)n++;return `${r}${n}`}function nr(e){if(!Node.isCallExpression(e)||e.getExpression().getText()!=="require")return null;let t=e.getArguments();if(t.length!==1||!Node.isStringLiteral(t[0]))return null;let r=t[0].getLiteralValue();return Hl(r)?r:null}function Hl(e){return e==="clsx"||e==="clsx/lite"||e==="tailwind-merge"}function ns(e){return [...Gl(e),...Kl(e)]}function Gl(e){let t=[];for(let r of e.getImportDeclarations()){let o=r.getModuleSpecifierValue();if(!Yl(o))continue;let n=r.getDefaultImport();n&&o.startsWith("clsx")&&t.push({identifier:n,localName:n.getText(),importedName:"default",module:o,kind:"esm"});for(let i of r.getNamedImports()){if(r.isTypeOnly()||i.isTypeOnly())continue;let s=i.getAliasNode()??i.getNameNode();Node.isIdentifier(s)&&t.push({identifier:s,localName:s.getText(),importedName:i.getName(),module:o,kind:"esm"});}}return t}function Kl(e){let t=[];for(let r of e.getVariableDeclarations()){let o=r.getInitializer();if(!o||!Node.isCallExpression(o))continue;let n=nr(o);if(!n)continue;let i=r.getNameNode();if(Node.isIdentifier(i)&&n.startsWith("clsx")){t.push({identifier:i,localName:i.getText(),importedName:"default",module:n,kind:"cjs"});continue}if(Node.isObjectBindingPattern(i))for(let s of i.getElements()){let c=s.getNameNode();Node.isIdentifier(c)&&t.push({identifier:c,localName:c.getText(),importedName:s.getPropertyNameNode()?.getText()??c.getText(),module:n,kind:"cjs"});}}return t}function Yl(e){return e==="clsx"||e==="clsx/lite"||e==="tailwind-merge"}function ss(e,t){let r=t==="cn"?"cn":`cn: ${t}`,o=e.getStatements(),n=0;for(;n<o.length;){let i=o[n];if(Node.isExpressionStatement(i)&&Node.isStringLiteral(i.getExpression())){n++;continue}break}e.insertStatements(n,`const { ${r} } = require("cn")`);}function as(e,t){for(let r of ql(t)){let o=e.getImportDeclarations().find(i=>i.getModuleSpecifierValue()===r.moduleSpecifier&&!i.getNamespaceImport()&&!i.isTypeOnly());o??=e.addImportDeclaration({moduleSpecifier:r.moduleSpecifier}),o.getNamedImports().some(i=>{let s=i.getAliasNode()?.getText()??i.getNameNode().getText();return i.getName()===r.importedName&&s===r.localName})||o.addNamedImport({name:r.importedName,alias:r.importedName===r.localName?void 0:r.localName,isTypeOnly:r.isTypeOnly});}}function ql(e){return e.filter((t,r)=>e.findIndex(o=>o.moduleSpecifier===t.moduleSpecifier&&o.importedName===t.importedName&&o.localName===t.localName&&o.isTypeOnly===t.isTypeOnly)===r)}var ir=["clsx","tailwind-merge","cnfast"],cs=new Set(["twMerge","twJoin","ClassNameValue"]),ls=new Map([["extendTailwindMerge","extendTailwindMerge"],["createTailwindMerge","createTwMerge"],["getDefaultConfig","defaultConfig"],["fromTheme","fromTheme"],["validators","validators"],["mergeConfigs","mergeConfigs"],["ConfigExtension","ConfigExtension"],["DefaultClassGroupIds","DefaultClassGroupIds"],["DefaultThemeGroupIds","DefaultThemeGroupIds"]]);function fs(e,t){Zl(e,t),Ql(e,t);}function Zl(e,t){for(let r of e.getDescendantsOfKind(SyntaxKind.CallExpression)){if(r.getExpression().getKind()!==SyntaxKind.ImportKeyword)continue;let o=r.getArguments()[0];if(!o||!Node.isStringLiteral(o))continue;let n=o.getLiteralValue();ds(n)&&t.push({packageName:ps(n),reason:"dynamic imports require manual migration"});}}function Ql(e,t){for(let r of e.getExportDeclarations()){let o=r.getModuleSpecifierValue();if(!o||!ds(o))continue;let n=ps(o),i=r.getNamedExports();if(!i.length){t.push({packageName:n,reason:"export-from declarations require manual migration"});continue}for(let s of i)t.push({packageName:n,symbol:s.getName(),reason:"export-from declarations require manual migration"});}}function Yr(e){return ir.filter(t=>{let r=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`(?:from\\s*|import\\s*\\(|require\\s*\\()\\s*["']${r}(?:/lite)?["']`).test(e)})}function qr(e){return e.filter((t,r)=>e.findIndex(o=>o.packageName===t.packageName&&o.symbol===t.symbol&&o.reason===t.reason)===r)}function ps(e){return e.startsWith("clsx")?"clsx":"tailwind-merge"}function ds(e){return e==="clsx"||e==="clsx/lite"||e==="tailwind-merge"}function hs(e,t,r,o,n){let i=em(e,t,r,o,n)+tm(e,r,o);return fs(e,r),as(e,t),i}function em(e,t,r,o,n){let i=0;for(let s of [...e.getImportDeclarations()]){let c=s.getModuleSpecifierValue();if(!om(c))continue;let l=ys(c),m=!!s.getImportClause(),p=s.getNamespaceImport();p&&r.push({packageName:l,symbol:p.getText(),reason:"namespace imports cannot be migrated safely"});let f=s.getDefaultImport();f&&(l==="clsx"?(us(f,n)&&t.push({moduleSpecifier:c==="clsx/lite"?"cn/lite":"cn",importedName:"clsx",localName:f.getText(),isTypeOnly:false}),s.removeDefaultImport(),o.add("clsx"),i++):r.push({packageName:l,symbol:f.getText(),reason:"tailwind-merge has no compatible default import mapping"}));for(let g of [...s.getNamedImports()]){let u=g.getName(),h=g.getAliasNode()?.getText()??g.getNameNode().getText(),y=s.isTypeOnly()||g.isTypeOnly(),k=Xr(c,u,y);if(!k){r.push({packageName:l,symbol:u,reason:u.startsWith("Experimental")||u==="experimentalParseClassName"?"experimentalParseClassName is not supported by cn":"no compatible cn export is available"});continue}let C=g.getAliasNode()??g.getNameNode();if(!Node.isIdentifier(C)){r.push({packageName:l,symbol:u,reason:"string-named imports cannot be migrated safely"});continue}let x=or(C,u);if(x){r.push({packageName:l,symbol:u,reason:x});continue}us(C,n)&&t.push({...k,localName:h,isTypeOnly:y}),g.remove(),o.add(l),i++;}m&&!s.getDefaultImport()&&!s.getNamespaceImport()&&s.getNamedImports().length===0?s.remove():m||r.push({packageName:l,reason:"side-effect imports are left unchanged"});}return i}function Xr(e,t,r){if(e==="clsx")return {moduleSpecifier:"cn",importedName:t==="default"?"clsx":t};if(e==="clsx/lite")return (t==="clsx"||t==="default")&&!r?{moduleSpecifier:"cn/lite",importedName:"clsx"}:["ClassValue","ClassArray","ClassDictionary"].includes(t)?{moduleSpecifier:"cn",importedName:t}:null;if(cs.has(t))return {moduleSpecifier:"cn",importedName:t};let o=ls.get(t);return o?{moduleSpecifier:"cn/config",importedName:o}:null}function tm(e,t,r){let o=0;for(let n of e.getVariableDeclarations()){let i=n.getInitializer();if(!i||!Node.isCallExpression(i))continue;let s=nr(i);if(!s)continue;let c=ys(s),l=n.getNameNode();if(Node.isIdentifier(l)&&s.startsWith("clsx")){ft(l).length?i.replaceWithText(`require(${JSON.stringify(s==="clsx/lite"?"cn/lite":"cn")}).clsx`):gs(n),r.add("clsx"),o++;continue}if(!Node.isObjectBindingPattern(l)){t.push({packageName:c,reason:"this CommonJS require shape cannot be migrated safely"});continue}let m=l.getElements(),p=m.find(u=>{let h=u.getNameNode(),y=u.getPropertyNameNode()?.getText()??h.getText();return Node.isIdentifier(h)&&or(h,y)});if(p){let u=p.getNameNode(),h=p.getPropertyNameNode()?.getText()??u.getText();t.push({packageName:c,symbol:h,reason:or(u,h)});continue}if(m.every(u=>{let h=u.getNameNode();return Node.isIdentifier(h)&&!ft(h).length})){gs(n),r.add(c),o++;continue}let f=m.map(u=>u.getPropertyNameNode()?.getText()??u.getNameNode().getText()),g=new Set(f.map(u=>Xr(s,u,false)?.moduleSpecifier??null));if(g.size!==1||g.has(null)){t.push({packageName:c,reason:"mixed or unsupported CommonJS exports require manual migration"});continue}i.getArguments()[0].replaceWithText(JSON.stringify(Array.from(g)[0]));for(let u of m){let h=u.getPropertyNameNode()?.getText()??u.getNameNode().getText(),y=Xr(s,h,false);y.importedName!==h&&u.replaceWithText(`${y.importedName}: ${u.getNameNode().getText()}`);}r.add(c),o++;}return o}function gs(e){let t=e.getVariableStatement();t?.getDeclarations().length===1?t.remove():e.remove();}function us(e,t){return ft(e).length>0||rm(t,e.getText())}function rm(e,t){if(!e)return false;let r=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`(^|[^a-zA-Z0-9_$])${r}(?=$|[^a-zA-Z0-9_$])`).test(e)}function ys(e){return e.startsWith("clsx")?"clsx":"tailwind-merge"}function om(e){return e==="clsx"||e==="clsx/lite"||e==="tailwind-merge"}function ks(){let e=new Project({useInMemoryFileSystem:true,compilerOptions:{allowJs:true}});return (t,r="source.tsx")=>{let o=N__default.extname(r).toLowerCase();return o===".vue"||o===".svelte"?ws(t,Hr(t,r),e):o===".astro"?ws(t,[...Ji(t,r),...Hr(t,r)],e):Cs(t,r,e)}}function Cs(e,t,r,o=""){let n=r.createSourceFile(zi(t),e,{scriptKind:Hi(t),overwrite:true}),i=[],s=[],c=new Set,l=rs(n,c),m=ns(n);l+=qi(n,m,c);let p=Xi(n,m);if(p.length){let g=os(n,"cn","cnMerge");p.some(h=>h.kind==="esm")?i.push({moduleSpecifier:"cn",importedName:"cn",localName:g,isTypeOnly:false}):ss(n,g);for(let{outerCall:h,argumentsText:y}of p.reverse())h.replaceWithText(`${g}(${y})`),l++;c.add("clsx"),c.add("tailwind-merge");}l+=hs(n,i,s,c,o);let f={content:n.getText(),changes:l,migratedPackages:Array.from(c),remainingPackages:Yr(n.getText()),unsupported:qr(s)};return r.removeSourceFile(n),f}function ws(e,t,r){let o=e,n=0,i=new Set,s=[];for(let c of t.sort((l,m)=>m.start-l.start)){let l=o.slice(c.start,c.end),m=`${o.slice(0,c.start)}${o.slice(c.end)}`,p=Cs(l,c.filename,r,m);o=`${o.slice(0,c.start)}${p.content}${o.slice(c.end)}`,n+=p.changes,p.migratedPackages.forEach(f=>i.add(f)),s.push(...p.unsupported);}return {content:o,changes:n,migratedPackages:Array.from(i),remainingPackages:Yr(o),unsupported:qr(s)}}async function Zr(e){if(!D.existsSync(N__default.resolve(e.cwd,"package.json")))throw new Error("No `package.json` file found. Ensure you are at the root of your project.");let t=await Wi(e.cwd,e.path),r=await Promise.all(t.map(f=>promises.readFile(f,"utf-8"))),o=ks(),n=t.map((f,g)=>{let u=r[g];return {file:f,content:u,result:o(u,f)}}),i=n.filter(({content:f,result:g})=>f!==g.content),s=n.flatMap(({file:f,result:g})=>g.unsupported.map(u=>({...u,file:f}))),c=new Set(n.flatMap(({result:f})=>f.migratedPackages));if(!i.length){g.info("No supported clsx, tailwind-merge or cnfast usage found."),vs(s,e.cwd);return}if(cm(e.cwd,c),!e.yes){let{confirm:f$1}=await ge({type:"confirm",name:"confirm",initial:true,message:`We will migrate ${f.info(i.length)} file(s) to ${f.info("cn")}${s.length?` and leave ${f.warn(s.length)} item(s) for manual review`:""}. Continue?`});if(!f$1){g.info("Migration cancelled.");return}}let l=D$1("Migrating to cn...")?.start();await Na$1(e.cwd,["cn"]);for(let{file:f,result:g}of i)await promises.writeFile(f,g.content);l?.succeed(`Migrated ${i.length} file${i.length===1?"":"s"}.`);let m=new Set(n.flatMap(({result:f})=>f.remainingPackages)),p=e.path?[]:ir.filter(f=>c.has(f)&&!m.has(f));if(p.length)try{await Oa$1(e.cwd,p);}catch{g.warn(`Could not remove ${p.join(", ")}. Remove them manually after reviewing the migration.`);}e.path&&g.info("Kept clsx, tailwind-merge and cnfast dependencies because this was a scoped migration."),vs(s,e.cwd);}function cm(e,t){if(!t.has("tailwind-merge"))return;let r=A(e,false),o=bs(r,"tailwindcss"),n=bs(r,"tailwind-merge");if((Ss(o)??4)<4||(Ss(n)??3)<3)throw new Error("The cn migration requires Tailwind CSS v4 and tailwind-merge v3. Tailwind CSS v3 projects should continue using tailwind-merge v2.")}function bs(e,t){return e?.dependencies?.[t]??e?.devDependencies?.[t]??e?.optionalDependencies?.[t]??e?.peerDependencies?.[t]}function Ss(e){if(!e||/^(?:workspace|file|link|git|https?):/i.test(e))return null;let t=e.match(/(?:^|[^0-9])(\d+)(?:\.|$)/);return t?Number(t[1]):null}function vs(e,t){if(e.length){g.break(),g.warn(`Manual review required for ${e.length} item${e.length===1?"":"s"}:`);for(let r of e){let o=r.file?N__default.relative(t,r.file):"unknown file",n=r.symbol?` (${r.symbol})`:"";g.warn(` - ${o}${n}: ${r.reason}`);}}}var Te={...a$4,radix:{name:"radix",title:"Radix Icons",packages:["@radix-ui/react-icons"],import:"import { ICON } from '@radix-ui/react-icons'",usage:"<ICON />",export:"@radix-ui/react-icons"}};async function $s(e,t={}){let r,o;if(t.path){if(o=e.resolvedPaths.cwd,t.path.includes("*"))r=await Qr(t.path,{cwd:o,onlyFiles:true,ignore:["**/node_modules/**"]});else {let u=N__default.resolve(o,t.path),h=await promises.stat(u).catch(()=>null);if(!h)throw new Error(`File not found: ${t.path}`);if(h.isDirectory())o=u,r=await Qr("**/*.{js,ts,jsx,tsx}",{cwd:o,onlyFiles:true,ignore:["**/node_modules/**"]});else if(h.isFile())r=[t.path];else throw new Error(`Unsupported path type: ${t.path}`)}if(r.length===0)throw new Error(`No files found matching: ${t.path}`)}else {if(!e.resolvedPaths.ui)throw new Error("We could not find a valid `ui` path in your `components.json` file. Please ensure you have a valid `ui` path in your `components.json` file.");o=e.resolvedPaths.ui,r=await Qr("**/*.{js,ts,jsx,tsx}",{cwd:o});}let n=await sa$1();if(Object.keys(n).length===0)throw new Error("Something went wrong fetching the registry icons.");let i=Object.entries(Te).map(([g,u])=>({title:u.title,value:g}));for(let g of [t.from,t.to])if(g&&!(g in Te))throw new Error(`Unknown icon library: ${g}. Available libraries: ${Object.keys(Te).join(", ")}.`);let s=t.from,c=t.to;if(!s||!c){let g=i.findIndex(h=>h.value===e.iconLibrary),u=await ge([{type:s?null:"select",name:"sourceLibrary",message:`Which icon library would you like to ${f.info("migrate from")}?`,choices:i,initial:g===-1?0:g},{type:c?null:"select",name:"targetLibrary",message:`Which icon library would you like to ${f.info("migrate to")}?`,choices:i}]);s=s??u.sourceLibrary,c=c??u.targetLibrary;}if((!s||!c)&&(g.info("Migration cancelled."),process.exit(0)),s===c)throw new Error("You cannot migrate to the same icon library. Please choose a different icon library.");let l=Te[s],m=Te[c];if(!t.yes){let g$1=t.path?t.path:`./${N__default.relative(e.resolvedPaths.cwd,o)}`,{confirm:u}=await ge({type:"confirm",name:"confirm",initial:true,message:`We will migrate ${f.info(r.length)} files in ${f.info(g$1)} from ${f.info(l.title)} to ${f.info(m.title)}. Continue?`});u||(g.info("Migration cancelled."),process.exit(0));}await Ma$1([...m.packages],[],e,{silent:false});let p=D$1("Migrating icons...")?.start(),f$1=new Map;if(await Promise.all(r.map(async g=>{p.text=`Migrating ${g}...`;let u=N__default.join(o,g),h=await promises.readFile(u,"utf-8"),{content:y,skipped:k}=await gm(h,s,c,n);for(let C of k)f$1.has(C.icon)||f$1.set(C.icon,C.reason);await promises.writeFile(u,y);})),p.succeed("Migration complete."),t.path||await dm(e,c),f$1.size>0){g.break(),g.warn(`Skipped ${f$1.size} icon${f$1.size===1?"":"s"}. These were left untouched:`);for(let[g$1,u]of Array.from(f$1))g.warn(` - ${g$1}: ${u}`);}}async function dm(e,t){let r=N__default.resolve(e.resolvedPaths.cwd,"components.json");if(!D.existsSync(r))return;let o=await D.readJson(r);o.iconLibrary!==t&&(o.iconLibrary=t,await D.writeJson(r,o,{spaces:2}),g.info(`Updated ${f.info("iconLibrary")} in components.json to ${f.info(t)}.`));}async function gm(e,t,r,o){let n=Te[t],i=Te[r],s=b$2(n.import),c=c$4(n.usage),l=c$4(i.usage);if(!s)throw new Error(`Could not resolve the icon import for ${n.title}.`);let m=um(o,t),p=[],f=await promises.mkdtemp(N__default.join(tmpdir(),"shadcn-")),g=new Project({compilerOptions:{}}),u=N__default.join(f,`shadcn-icons-${randomBytes(4).toString("hex")}.tsx`),h=g.createSourceFile(u,e,{scriptKind:ScriptKind.TSX}),y=[];for(let k of h.getImportDeclarations()??[])if(!(k.getModuleSpecifier()?.getLiteralValue()!==s||k.isTypeOnly())){for(let C of [...k.getNamedImports()??[]]){if(C.isTypeOnly())continue;let x=C.getName(),S=C.getAliasNode()?.getText()??x,O=m.get(x),v=O?o[O]?.[r]:void 0;if(!v){p.push({icon:x,reason:`no ${i.title} equivalent found`});continue}let F=hm(h,S,c);if(F.complex){p.push({icon:x,reason:"unsupported usage (e.g. referenced outside JSX)"});continue}if(l.componentName!=="ICON"&&(F.references>0||F.paired>0)){p.push({icon:x,reason:`cannot be wrapped in <${l.componentName} />`});continue}C.remove(),ym(h,S,v,c,l),y.includes(v)||y.push(v);}k.getNamedImports()?.length===0&&!k.getDefaultImport()&&!k.getNamespaceImport()&&k.remove();}if(c.componentName!=="ICON"&&y.length>0&&km(h,n.import,c),y.length>0)for(let k of a$5(i.import)){let C=k.namedImports.flatMap(S=>S==="ICON"?y:[S]);!k.namedImports.includes("ICON")&&h.getImportDeclarations().some(S=>S.getModuleSpecifier()?.getLiteralValue()===k.moduleSpecifier&&S.getNamedImports().some(O=>C.includes(O.getName())))||h.addImportDeclaration({moduleSpecifier:k.moduleSpecifier,namedImports:C.map(S=>({name:S}))});}return {content:h.getText(),skipped:p}}function um(e,t){let r=new Map;for(let[o,n]of Object.entries(e)){let i=n[t];i&&!r.has(i)&&r.set(i,o);}if(t==="lucide")for(let[o,n]of Array.from(r)){let i=o.endsWith("Icon")?o.slice(0,-4):`${o}Icon`;i&&!r.has(i)&&r.set(i,n);}return r}function hm(e,t,r){let o={selfClosing:0,paired:0,references:0,complex:false};for(let n of e.getDescendantsOfKind(SyntaxKind.Identifier)){if(n.getText()!==t||n.getFirstAncestorByKind(SyntaxKind.ImportDeclaration))continue;let i=n.getParent(),s=i?.getKind();if(r.componentName==="ICON"){s===SyntaxKind.JsxSelfClosingElement?o.selfClosing++:s===SyntaxKind.JsxOpeningElement?o.paired++:s===SyntaxKind.JsxClosingElement||(s===SyntaxKind.JsxExpression&&i?.getParent()?.getKind()===SyntaxKind.JsxAttribute?o.references++:o.complex=true);continue}let c=n.getFirstAncestorByKind(SyntaxKind.JsxAttribute),l=n.getFirstAncestorByKind(SyntaxKind.JsxSelfClosingElement);s===SyntaxKind.JsxExpression&&c?.getNameNode().getText()===r.iconAttribute&&l?.getTagNameNode()?.getText()===r.componentName?o.selfClosing++:o.complex=true;}return o}function ym(e,t,r,o,n){if(o.componentName==="ICON"){for(let i of e.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement))i.getTagNameNode()?.getText()===t&&Ps(i,r,o,n);for(let i of e.getDescendantsOfKind(SyntaxKind.JsxElement)){let s=i.getOpeningElement();s.getTagNameNode()?.getText()===t&&(wm(s,o,n),s.getTagNameNode()?.replaceWithText(r),i.getClosingElement().getTagNameNode()?.replaceWithText(r));}for(let i of e.getDescendantsOfKind(SyntaxKind.Identifier)){if(i.getText()!==t||i.getFirstAncestorByKind(SyntaxKind.ImportDeclaration))continue;let s=i.getParent();s?.getKind()===SyntaxKind.JsxExpression&&s?.getParent()?.getKind()===SyntaxKind.JsxAttribute&&i.replaceWithText(r);}return}for(let i of e.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement)){if(i.getTagNameNode()?.getText()!==o.componentName||!o.iconAttribute)continue;let s=i.getAttribute(o.iconAttribute);!s||s.getKind()!==SyntaxKind.JsxAttribute||s.asKindOrThrow(SyntaxKind.JsxAttribute).getInitializer()?.getText()!==`{${t}}`||Ps(i,r,o,n,{excludeAttribute:o.iconAttribute});}}function Ps(e,t,r,o,n={}){let i=r.componentName==="ICON"&&Object.keys(r.attributes).length===0,s=o.componentName==="ICON"&&Object.keys(o.attributes).length===0;if(i&&s){e.getTagNameNode()?.replaceWithText(t);return}let c=e.getAttributes().filter(f=>{if(f.getKind()!==SyntaxKind.JsxAttribute)return true;let g=f.asKindOrThrow(SyntaxKind.JsxAttribute),u=g.getNameNode().getText();return u===n.excludeAttribute?false:r.attributes[u]!==(g.getInitializer()?.getText()??"")}).map(f=>f.getText()),l=new Set(e.getAttributes().filter(f=>f.getKind()===SyntaxKind.JsxAttribute).map(f=>f.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText())),m=Object.entries(o.attributes).filter(([f])=>!l.has(f)).map(([f,g])=>`${f}=${g}`),p=o.componentName==="ICON"?[t,...m,...c]:[o.componentName,`${o.iconAttribute}={${t}}`,...m,...c];e.replaceWithText(`<${p.join(" ")} />`);}function wm(e,t,r){for(let[o,n]of Object.entries(t.attributes)){let i=e.getAttribute(o);i?.getKind()===SyntaxKind.JsxAttribute&&(i.asKindOrThrow(SyntaxKind.JsxAttribute).getInitializer()?.getText()??"")===n&&i.remove();}for(let[o,n]of Object.entries(r.attributes))e.getAttribute(o)||e.addAttribute({name:o,initializer:n});}function km(e,t,r){let o=r.componentName;if(e.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement).some(s=>s.getTagNameNode()?.getText()===o)||e.getDescendantsOfKind(SyntaxKind.JsxOpeningElement).some(s=>s.getTagNameNode()?.getText()===o))return;let i=a$5(t).filter(s=>!s.namedImports.includes("ICON")).map(s=>s.moduleSpecifier);for(let s of e.getImportDeclarations()??[])if(i.includes(s.getModuleSpecifier()?.getLiteralValue()??"")){for(let c of [...s.getNamedImports()??[]])c.getName()===o&&c.remove();s.getNamedImports()?.length===0&&!s.getDefaultImport()&&!s.getNamespaceImport()&&s.remove();}}function xm(e){return e.split("-").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}function bm(e,t,r,o){let i=e.replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\s+/g," ").trim().split(",").map(s=>s.trim()).filter(Boolean);for(let s of i){let c=s.match(/^type\s+(\w+)(?:\s+as\s+(\w+))?$/),l=s.match(/^(\w+)\s+as\s+(\w+)$/);if(c){let m=c[1],p=c[2];o==="slot"&&m==="Slot"&&!p?r.push({name:"Slot",alias:"SlotPrimitive",isType:true}):r.push({name:m,alias:p,isType:true});}else if(l){let m=l[1],p=l[2];o==="slot"&&m==="Slot"&&p==="Slot"?r.push({name:"Slot",alias:"SlotPrimitive",isType:t}):r.push({name:m,alias:p,isType:t});}else o==="slot"&&s==="Slot"?r.push({name:"Slot",alias:"SlotPrimitive",isType:t}):r.push({name:s,isType:t});}}async function Es(e,t={}){let r,o;if(t.path){if(o=e.resolvedPaths.cwd,t.path.includes("*"))r=await Qr(t.path,{cwd:o,onlyFiles:true,ignore:["**/node_modules/**"],suppressErrors:true});else {let l=N__default.resolve(o,t.path),m=await promises.stat(l).catch(()=>null);if(!m)throw new Error(`File not found: ${t.path}`);if(m.isDirectory())o=l,r=await Qr("**/*.{js,ts,jsx,tsx}",{cwd:o,onlyFiles:true,ignore:["**/node_modules/**"],suppressErrors:true});else if(m.isFile())r=[t.path];else throw new Error(`Unsupported path type: ${t.path}`)}if(r.length===0)throw new Error(`No files found matching: ${t.path}`)}else {if(!e.resolvedPaths.ui)throw new Error("We could not find a valid `ui` path in your `components.json` file. Please ensure you have a valid `ui` path in your `components.json` file.");o=e.resolvedPaths.ui,r=await Qr("**/*.{js,ts,jsx,tsx}",{cwd:o,onlyFiles:true,suppressErrors:true});}if(!t.yes){let c=t.path?t.path:`./${N__default.relative(e.resolvedPaths.cwd,o)}`,{confirm:l}=await ge({type:"confirm",name:"confirm",initial:true,message:`We will migrate ${f.info(r.length)} file(s) in ${f.info(c)} to ${f.info("radix-ui")}. Continue?`});l||(g.info("Migration cancelled."),process.exit(0));}let n=D$1("Migrating imports...")?.start(),i=new Set;await Promise.all(r.map(async c=>{n.text=`Migrating ${c}...`;let l=N__default.join(o,c),m=await promises.readFile(l,"utf-8"),{content:p,replacedPackages:f}=await Sm(m);f.forEach(g=>i.add(g)),await promises.writeFile(l,p);})),n.succeed("Migrating imports.");let s=D$1("Updating package.json...")?.start();try{let c=A(e.resolvedPaths.cwd,!1);if(!c){s.fail("Could not read package.json"),g.warn("Could not update package.json. You may need to manually replace @radix-ui/react-* packages with radix-ui");return}let l=Array.from(i);if(l.length>0){if(c.dependencies||(c.dependencies={}),c.dependencies?.["radix-ui"]||c.devDependencies?.["radix-ui"])s.succeed("radix-ui already in package.json.");else {c.dependencies["radix-ui"]="latest";let p=N__default.join(e.resolvedPaths.cwd,"package.json");await promises.writeFile(p,JSON.stringify(c,null,2)+`
126
+ args = ["shadcn@${Ne}", "mcp"]`),g.break(),g.info("3. Restart Codex to load the MCP server"),g.break(),process.exit(0);}let c=D$1("Configuring MCP server...").start(),l=await Ol(i);if(c.succeed("Configuring MCP server."),s)await Ma$1([],Qt,s,{silent:!1});else {let m=await ha(i.cwd),d=m==="npm"?"install":"add",f=m==="npm"?"--save-dev":"-D",g=D$1("Installing dependencies...").start();await execa(m,[d,f,...Qt],{cwd:i.cwd}),g.succeed("Installing dependencies.");}g.break(),g.success(`Configuration saved to ${l}.`),g.break();}catch(r){ka$1(r);}});var jl=(e,t)=>t;async function Ol(e){let{client:t,cwd:r}=e,o=er.find(l=>l.name===t);if(!o)throw new Error(`Unknown client: ${t}. Available clients: ${er.map(l=>l.name).join(", ")}`);let n=N__default.join(r,o.configPath),i=N__default.dirname(n);await D.ensureDir(i);let s={};try{let l=await promises.readFile(n,"utf-8");s=JSON.parse(l);}catch{}let c=vn(s,o.config,{arrayMerge:jl});return await promises.writeFile(n,JSON.stringify(c,null,2)+`
127
+ `,"utf-8"),o.configPath}async function Ui(e,t={}){if(!e.resolvedPaths.tailwindCss)throw new Error("We could not find a valid CSS file in your `components.json` file. Please ensure you have a valid `tailwind.css` path in your `components.json` file.");if(!e.tailwind.cssVariables)throw new Error("The `base-color` migration requires CSS variables. Your `components.json` has `cssVariables: false`, which uses inline Tailwind color classes instead of theme variables.");let r=b$1.map(C=>({title:C.label,value:C.name})),o=b$1.map(C=>C.name);if(t.to&&!o.includes(t.to))throw new Error(`Unknown base color: ${t.to}. Available base colors: ${o.join(", ")}.`);let n=t.from||e.tailwind.baseColor,i=t.to;if(!n||!i){let C=r.findIndex(S=>S.value===e.tailwind.baseColor),x=await ge([{type:n?null:"select",name:"sourceBaseColor",message:`Which base color would you like to ${f.info("migrate from")}?`,choices:r,initial:C===-1?0:C},{type:i?null:"select",name:"targetBaseColor",message:`Which base color would you like to ${f.info("migrate to")}?`,choices:r}]);n=n||x.sourceBaseColor,i=i||x.targetBaseColor;}if((!n||!i)&&(g.info("Migration cancelled."),process.exit(0)),n===i)throw new Error("You cannot migrate to the same base color. Please choose a different base color.");if(!t.yes){let C=`./${N__default.relative(e.resolvedPaths.cwd,e.resolvedPaths.tailwindCss)}`,{confirm:x}=await ge({type:"confirm",name:"confirm",initial:true,message:`We will migrate ${f.info(C)} from ${f.info(n)} to ${f.info(i)}. Continue?`});x||(g.info("Migration cancelled."),process.exit(0));}let s=await ua(n),c=await ua(i);if(!s)throw new Error(`Unknown base color: ${n}.`);if(!c)throw new Error("Something went wrong fetching the base colors.");let m=(await Ca$1(e.resolvedPaths.cwd))?.tailwindVersion??"v4",d=Vi(s,m),f$1=Vi(c,m),g$1=D$1("Migrating base color...")?.start(),u=await promises.readFile(e.resolvedPaths.tailwindCss,"utf-8"),{cssVars:h,skipped:y}=Dl(u,d,f$1,m);(Object.keys(h.light).length>0||Object.keys(h.dark).length>0)&&await Ha$1(h,e,{overwriteCssVars:true,tailwindVersion:m,silent:true}),g$1.succeed("Migration complete."),await Ml(e,i);let k=new Map;for(let{token:C,reason:x}of y)k.has(C)||k.set(C,x);if(k.size>0){g.break(),g.warn(`Skipped ${k.size} token${k.size===1?"":"s"}. These were left untouched:`);for(let[C,x]of Array.from(k))g.warn(` - ${C}: ${x}`);}}function Dl(e,t,r,o){let n=Ll(e),i={},s={},c=[],l=[{mode:"light",selector:":root",target:i},{mode:"dark",selector:".dark",target:s}];for(let{mode:m,selector:d,target:f}of l)for(let[g,u]of Object.entries(t[m]??{})){let h=r[m]?.[g];if(h===void 0||tr(u)===tr(h))continue;let y=`--${g.replace(/^--/,"")}`,k=n[d][y];if(k===void 0){c.push({token:y,reason:"not found in your CSS"});continue}tr(k)===tr(_l(u,o))?f[g]=h:c.push({token:y,reason:"does not match the source base color"});}return {cssVars:{light:i,dark:s},skipped:c}}function Vi(e,t){return t==="v4"&&e.cssVarsV4?e.cssVarsV4:e.cssVars}function Ll(e){let t={":root":{},".dark":{}};return Vc.parse(e).walkRules(r=>{r.selector!==":root"&&r.selector!==".dark"||r.walkDecls(o=>{o.prop.startsWith("--")&&(t[r.selector][o.prop]=o.value);});}),t}function _l(e,t){return t==="v4"&&Ja$1(e)?`hsl(${e})`:e}function tr(e){return e.trim().replace(/\s+/g," ")}async function Ml(e,t){let r=N__default.resolve(e.resolvedPaths.cwd,"components.json");if(!D.existsSync(r))return;let o=await D.readJson(r);o.tailwind?.baseColor!==t&&(o.tailwind={...o.tailwind,baseColor:t},await D.writeJson(r,o,{spaces:2}),g.info(`Updated ${f.info("baseColor")} in components.json to ${f.info(t)}.`));}var Ul="**/*.{js,jsx,ts,tsx,mjs,mts,cjs,cts,vue,svelte,astro}",Wl=["**/node_modules/**","**/.git/**","**/.next/**","**/.nuxt/**","**/.svelte-kit/**","**/.astro/**","**/.output/**","**/.vercel/**","**/dist/**","**/build/**","**/out/**","**/coverage/**"];async function Wi(e,t){if(!t)return Jr(e);if(t.includes("*")){let n=await Jr(e,t);if(!n.length)throw new Error(`No files found matching: ${t}`);return n}let r=N__default.resolve(e,t),o=await promises.stat(r).catch(()=>null);if(!o)throw new Error(`File not found: ${t}`);if(o.isFile())return [r];if(o.isDirectory()){let n=await Jr(r);if(!n.length)throw new Error(`No files found matching: ${t}`);return n}throw new Error(`Unsupported path type: ${t}`)}function Jr(e,t=Ul){return Qr(t,{cwd:e,absolute:true,onlyFiles:true,ignore:Wl,suppressErrors:true,dot:true})}function Hr(e,t){let r=[],o=/<script\b([^>]*)>([\s\S]*?)<\/script(?:\s[^>]*)?>/gi,n;for(;(n=o.exec(e))!==null;){let i=n[1],s=n[2],c=n[0].indexOf(s),l=i.match(/\blang=["'](js|jsx|ts|tsx)["']/i)?.[1];r.push({start:n.index+c,end:n.index+c+s.length,filename:`${t}.${r.length}.${l?.toLowerCase()??"js"}`});}return r}function Ji(e,t){let r=e.match(/^(?:\uFEFF)?---[\t ]*\r?\n([\s\S]*?)\r?\n---/);if(!r||r.index===void 0)return [];let o=r[1],n=r[0].indexOf(o);return [{start:r.index+n,end:r.index+n+o.length,filename:`${t}.frontmatter.ts`}]}function zi(e){let t=N__default.basename(e).replace(/[^a-zA-Z0-9_.-]/g,"-");return t.match(/\.(?:js|jsx|ts|tsx|mjs|mts|cjs|cts)$/)?`/${t}`:`/${t}.tsx`}function Hi(e){switch(N__default.extname(e).toLowerCase()){case ".ts":case ".mts":case ".cts":return ScriptKind.TS;case ".tsx":return ScriptKind.TSX;case ".jsx":return ScriptKind.JSX;default:return ScriptKind.JS}}function qi(e,t,r){let o=Zi(t).filter(c=>c.kind==="esm"),n=Qi(t).filter(c=>c.kind==="esm"),i=0,s=[];for(let c of e.getFunctions()){let l=c.getNameNode();if(!l)continue;let m=Gi(c);m&&s.push({statement:c,name:l,...m,isInlineExport:c.isExported()&&!c.isDefaultExport(),isDefaultExport:c.isDefaultExport()});}for(let c of e.getVariableStatements()){if(c.getDeclarations().length!==1)continue;let l=c.getDeclarations()[0],m=l.getNameNode(),d=l.getInitializer();if(!Node.isIdentifier(m)||!Node.isArrowFunction(d)&&!Node.isFunctionExpression(d))continue;let f=Gi(d);f&&s.push({statement:c,name:m,...f,isInlineExport:c.isExported(),isDefaultExport:false});}for(let c of s){if(!Jl(c.expression,c.restName,o,n))continue;let l=c.name.findReferencesAsNodes(),m=l.map(g=>g.getParentIfKind(SyntaxKind.ExportSpecifier)).filter(g=>g!==void 0);if(l.length!==m.length||!c.isInlineExport&&!c.isDefaultExport&&!m.length)continue;let d=new Set;c.isInlineExport&&d.add(c.name.getText()),c.isDefaultExport&&d.add("default");for(let g of m){d.add(g.getAliasNode()?.getText()??g.getNameNode().getText());let u=g.getExportDeclaration();u.getNamedExports().length===1?u.remove():g.remove();}let f=e.getStatements().findIndex(g=>g===c.statement);c.statement.remove(),e.insertExportDeclaration(Math.max(f,0),{moduleSpecifier:"cn",namedExports:Array.from(d).map(g=>({name:"cn",alias:g==="cn"?void 0:g}))}),r.add("clsx"),r.add("tailwind-merge"),i++;}return i}function Gi(e){let t=e.getParameters();if(t.length!==1||!t[0].isRestParameter())return null;let r=t[0].getNameNode(),o=e.getBody();if(!Node.isIdentifier(r)||!o)return null;if(!Node.isBlock(o))return {expression:o,restName:r.getText()};let n=o.getStatements();if(n.length!==1||!Node.isReturnStatement(n[0]))return null;let i=n[0].getExpression();return i?{expression:i,restName:r.getText()}:null}function Jl(e,t,r,o){if(!Node.isCallExpression(e)||!Ki(e,o))return false;let n=e.getArguments();if(n.length!==1||!Node.isCallExpression(n[0])||!Ki(n[0],r))return false;let i=n[0].getArguments();if(i.length!==1)return false;let s=i[0];return Node.isIdentifier(s)?s.getText()===t:Node.isSpreadElement(s)&&Node.isIdentifier(s.getExpression())&&s.getExpression().getText()===t}function Xi(e,t){let r=Zi(t),o=Qi(t),n=[];for(let i of e.getDescendantsOfKind(SyntaxKind.CallExpression)){let s=Gr(i,o);if(!s)continue;let c=false,l=i.getArguments().flatMap(m=>{let d=Gr(m,r);if(!d||d.kind!==s.kind)return [m.getText()];c=true;let f=zl(m);return f?[f]:[]});c&&n.push({outerCall:i,argumentsText:l.join(", "),kind:s.kind});}return n}function Zi(e){return e.filter(t=>t.module.startsWith("clsx")&&(t.importedName==="default"||t.importedName==="clsx"))}function Qi(e){return e.filter(t=>t.module==="tailwind-merge"&&t.importedName==="twMerge")}function Ki(e,t){return Gr(e,t)!==null}function Gr(e,t){if(!Node.isCallExpression(e))return null;let r=e.getExpression();return Node.isIdentifier(r)?t.find(o=>o.localName===r.getText()&&o.identifier.findReferencesAsNodes().some(n=>n.getStart()===r.getStart()))??null:null}function zl(e){return Node.isCallExpression(e)?e.getArguments().map(t=>Node.isIdentifier(t)&&t.getFirstAncestor(n=>Node.isFunctionLikeDeclaration(n))?.getParameters().find(n=>n.isRestParameter()&&n.getNameNode().getText()===t.getText())?`...${t.getText()}`:t.getText()).join(", "):""}function rs(e,t){let r=0;for(let o of e.getImportDeclarations())o.getModuleSpecifierValue()==="cnfast"&&(o.setModuleSpecifier("cn"),r++);for(let o of e.getExportDeclarations())o.getModuleSpecifierValue()==="cnfast"&&(o.setModuleSpecifier("cn"),r++);for(let o of e.getDescendantsOfKind(SyntaxKind.CallExpression)){let n=o.getExpression();if(n.getKind()!==SyntaxKind.ImportKeyword&&(!Node.isIdentifier(n)||n.getText()!=="require"))continue;let i=o.getArguments()[0];Node.isStringLiteral(i)&&i.getLiteralValue()==="cnfast"&&(i.replaceWithText('"cn"'),r++);}return r&&t.add("cnfast"),r}function ft(e){let t=e.getSymbol()?.compilerSymbol,r=e.getSourceFile().getDescendantsOfKind(SyntaxKind.Identifier).filter(n=>n!==e),o=r.filter(n=>t&&n.getSymbol()?.compilerSymbol===t);for(let n of e.findReferencesAsNodes()){let i=r.find(s=>s.getStart()===n.getStart()&&s.getText()===n.getText());i&&!o.includes(i)&&o.push(i);}return o}function or(e,t){let r=ft(e);return t==="validators"&&r.some(n=>{let i=n.getParentIfKind(SyntaxKind.PropertyAccessExpression);if(i){let c=i.getParentIfKind(SyntaxKind.CallExpression);if(c!==void 0&&c.getExpression().getStart()===i.getStart())return true}let s=n.getParentIfKind(SyntaxKind.VariableDeclaration);return s!==void 0&&Node.isObjectBindingPattern(s.getNameNode())&&s.getInitializer()?.getStart()===n.getStart()})?"callable validators are not supported by cn":t==="createTailwindMerge"&&r.some(n=>{let i=n.getParentIfKind(SyntaxKind.CallExpression);return i!==void 0&&i.getExpression().getStart()===n.getStart()&&i.getArguments().length>1})?"variadic createTailwindMerge calls are not supported by cn":null}function os(e,t,r){let o=new Set(e.getDescendantsOfKind(SyntaxKind.Identifier).map(i=>i.getText()));if(!o.has(t))return t;if(!o.has(r))return r;let n=2;for(;o.has(`${r}${n}`);)n++;return `${r}${n}`}function nr(e){if(!Node.isCallExpression(e)||e.getExpression().getText()!=="require")return null;let t=e.getArguments();if(t.length!==1||!Node.isStringLiteral(t[0]))return null;let r=t[0].getLiteralValue();return Hl(r)?r:null}function Hl(e){return e==="clsx"||e==="clsx/lite"||e==="tailwind-merge"}function ns(e){return [...Gl(e),...Kl(e)]}function Gl(e){let t=[];for(let r of e.getImportDeclarations()){let o=r.getModuleSpecifierValue();if(!Yl(o))continue;let n=r.getDefaultImport();n&&o.startsWith("clsx")&&t.push({identifier:n,localName:n.getText(),importedName:"default",module:o,kind:"esm"});for(let i of r.getNamedImports()){if(r.isTypeOnly()||i.isTypeOnly())continue;let s=i.getAliasNode()??i.getNameNode();Node.isIdentifier(s)&&t.push({identifier:s,localName:s.getText(),importedName:i.getName(),module:o,kind:"esm"});}}return t}function Kl(e){let t=[];for(let r of e.getVariableDeclarations()){let o=r.getInitializer();if(!o||!Node.isCallExpression(o))continue;let n=nr(o);if(!n)continue;let i=r.getNameNode();if(Node.isIdentifier(i)&&n.startsWith("clsx")){t.push({identifier:i,localName:i.getText(),importedName:"default",module:n,kind:"cjs"});continue}if(Node.isObjectBindingPattern(i))for(let s of i.getElements()){let c=s.getNameNode();Node.isIdentifier(c)&&t.push({identifier:c,localName:c.getText(),importedName:s.getPropertyNameNode()?.getText()??c.getText(),module:n,kind:"cjs"});}}return t}function Yl(e){return e==="clsx"||e==="clsx/lite"||e==="tailwind-merge"}function ss(e,t){let r=t==="cn"?"cn":`cn: ${t}`,o=e.getStatements(),n=0;for(;n<o.length;){let i=o[n];if(Node.isExpressionStatement(i)&&Node.isStringLiteral(i.getExpression())){n++;continue}break}e.insertStatements(n,`const { ${r} } = require("cn")`);}function as(e,t){for(let r of ql(t)){let o=e.getImportDeclarations().find(i=>i.getModuleSpecifierValue()===r.moduleSpecifier&&!i.getNamespaceImport()&&!i.isTypeOnly());o??=e.addImportDeclaration({moduleSpecifier:r.moduleSpecifier}),o.getNamedImports().some(i=>{let s=i.getAliasNode()?.getText()??i.getNameNode().getText();return i.getName()===r.importedName&&s===r.localName})||o.addNamedImport({name:r.importedName,alias:r.importedName===r.localName?void 0:r.localName,isTypeOnly:r.isTypeOnly});}}function ql(e){return e.filter((t,r)=>e.findIndex(o=>o.moduleSpecifier===t.moduleSpecifier&&o.importedName===t.importedName&&o.localName===t.localName&&o.isTypeOnly===t.isTypeOnly)===r)}var ir=["clsx","tailwind-merge","cnfast"],cs=new Set(["twMerge","twJoin","ClassNameValue"]),ls=new Map([["extendTailwindMerge","extendTailwindMerge"],["createTailwindMerge","createTwMerge"],["getDefaultConfig","defaultConfig"],["fromTheme","fromTheme"],["validators","validators"],["mergeConfigs","mergeConfigs"],["ConfigExtension","ConfigExtension"],["DefaultClassGroupIds","DefaultClassGroupIds"],["DefaultThemeGroupIds","DefaultThemeGroupIds"]]);function fs(e,t){Zl(e,t),Ql(e,t);}function Zl(e,t){for(let r of e.getDescendantsOfKind(SyntaxKind.CallExpression)){if(r.getExpression().getKind()!==SyntaxKind.ImportKeyword)continue;let o=r.getArguments()[0];if(!o||!Node.isStringLiteral(o))continue;let n=o.getLiteralValue();ds(n)&&t.push({packageName:ps(n),reason:"dynamic imports require manual migration"});}}function Ql(e,t){for(let r of e.getExportDeclarations()){let o=r.getModuleSpecifierValue();if(!o||!ds(o))continue;let n=ps(o),i=r.getNamedExports();if(!i.length){t.push({packageName:n,reason:"export-from declarations require manual migration"});continue}for(let s of i)t.push({packageName:n,symbol:s.getName(),reason:"export-from declarations require manual migration"});}}function Yr(e){return ir.filter(t=>{let r=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`(?:from\\s*|import\\s*\\(|require\\s*\\()\\s*["']${r}(?:/lite)?["']`).test(e)})}function qr(e){return e.filter((t,r)=>e.findIndex(o=>o.packageName===t.packageName&&o.symbol===t.symbol&&o.reason===t.reason)===r)}function ps(e){return e.startsWith("clsx")?"clsx":"tailwind-merge"}function ds(e){return e==="clsx"||e==="clsx/lite"||e==="tailwind-merge"}function hs(e,t,r,o,n){let i=em(e,t,r,o,n)+tm(e,r,o);return fs(e,r),as(e,t),i}function em(e,t,r,o,n){let i=0;for(let s of [...e.getImportDeclarations()]){let c=s.getModuleSpecifierValue();if(!om(c))continue;let l=ys(c),m=!!s.getImportClause(),d=s.getNamespaceImport();d&&r.push({packageName:l,symbol:d.getText(),reason:"namespace imports cannot be migrated safely"});let f=s.getDefaultImport();f&&(l==="clsx"?(us(f,n)&&t.push({moduleSpecifier:c==="clsx/lite"?"cn/lite":"cn",importedName:"clsx",localName:f.getText(),isTypeOnly:false}),s.removeDefaultImport(),o.add("clsx"),i++):r.push({packageName:l,symbol:f.getText(),reason:"tailwind-merge has no compatible default import mapping"}));for(let g of [...s.getNamedImports()]){let u=g.getName(),h=g.getAliasNode()?.getText()??g.getNameNode().getText(),y=s.isTypeOnly()||g.isTypeOnly(),k=Xr(c,u,y);if(!k){r.push({packageName:l,symbol:u,reason:u.startsWith("Experimental")||u==="experimentalParseClassName"?"experimentalParseClassName is not supported by cn":"no compatible cn export is available"});continue}let C=g.getAliasNode()??g.getNameNode();if(!Node.isIdentifier(C)){r.push({packageName:l,symbol:u,reason:"string-named imports cannot be migrated safely"});continue}let x=or(C,u);if(x){r.push({packageName:l,symbol:u,reason:x});continue}us(C,n)&&t.push({...k,localName:h,isTypeOnly:y}),g.remove(),o.add(l),i++;}m&&!s.getDefaultImport()&&!s.getNamespaceImport()&&s.getNamedImports().length===0?s.remove():m||r.push({packageName:l,reason:"side-effect imports are left unchanged"});}return i}function Xr(e,t,r){if(e==="clsx")return {moduleSpecifier:"cn",importedName:t==="default"?"clsx":t};if(e==="clsx/lite")return (t==="clsx"||t==="default")&&!r?{moduleSpecifier:"cn/lite",importedName:"clsx"}:["ClassValue","ClassArray","ClassDictionary"].includes(t)?{moduleSpecifier:"cn",importedName:t}:null;if(cs.has(t))return {moduleSpecifier:"cn",importedName:t};let o=ls.get(t);return o?{moduleSpecifier:"cn/config",importedName:o}:null}function tm(e,t,r){let o=0;for(let n of e.getVariableDeclarations()){let i=n.getInitializer();if(!i||!Node.isCallExpression(i))continue;let s=nr(i);if(!s)continue;let c=ys(s),l=n.getNameNode();if(Node.isIdentifier(l)&&s.startsWith("clsx")){ft(l).length?i.replaceWithText(`require(${JSON.stringify(s==="clsx/lite"?"cn/lite":"cn")}).clsx`):gs(n),r.add("clsx"),o++;continue}if(!Node.isObjectBindingPattern(l)){t.push({packageName:c,reason:"this CommonJS require shape cannot be migrated safely"});continue}let m=l.getElements(),d=m.find(u=>{let h=u.getNameNode(),y=u.getPropertyNameNode()?.getText()??h.getText();return Node.isIdentifier(h)&&or(h,y)});if(d){let u=d.getNameNode(),h=d.getPropertyNameNode()?.getText()??u.getText();t.push({packageName:c,symbol:h,reason:or(u,h)});continue}if(m.every(u=>{let h=u.getNameNode();return Node.isIdentifier(h)&&!ft(h).length})){gs(n),r.add(c),o++;continue}let f=m.map(u=>u.getPropertyNameNode()?.getText()??u.getNameNode().getText()),g=new Set(f.map(u=>Xr(s,u,false)?.moduleSpecifier??null));if(g.size!==1||g.has(null)){t.push({packageName:c,reason:"mixed or unsupported CommonJS exports require manual migration"});continue}i.getArguments()[0].replaceWithText(JSON.stringify(Array.from(g)[0]));for(let u of m){let h=u.getPropertyNameNode()?.getText()??u.getNameNode().getText(),y=Xr(s,h,false);y.importedName!==h&&u.replaceWithText(`${y.importedName}: ${u.getNameNode().getText()}`);}r.add(c),o++;}return o}function gs(e){let t=e.getVariableStatement();t?.getDeclarations().length===1?t.remove():e.remove();}function us(e,t){return ft(e).length>0||rm(t,e.getText())}function rm(e,t){if(!e)return false;let r=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`(^|[^a-zA-Z0-9_$])${r}(?=$|[^a-zA-Z0-9_$])`).test(e)}function ys(e){return e.startsWith("clsx")?"clsx":"tailwind-merge"}function om(e){return e==="clsx"||e==="clsx/lite"||e==="tailwind-merge"}function ks(){let e=new Project({useInMemoryFileSystem:true,compilerOptions:{allowJs:true}});return (t,r="source.tsx")=>{let o=N__default.extname(r).toLowerCase();return o===".vue"||o===".svelte"?ws(t,Hr(t,r),e):o===".astro"?ws(t,[...Ji(t,r),...Hr(t,r)],e):Cs(t,r,e)}}function Cs(e,t,r,o=""){let n=r.createSourceFile(zi(t),e,{scriptKind:Hi(t),overwrite:true}),i=e.slice(0,n.getStart());i&&n.replaceText([0,i.length],"");let s=[],c=[],l=new Set,m=rs(n,l),d=ns(n);m+=qi(n,d,l);let f=Xi(n,d);if(f.length){let h=os(n,"cn","cnMerge");f.some(k=>k.kind==="esm")?s.push({moduleSpecifier:"cn",importedName:"cn",localName:h,isTypeOnly:false}):ss(n,h);for(let{outerCall:k,argumentsText:C}of f.reverse())k.replaceWithText(`${h}(${C})`),m++;l.add("clsx"),l.add("tailwind-merge");}m+=hs(n,s,c,l,o);let g=`${i}${n.getFullText()}`,u={content:g,changes:m,migratedPackages:Array.from(l),remainingPackages:Yr(g),unsupported:qr(c)};return r.removeSourceFile(n),u}function ws(e,t,r){let o=e,n=0,i=new Set,s=[];for(let c of t.sort((l,m)=>m.start-l.start)){let l=o.slice(c.start,c.end),m=`${o.slice(0,c.start)}${o.slice(c.end)}`,d=Cs(l,c.filename,r,m);o=`${o.slice(0,c.start)}${d.content}${o.slice(c.end)}`,n+=d.changes,d.migratedPackages.forEach(f=>i.add(f)),s.push(...d.unsupported);}return {content:o,changes:n,migratedPackages:Array.from(i),remainingPackages:Yr(o),unsupported:qr(s)}}async function Zr(e){if(!D.existsSync(N__default.resolve(e.cwd,"package.json")))throw new Error("No `package.json` file found. Ensure you are at the root of your project.");let t=await Wi(e.cwd,e.path),r=await Promise.all(t.map(f=>promises.readFile(f,"utf-8"))),o=ks(),n=t.map((f,g)=>{let u=r[g];return {file:f,content:u,result:o(u,f)}}),i=n.filter(({content:f,result:g})=>f!==g.content),s=n.flatMap(({file:f,result:g})=>g.unsupported.map(u=>({...u,file:f}))),c=new Set(n.flatMap(({result:f})=>f.migratedPackages));if(!i.length){g.info("No supported clsx, tailwind-merge or cnfast usage found."),vs(s,e.cwd);return}if(cm(e.cwd,c),!e.yes){let{confirm:f$1}=await ge({type:"confirm",name:"confirm",initial:true,message:`We will migrate ${f.info(i.length)} file(s) to ${f.info("cn")}${s.length?` and leave ${f.warn(s.length)} item(s) for manual review`:""}. Continue?`});if(!f$1){g.info("Migration cancelled.");return}}let l=D$1("Migrating to cn...")?.start();await Na$1(e.cwd,["cn"]);for(let{file:f,result:g}of i)await promises.writeFile(f,g.content);l?.succeed(`Migrated ${i.length} file${i.length===1?"":"s"}.`);let m=new Set(n.flatMap(({result:f})=>f.remainingPackages)),d=e.path?[]:ir.filter(f=>c.has(f)&&!m.has(f));if(d.length)try{await Oa$1(e.cwd,d);}catch{g.warn(`Could not remove ${d.join(", ")}. Remove them manually after reviewing the migration.`);}e.path&&g.info("Kept clsx, tailwind-merge and cnfast dependencies because this was a scoped migration."),vs(s,e.cwd);}function cm(e,t){if(!t.has("tailwind-merge"))return;let r=A(e,false),o=bs(r,"tailwindcss"),n=bs(r,"tailwind-merge");if((Ss(o)??4)<4||(Ss(n)??3)<3)throw new Error("The cn migration requires Tailwind CSS v4 and tailwind-merge v3. Tailwind CSS v3 projects should continue using tailwind-merge v2.")}function bs(e,t){return e?.dependencies?.[t]??e?.devDependencies?.[t]??e?.optionalDependencies?.[t]??e?.peerDependencies?.[t]}function Ss(e){if(!e||/^(?:workspace|file|link|git|https?):/i.test(e))return null;let t=e.match(/(?:^|[^0-9])(\d+)(?:\.|$)/);return t?Number(t[1]):null}function vs(e,t){if(e.length){g.break(),g.warn(`Manual review required for ${e.length} item${e.length===1?"":"s"}:`);for(let r of e){let o=r.file?N__default.relative(t,r.file):"unknown file",n=r.symbol?` (${r.symbol})`:"";g.warn(` - ${o}${n}: ${r.reason}`);}}}var Te={...a$4,radix:{name:"radix",title:"Radix Icons",packages:["@radix-ui/react-icons"],import:"import { ICON } from '@radix-ui/react-icons'",usage:"<ICON />",export:"@radix-ui/react-icons"}};async function $s(e,t={}){let r,o;if(t.path){if(o=e.resolvedPaths.cwd,t.path.includes("*"))r=await Qr(t.path,{cwd:o,onlyFiles:true,ignore:["**/node_modules/**"]});else {let u=N__default.resolve(o,t.path),h=await promises.stat(u).catch(()=>null);if(!h)throw new Error(`File not found: ${t.path}`);if(h.isDirectory())o=u,r=await Qr("**/*.{js,ts,jsx,tsx}",{cwd:o,onlyFiles:true,ignore:["**/node_modules/**"]});else if(h.isFile())r=[t.path];else throw new Error(`Unsupported path type: ${t.path}`)}if(r.length===0)throw new Error(`No files found matching: ${t.path}`)}else {if(!e.resolvedPaths.ui)throw new Error("We could not find a valid `ui` path in your `components.json` file. Please ensure you have a valid `ui` path in your `components.json` file.");o=e.resolvedPaths.ui,r=await Qr("**/*.{js,ts,jsx,tsx}",{cwd:o});}let n=await sa$1();if(Object.keys(n).length===0)throw new Error("Something went wrong fetching the registry icons.");let i=Object.entries(Te).map(([g,u])=>({title:u.title,value:g}));for(let g of [t.from,t.to])if(g&&!(g in Te))throw new Error(`Unknown icon library: ${g}. Available libraries: ${Object.keys(Te).join(", ")}.`);let s=t.from,c=t.to;if(!s||!c){let g=i.findIndex(h=>h.value===e.iconLibrary),u=await ge([{type:s?null:"select",name:"sourceLibrary",message:`Which icon library would you like to ${f.info("migrate from")}?`,choices:i,initial:g===-1?0:g},{type:c?null:"select",name:"targetLibrary",message:`Which icon library would you like to ${f.info("migrate to")}?`,choices:i}]);s=s??u.sourceLibrary,c=c??u.targetLibrary;}if((!s||!c)&&(g.info("Migration cancelled."),process.exit(0)),s===c)throw new Error("You cannot migrate to the same icon library. Please choose a different icon library.");let l=Te[s],m=Te[c];if(!t.yes){let g$1=t.path?t.path:`./${N__default.relative(e.resolvedPaths.cwd,o)}`,{confirm:u}=await ge({type:"confirm",name:"confirm",initial:true,message:`We will migrate ${f.info(r.length)} files in ${f.info(g$1)} from ${f.info(l.title)} to ${f.info(m.title)}. Continue?`});u||(g.info("Migration cancelled."),process.exit(0));}await Ma$1([...m.packages],[],e,{silent:false});let d=D$1("Migrating icons...")?.start(),f$1=new Map;if(await Promise.all(r.map(async g=>{d.text=`Migrating ${g}...`;let u=N__default.join(o,g),h=await promises.readFile(u,"utf-8"),{content:y,skipped:k}=await gm(h,s,c,n);for(let C of k)f$1.has(C.icon)||f$1.set(C.icon,C.reason);await promises.writeFile(u,y);})),d.succeed("Migration complete."),t.path||await dm(e,c),f$1.size>0){g.break(),g.warn(`Skipped ${f$1.size} icon${f$1.size===1?"":"s"}. These were left untouched:`);for(let[g$1,u]of Array.from(f$1))g.warn(` - ${g$1}: ${u}`);}}async function dm(e,t){let r=N__default.resolve(e.resolvedPaths.cwd,"components.json");if(!D.existsSync(r))return;let o=await D.readJson(r);o.iconLibrary!==t&&(o.iconLibrary=t,await D.writeJson(r,o,{spaces:2}),g.info(`Updated ${f.info("iconLibrary")} in components.json to ${f.info(t)}.`));}async function gm(e,t,r,o){let n=Te[t],i=Te[r],s=b$2(n.import),c=c$4(n.usage),l=c$4(i.usage);if(!s)throw new Error(`Could not resolve the icon import for ${n.title}.`);let m=um(o,t),d=[],f=await promises.mkdtemp(N__default.join(tmpdir(),"shadcn-")),g=new Project({compilerOptions:{}}),u=N__default.join(f,`shadcn-icons-${randomBytes(4).toString("hex")}.tsx`),h=g.createSourceFile(u,e,{scriptKind:ScriptKind.TSX}),y=[];for(let k of h.getImportDeclarations()??[])if(!(k.getModuleSpecifier()?.getLiteralValue()!==s||k.isTypeOnly())){for(let C of [...k.getNamedImports()??[]]){if(C.isTypeOnly())continue;let x=C.getName(),S=C.getAliasNode()?.getText()??x,O=m.get(x),v=O?o[O]?.[r]:void 0;if(!v){d.push({icon:x,reason:`no ${i.title} equivalent found`});continue}let F=hm(h,S,c);if(F.complex){d.push({icon:x,reason:"unsupported usage (e.g. referenced outside JSX)"});continue}if(l.componentName!=="ICON"&&(F.references>0||F.paired>0)){d.push({icon:x,reason:`cannot be wrapped in <${l.componentName} />`});continue}C.remove(),ym(h,S,v,c,l),y.includes(v)||y.push(v);}k.getNamedImports()?.length===0&&!k.getDefaultImport()&&!k.getNamespaceImport()&&k.remove();}if(c.componentName!=="ICON"&&y.length>0&&km(h,n.import,c),y.length>0)for(let k of a$5(i.import)){let C=k.namedImports.flatMap(S=>S==="ICON"?y:[S]);!k.namedImports.includes("ICON")&&h.getImportDeclarations().some(S=>S.getModuleSpecifier()?.getLiteralValue()===k.moduleSpecifier&&S.getNamedImports().some(O=>C.includes(O.getName())))||h.addImportDeclaration({moduleSpecifier:k.moduleSpecifier,namedImports:C.map(S=>({name:S}))});}return {content:h.getText(),skipped:d}}function um(e,t){let r=new Map;for(let[o,n]of Object.entries(e)){let i=n[t];i&&!r.has(i)&&r.set(i,o);}if(t==="lucide")for(let[o,n]of Array.from(r)){let i=o.endsWith("Icon")?o.slice(0,-4):`${o}Icon`;i&&!r.has(i)&&r.set(i,n);}return r}function hm(e,t,r){let o={selfClosing:0,paired:0,references:0,complex:false};for(let n of e.getDescendantsOfKind(SyntaxKind.Identifier)){if(n.getText()!==t||n.getFirstAncestorByKind(SyntaxKind.ImportDeclaration))continue;let i=n.getParent(),s=i?.getKind();if(r.componentName==="ICON"){s===SyntaxKind.JsxSelfClosingElement?o.selfClosing++:s===SyntaxKind.JsxOpeningElement?o.paired++:s===SyntaxKind.JsxClosingElement||(s===SyntaxKind.JsxExpression&&i?.getParent()?.getKind()===SyntaxKind.JsxAttribute?o.references++:o.complex=true);continue}let c=n.getFirstAncestorByKind(SyntaxKind.JsxAttribute),l=n.getFirstAncestorByKind(SyntaxKind.JsxSelfClosingElement);s===SyntaxKind.JsxExpression&&c?.getNameNode().getText()===r.iconAttribute&&l?.getTagNameNode()?.getText()===r.componentName?o.selfClosing++:o.complex=true;}return o}function ym(e,t,r,o,n){if(o.componentName==="ICON"){for(let i of e.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement))i.getTagNameNode()?.getText()===t&&Ps(i,r,o,n);for(let i of e.getDescendantsOfKind(SyntaxKind.JsxElement)){let s=i.getOpeningElement();s.getTagNameNode()?.getText()===t&&(wm(s,o,n),s.getTagNameNode()?.replaceWithText(r),i.getClosingElement().getTagNameNode()?.replaceWithText(r));}for(let i of e.getDescendantsOfKind(SyntaxKind.Identifier)){if(i.getText()!==t||i.getFirstAncestorByKind(SyntaxKind.ImportDeclaration))continue;let s=i.getParent();s?.getKind()===SyntaxKind.JsxExpression&&s?.getParent()?.getKind()===SyntaxKind.JsxAttribute&&i.replaceWithText(r);}return}for(let i of e.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement)){if(i.getTagNameNode()?.getText()!==o.componentName||!o.iconAttribute)continue;let s=i.getAttribute(o.iconAttribute);!s||s.getKind()!==SyntaxKind.JsxAttribute||s.asKindOrThrow(SyntaxKind.JsxAttribute).getInitializer()?.getText()!==`{${t}}`||Ps(i,r,o,n,{excludeAttribute:o.iconAttribute});}}function Ps(e,t,r,o,n={}){let i=r.componentName==="ICON"&&Object.keys(r.attributes).length===0,s=o.componentName==="ICON"&&Object.keys(o.attributes).length===0;if(i&&s){e.getTagNameNode()?.replaceWithText(t);return}let c=e.getAttributes().filter(f=>{if(f.getKind()!==SyntaxKind.JsxAttribute)return true;let g=f.asKindOrThrow(SyntaxKind.JsxAttribute),u=g.getNameNode().getText();return u===n.excludeAttribute?false:r.attributes[u]!==(g.getInitializer()?.getText()??"")}).map(f=>f.getText()),l=new Set(e.getAttributes().filter(f=>f.getKind()===SyntaxKind.JsxAttribute).map(f=>f.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText())),m=Object.entries(o.attributes).filter(([f])=>!l.has(f)).map(([f,g])=>`${f}=${g}`),d=o.componentName==="ICON"?[t,...m,...c]:[o.componentName,`${o.iconAttribute}={${t}}`,...m,...c];e.replaceWithText(`<${d.join(" ")} />`);}function wm(e,t,r){for(let[o,n]of Object.entries(t.attributes)){let i=e.getAttribute(o);i?.getKind()===SyntaxKind.JsxAttribute&&(i.asKindOrThrow(SyntaxKind.JsxAttribute).getInitializer()?.getText()??"")===n&&i.remove();}for(let[o,n]of Object.entries(r.attributes))e.getAttribute(o)||e.addAttribute({name:o,initializer:n});}function km(e,t,r){let o=r.componentName;if(e.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement).some(s=>s.getTagNameNode()?.getText()===o)||e.getDescendantsOfKind(SyntaxKind.JsxOpeningElement).some(s=>s.getTagNameNode()?.getText()===o))return;let i=a$5(t).filter(s=>!s.namedImports.includes("ICON")).map(s=>s.moduleSpecifier);for(let s of e.getImportDeclarations()??[])if(i.includes(s.getModuleSpecifier()?.getLiteralValue()??"")){for(let c of [...s.getNamedImports()??[]])c.getName()===o&&c.remove();s.getNamedImports()?.length===0&&!s.getDefaultImport()&&!s.getNamespaceImport()&&s.remove();}}function xm(e){return e.split("-").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}function bm(e,t,r,o){let i=e.replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\s+/g," ").trim().split(",").map(s=>s.trim()).filter(Boolean);for(let s of i){let c=s.match(/^type\s+(\w+)(?:\s+as\s+(\w+))?$/),l=s.match(/^(\w+)\s+as\s+(\w+)$/);if(c){let m=c[1],d=c[2];o==="slot"&&m==="Slot"&&!d?r.push({name:"Slot",alias:"SlotPrimitive",isType:true}):r.push({name:m,alias:d,isType:true});}else if(l){let m=l[1],d=l[2];o==="slot"&&m==="Slot"&&d==="Slot"?r.push({name:"Slot",alias:"SlotPrimitive",isType:t}):r.push({name:m,alias:d,isType:t});}else o==="slot"&&s==="Slot"?r.push({name:"Slot",alias:"SlotPrimitive",isType:t}):r.push({name:s,isType:t});}}async function Es(e,t={}){let r,o;if(t.path){if(o=e.resolvedPaths.cwd,t.path.includes("*"))r=await Qr(t.path,{cwd:o,onlyFiles:true,ignore:["**/node_modules/**"],suppressErrors:true});else {let l=N__default.resolve(o,t.path),m=await promises.stat(l).catch(()=>null);if(!m)throw new Error(`File not found: ${t.path}`);if(m.isDirectory())o=l,r=await Qr("**/*.{js,ts,jsx,tsx}",{cwd:o,onlyFiles:true,ignore:["**/node_modules/**"],suppressErrors:true});else if(m.isFile())r=[t.path];else throw new Error(`Unsupported path type: ${t.path}`)}if(r.length===0)throw new Error(`No files found matching: ${t.path}`)}else {if(!e.resolvedPaths.ui)throw new Error("We could not find a valid `ui` path in your `components.json` file. Please ensure you have a valid `ui` path in your `components.json` file.");o=e.resolvedPaths.ui,r=await Qr("**/*.{js,ts,jsx,tsx}",{cwd:o,onlyFiles:true,suppressErrors:true});}if(!t.yes){let c=t.path?t.path:`./${N__default.relative(e.resolvedPaths.cwd,o)}`,{confirm:l}=await ge({type:"confirm",name:"confirm",initial:true,message:`We will migrate ${f.info(r.length)} file(s) in ${f.info(c)} to ${f.info("radix-ui")}. Continue?`});l||(g.info("Migration cancelled."),process.exit(0));}let n=D$1("Migrating imports...")?.start(),i=new Set;await Promise.all(r.map(async c=>{n.text=`Migrating ${c}...`;let l=N__default.join(o,c),m=await promises.readFile(l,"utf-8"),{content:d,replacedPackages:f}=await Sm(m);f.forEach(g=>i.add(g)),await promises.writeFile(l,d);})),n.succeed("Migrating imports.");let s=D$1("Updating package.json...")?.start();try{let c=A(e.resolvedPaths.cwd,!1);if(!c){s.fail("Could not read package.json"),g.warn("Could not update package.json. You may need to manually replace @radix-ui/react-* packages with radix-ui");return}let l=Array.from(i);if(l.length>0){if(c.dependencies||(c.dependencies={}),c.dependencies?.["radix-ui"]||c.devDependencies?.["radix-ui"])s.succeed("radix-ui already in package.json.");else {c.dependencies["radix-ui"]="latest";let d=N__default.join(e.resolvedPaths.cwd,"package.json");await promises.writeFile(d,JSON.stringify(c,null,2)+`
128
128
  `),s.succeed("Updated package.json."),await Ma$1(["radix-ui"],[],e,{silent:!1});}g.info(""),g.info("Migration complete. The following packages may be removed if no longer in use:"),g.info(f.info(l.join(", "))),g.info("Please review your codebase before removing.");}else s.succeed("No packages found in source files.");}catch{s.fail("Failed to update package.json"),g.warn("You may need to manually replace @radix-ui/react-* packages with radix-ui");}}async function Sm(e){let t=/import\s+(?:(type)\s+)?(?:\*\s+as\s+(\w+)|{([^}]+)})\s+from\s+(["'])@radix-ui\/react-([^"']+)\4(;?)/g,r=[],o=[],n=[],i='"',s=false,c=e,l;for(;(l=t.exec(e))!==null;){let[h,y,k,C,x,S,O]=l;if(S==="icons"||S.startsWith("icons/"))continue;o.push(h),o.length===1&&(i=x,s=O===";"),n.push(`@radix-ui/react-${S}`);let v=!!y;if(k){let F=xm(S);r.push({name:F,alias:k,isType:v});}else C&&bm(C,v,r,S);}if(r.length===0)return {content:e,replacedPackages:[]};let m=r.filter((h,y,k)=>y===k.findIndex(C=>C.name===h.name&&C.alias===h.alias&&C.isType===h.isType)),f=`import { ${m.map(h=>{let y=h.isType?"type ":"";return h.alias?`${y}${h.name} as ${h.alias}`:`${y}${h.name}`}).join(", ")} } from ${i}radix-ui${i}${s?";":""}`;c=o.reduce((h,y,k)=>h.replace(y,k===0?f:""),c),c=c.replace(/\n\s*\n\s*\n/g,`
129
129
 
130
130
  `),m.some(h=>h.name==="Slot"&&h.alias==="SlotPrimitive")&&(c=c.split(`
131
131
  `).map(k=>{if(k.trim().startsWith("import "))return k;let C=k;return C=C.replace(/\b(asChild\s*\?\s*)Slot(\s*:)/g,"$1__SLOT_PLACEHOLDER__$2"),C=C.replace(/\bReact\.ComponentProps<typeof\s+Slot>/g,"React.ComponentProps<typeof __SLOT_PLACEHOLDER__>"),C=C.replace(/\bComponentProps<typeof\s+Slot>/g,"ComponentProps<typeof __SLOT_PLACEHOLDER__>"),C=C.replace(/(<\/?)Slot(\s*\/?>)/g,"$1__SLOT_PLACEHOLDER__$2"),C=C.replace(/\bSlot\b/g,(x,S,O)=>{let v=O.substring(0,S),F=(v.match(/"/g)||[]).length,G=(v.match(/'/g)||[]).length;return F%2!==0||G%2!==0?x:"__SLOT_PLACEHOLDER__"}),C=C.replace(/__SLOT_PLACEHOLDER__/g,"SlotPrimitive.Slot"),C}).join(`
132
- `));let u=Array.from(new Set(n));return {content:c,replacedPackages:u}}var Rm=["sidebar.tsx","pagination.tsx","calendar.tsx"],Im=`${a$1}/docs/rtl#manual-migration-optional`;async function Ns(e,t={}){let r,o;if(t.path){if(o=e.resolvedPaths.cwd,t.path.includes("*"))r=await Qr(t.path,{cwd:o,onlyFiles:true,ignore:["**/node_modules/**"],suppressErrors:true});else {let m=N__default.resolve(o,t.path),p=await promises.stat(m).catch(()=>null);if(!p)throw new Error(`File not found: ${t.path}`);if(p.isDirectory())o=m,r=await Qr("**/*.{js,ts,jsx,tsx}",{cwd:o,onlyFiles:true,ignore:["**/node_modules/**"],suppressErrors:true});else if(p.isFile())r=[t.path];else throw new Error(`Unsupported path type: ${t.path}`)}if(r.length===0)throw new Error(`No files found matching: ${t.path}`)}else {if(!e.resolvedPaths.ui)throw new Error("Could not find a valid `ui` path in your `components.json`. Please provide a path or glob pattern.");o=e.resolvedPaths.ui,r=await Qr("**/*.{js,ts,jsx,tsx}",{cwd:o,onlyFiles:true,suppressErrors:true});}if(!t.yes){let l=t.path?t.path:`./${N__default.relative(e.resolvedPaths.cwd,o)}`,{confirm:m}=await ge({type:"confirm",name:"confirm",initial:true,message:`We will migrate ${f.info(r.length)} file(s) in ${f.info(l)} to RTL. Continue?`});m||(g.info("Migration cancelled."),process.exit(0));}let n=D$1("Updating components.json...").start();try{let l=N__default.resolve(e.resolvedPaths.cwd,"components.json"),m=JSON.parse(await promises.readFile(l,"utf-8"));m.rtl=!0,await promises.writeFile(l,JSON.stringify(m,null,2)+`
133
- `),n.succeed("Updated components.json.");}catch{throw n.fail("Failed to update components.json."),new Error("Could not update components.json. Please manually set `rtl: true`.")}let i=D$1("Migrating files to RTL...").start(),s=0,c=[];if(await Promise.all(r.map(async l=>{i.text=`Migrating ${l}...`;let m=N__default.join(o,l),p=await promises.readFile(m,"utf-8"),f=await e$2(p,true);f!==p&&(await promises.writeFile(m,f),s++);let g=N__default.basename(l);Rm.includes(g)&&c.push(l);})),i.succeed(`Migration complete. ${s} file(s) transformed.`),c.length>0){g.break(),g.warn("The following components may need manual RTL adjustments:");for(let l of c)g.info(` - ${l}`);g.break(),g.info(`See ${f.info(Im)} for more information.`);}}async function js(e){let t={};if(!D.existsSync(e.cwd)||!D.existsSync(N__default.resolve(e.cwd,"package.json")))return t["1"]=true,{errors:t,config:null};if(!D.existsSync(N__default.resolve(e.cwd,"components.json")))return t["3"]=true,{errors:t,config:null};try{let r=await Y(e.cwd);return {errors:t,config:r}}catch{g.break(),g.error(`An invalid ${f.info("components.json")} file was found at ${f.info(e.cwd)}.
134
- Before you can run a migration, you must create a valid ${f.info("components.json")} file by running the ${f.info("init")} command.`),g.error(`Learn more at ${f.info(`${a$1}/docs/components-json`)}.`),g.break(),process.exit(1);}}var Os=[{name:"cn",description:"migrate clsx and tailwind-merge to cn."},{name:"icons",description:"migrate your ui components to a different icon library."},{name:"base-color",description:"migrate your theme to a different base color."},{name:"radix",description:"migrate to radix-ui."},{name:"rtl",description:"migrate your components to support RTL (right-to-left)."}],Em=z.object({cwd:z.string(),list:z.boolean(),yes:z.boolean(),from:z.string().optional(),to:z.string().optional(),migration:z.string().refine(e=>e&&Os.some(t=>t.name===e),{message:"You must specify a valid migration. Run `shadcn migrate --list` to see available migrations."}).optional(),path:z.string().optional()}),Fs=new Command().name("migrate").description("run a migration.").argument("[migration]","the migration to run.").argument("[path]","optional path or glob pattern to migrate.").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-l, --list","list all migrations.",false).option("-y, --yes","skip confirmation prompt.",false).option("-f, --from <name>","the base color or icon library to migrate from.").option("-t, --to <name>","the base color or icon library to migrate to.").action(async(e,t,r)=>{try{let o=Em.parse({cwd:N__default.resolve(r.cwd),migration:e,path:t,list:r.list,yes:r.yes,from:r.from,to:r.to});if(o.list||!o.migration){g.info("Available migrations:");for(let s of Os)g.info(`- ${s.name}: ${s.description}`);return}if(o.migration==="cn"){await Zr({cwd:o.cwd,path:o.path,yes:o.yes});return}let{errors:n,config:i}=await js(o);if(n["1"])throw new Error("No `components.json` file found. Ensure you are at the root of your project.");if(n["3"])throw new Error("No `components.json` file found. Ensure you are at the root of your project.");if(!i)throw new Error("Something went wrong reading your `components.json` file. Please ensure you have a valid `components.json` file.");o.migration==="icons"&&await $s(i,{from:o.from,to:o.to,path:o.path,yes:o.yes}),o.migration==="base-color"&&await Ui(i,{from:o.from,to:o.to,yes:o.yes}),o.migration==="radix"&&await Es(i,{yes:o.yes,path:o.path}),o.migration==="rtl"&&await Ns(i,{yes:o.yes,path:o.path});}catch(o){g.break(),ka$1(o);}});function jm(e){return `${a$1}/create?preset=${e}`}function no(e){let t=s(e);if(!t)throw new Error(`Invalid preset code: ${e}`);let r=[],o=t.chartColor??h$1[t.theme]??t.theme;return t.chartColor||r.push("chartColor"),{code:e,version:e[0],values:{...t,chartColor:o},derived:r,url:jm(e)}}function Om(e){Zt({code:e.code,fallbacks:e.derived,values:e.values},{fallbackNote:" * Compatibility value for older preset versions."});}var Fm=new Command().name("decode").description("decode a preset code").argument("<code>","the preset code to decode").option("--json","output as JSON.",false).action((e,t)=>{try{let r=no(e);if(t.json){console.log(JSON.stringify({code:r.code,version:r.version,values:r.values,derived:r.derived,url:r.url},null,2));return}Om(r);}catch(r){lr(r);}}),Am=new Command().name("url").description("get the create URL for a preset code").argument("<code>","the preset code").action(e=>{try{g.log(no(e).url);}catch(t){lr(t);}}),Dm=new Command().name("open").description("open a preset code in the browser").argument("<code>","the preset code").action(async e=>{let t;try{t=no(e).url;}catch(r){lr(r);return}g.break(),g.log(` Opening ${t} in your browser.`),g.break();try{await ia(t);}catch(r){let o=r instanceof Error?r.message:String(r);lr(new Error(`Failed to open preset URL: ${o}`));}}),Lm=new Command().name("resolve").alias("info").description("resolve a preset from your project").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("--json","output as JSON.",false).action(async e=>{try{let t=N__default.resolve(e.cwd);if(!existsSync(N__default.resolve(t,"components.json"))&&await h(t)){let i$1=await i(t);i$1.length>0&&(e.json?console.log(JSON.stringify({error:"monorepo_root",message:"You are running preset resolve from a monorepo root. Use the -c flag to specify a workspace.",targets:i$1.map(s=>s.name)},null,2)):j$1("preset resolve",i$1),process.exit(1));}let r=await Y(t);if(!r){if(e.json){console.log(JSON.stringify(null,null,2));return}g.log("No components.json found.");return}let o=await Ca$1(t),n=await qt(r,o);if(e.json){console.log(JSON.stringify(n.code?n:null,null,2));return}Zt(n);}catch(t){ka$1(t);}}),io=new Command().name("preset").description("manage presets").addCommand(Fm).addCommand(Lm).addCommand(Am).addCommand(Dm).action(()=>{io.outputHelp();});function lr(e){e instanceof Error&&g.error(e.message),process.exit(1);}var Vm=z.object({cwd:z.string(),silent:z.boolean()}),Ds=new Command().name("add").description("add registries to your project").argument("[registries...]","registries (@namespace) or registry URLs (@namespace=url)").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-s, --silent","mute output.",false).action(async(e,t)=>{try{let r=Vm.parse({cwd:N__default.resolve(t.cwd),silent:t.silent}),o=e.length>0?e:await Wm({silent:r.silent});await Um(o,r.cwd,{silent:r.silent});}catch(r){g.break(),ka$1(r);}});function Bm(e){let[t,...r]=e.split("="),o=r.length>0?r.join("="):void 0;if(!t.startsWith("@"))throw new Error(`Invalid registry namespace: ${f.info(t)}. Registry names must start with @ (e.g., @acme).`);return {namespace:t,url:o}}function co(e,t,r){return `${e} ${e===1?t:r}`}async function Um(e,t,r){let o=["components.json","package.json"].map(y=>N__default.resolve(t,y)).find(y=>D.existsSync(y));if(!o)throw new Error(`No ${f.info("components.json")} or ${f.info("package.json")} found. Run ${f.info("shadcn init")} first.`);let n=N__default.basename(o),i=e.map(Bm),s=i.filter(y=>!y.url),c=[];if(s.length>0){let y=D$1("Fetching registries.",{silent:r.silent}).start(),k=await ya$1();if(!k)throw y.fail(),new Error("Failed to fetch registries.");y.succeed(),c=k;}let l={};for(let{namespace:y,url:k}of i){if(y in c$1){g.warn(`${f.info(y)} is a built-in registry and cannot be added.`);continue}if(k){if(!k.includes("{name}"))throw new Error(`Invalid registry URL for ${f.info(y)}. URL must include {name} placeholder. Example: ${f.info(`${y}=https://example.com/r/{name}.json`)}`);l[y]=k;}else {let C=c.find(x=>x.name===y);if(!C)throw new Error(`Registry ${f.info(y)} not found. Provide a URL: ${f.info(`${y}=https://.../{name}.json`)}`);l[y]=C.url;}}if(Object.keys(l).length===0)return {addedRegistries:[]};let m=await D.readJson(o),p=m.registries||{},f$1={},g$1=[];for(let[y,k]of Object.entries(l))p[y]?g$1.push(y):f$1[y]=k;if(Object.keys(f$1).length===0){if(g$1.length>0&&!r.silent){D$1(`Skipped ${co(g$1.length,"registry","registries")}: (already configured)`,{silent:r.silent})?.info();for(let y of g$1)g.log(` - ${y}`);}else r.silent||g.info("No new registries to add.");return}let u={...m,registries:{...p,...f$1}},h=D$1(`Updating ${n}.`,{silent:r.silent}).start();if(await D.writeJson(o,u,{spaces:2}),h.succeed(),!r.silent){let y=Object.keys(f$1);D$1(`Added ${co(y.length,"registry","registries")}:`,{silent:r.silent})?.succeed();for(let k of y)g.log(` - ${k}`);if(g$1.length>0){D$1(`Skipped ${co(g$1.length,"registry","registries")}: (already configured)`,{silent:r.silent})?.info();for(let k of g$1)g.log(` - ${k}`);}}}async function Wm(e){let t=D$1("Fetching registries.",{silent:e.silent}).start(),r=await ya$1();if(!r)throw t.fail(),new Error("Failed to fetch registries.");t.succeed();let o=[...r].sort((i,s)=>i.name.localeCompare(s.name)),{selected:n}=await ge({type:"autocompleteMultiselect",name:"selected",message:"Which registries would you like to add?",hint:"Space to select. A to toggle all. Enter to submit.",instructions:false,choices:o.map(i=>({title:i.name,description:i.description,value:i.name}))});return n?.length||(g.warn("No registries selected. Exiting."),g.info(""),process.exit(1)),n}var Ls=32,Jm=f$3.options.filter(e=>e!=="registry:example"&&e!=="registry:internal"),zm=z.record(z.string(),z.unknown()),Hm=z.array(z.string()),Gm=z.array(z.unknown());async function Ms(e){let t=N.resolve(e.cwd),r=N.resolve(t,e.registryFile),o={cwd:t,rootFile:r,usesInclude:false,diagnostics:[],registryFiles:new Set,checkedRegistryFiles:new Set,itemsChecked:0,itemSourcesByItem:new Map,firstIncludedFrom:new Map};if(N.basename(r)!=="registry.json"&&j(o,{registryFile:r,message:"Root source registry file must be named registry.json.",suggestion:"Rename the file to registry.json and pass that file to shadcn registry validate."}),!go(r,t))return j(o,{registryFile:r,message:`Root registry file must stay inside ${Ze(t,t)}.`,suggestion:"Run the command from the registry root or pass a registry.json file inside --cwd."}),fo(o);let n=await Bs(r,o);if(!n)return fo(o);o.usesInclude=!!n.include?.length,Km(n,r,o);let i=await Vs(r,n,o,[]);return qm(i,o),await Xm(i,o),fo(o)}async function Vs(e,t,r,o){if(o.length>=Ls)return j(r,{registryFile:e,message:`Registry include tree is too deep. The maximum include depth is ${Ls}.`,suggestion:"Flatten part of the registry include tree or reduce nested include depth."}),[];if(o.includes(e))return j(r,{registryFile:e,message:`Registry include cycle detected: ${nf([...o,e])}.`,suggestion:"Remove one include so the registry graph is acyclic."}),[];let n=o.at(-1)??e,i=r.firstIncludedFrom.get(e);if(i)return j(r,{registryFile:e,message:`Registry file included more than once. First included from ${Ze(i,r.cwd)}, then included from ${Ze(n,r.cwd)}.`,suggestion:"Remove one include or move shared items into a single included registry.json."}),[];r.registryFiles.add(e),r.firstIncludedFrom.set(e,n);let s=N.dirname(e),c=[...o,e],l=[];for(let p of t.include??[]){let f=Ym(p,e,s,r);if(!f)continue;let g=await Bs(f,r);if(!g)continue;let u=await Vs(f,g,r,c);l.push(...u);}let m=!r.usesInclude&&e===r.rootFile?r.cwd:s;return t.items.forEach((p,f)=>{r.itemSourcesByItem.set(p,{registryFile:e,registryDir:m,itemIndex:f});}),[...l,...t.items]}async function Bs(e,t){t.checkedRegistryFiles.add(e);let r;try{r=await $e.readFile(e,"utf-8");}catch{return j(t,{registryFile:e,message:"Registry file was not found or could not be read.",suggestion:"Check that the registry.json file exists and is readable."}),null}let o;try{o=JSON.parse(r);}catch{return j(t,{registryFile:e,message:"Registry file contains invalid JSON.",suggestion:"Fix the JSON syntax in the registry.json file."}),null}return ef(o,e,t)}function Km(e,t,r){!e.name&&!e.hasName&&j(r,{registryFile:t,message:'Root registry.json must define "name".',suggestion:'Add a top-level "name" field to the root registry.json.'}),!e.homepage&&!e.hasHomepage&&j(r,{registryFile:t,message:'Root registry.json must define "homepage".',suggestion:'Add a top-level "homepage" field to the root registry.json.'});}function Ym(e,t,r,o){if(O(e))return j(o,{registryFile:t,includePath:e,message:`Remote include "${e}" is not supported.`,suggestion:"Use a relative path to an explicit registry.json file in the same repository."}),null;if(N.isAbsolute(e))return j(o,{registryFile:t,includePath:e,message:`Include "${e}" must be relative.`,suggestion:'Use a path like "components/ui/registry.json".'}),null;if(Us(e))return j(o,{registryFile:t,includePath:e,message:`Include "${e}" cannot use parent-directory traversal.`,suggestion:"Registry includes must descend from the including chunk. Move shared registries into the registry root and include them from there."}),null;if(N.basename(e)!=="registry.json")return j(o,{registryFile:t,includePath:e,message:`Include "${e}" must explicitly reference a registry.json file.`,suggestion:'Use a path like "components/ui/registry.json".'}),null;let n=N.resolve(r,e);return go(n,o.cwd)?n:(j(o,{registryFile:t,includePath:e,message:`Include "${e}" must stay inside ${Ze(o.cwd,o.cwd)}.`,suggestion:"Keep included registry.json files inside the registry root."}),null)}function qm(e,t){let r=new Map;for(let o of e){let n=r.get(o.name);if(!n){r.set(o.name,o);continue}let i=t.itemSourcesByItem.get(n),s=t.itemSourcesByItem.get(o);j(t,{registryFile:s?.registryFile??t.rootFile,itemName:o.name,itemIndex:s?.itemIndex,message:`Duplicate registry item name "${o.name}". First defined at ${sf(i,t.cwd)}.`,suggestion:"Rename one of these items so each name is unique across the resolved registry."});}}async function Xm(e,t){let r=of(t);for(let o of e){let n=t.itemSourcesByItem.get(o),i={...Qm(o,t,r),$schema:"https://ui.shadcn.com/schema/registry-item.json"};for(let c=0;c<(o.files?.length??0);c++){let l=o.files?.[c];if(!l||!n)continue;let m=Zm(o,l.path,n,t);if(m)try{await $e.readFile(m,"utf-8");}catch{j(t,{registryFile:n.registryFile,itemName:o.name,itemIndex:n.itemIndex,filePath:l.path,message:`File "${l.path}" was not found or could not be read.`,suggestion:"Make sure the file path is relative to the registry.json file that declares the item."});}}let s=n$1.safeParse(i);s.success||ht(s.error,n?.registryFile??t.rootFile,t,{itemName:o.name,itemIndex:n?.itemIndex,suggestion:"Update the registry item so the built item matches the registry item schema."});}}function Zm(e,t,r,o){if(O(t))return j(o,{registryFile:r.registryFile,itemName:e.name,itemIndex:r.itemIndex,filePath:t,message:`File path "${t}" cannot be remote.`,suggestion:"Use a local file path relative to the registry.json file that declares the item."}),null;if(N.isAbsolute(t))return j(o,{registryFile:r.registryFile,itemName:e.name,itemIndex:r.itemIndex,filePath:t,message:`File path "${t}" must be relative.`,suggestion:"Use a local file path relative to the registry.json file that declares the item."}),null;if(Us(t))return j(o,{registryFile:r.registryFile,itemName:e.name,itemIndex:r.itemIndex,filePath:t,message:`File path "${t}" cannot use parent-directory traversal.`,suggestion:"Keep item files inside the registry chunk directory."}),null;let n=N.resolve(r.registryDir,t);return go(n,r.registryDir)?n:(j(o,{registryFile:r.registryFile,itemName:e.name,itemIndex:r.itemIndex,filePath:t,message:`File path "${t}" must stay inside the registry chunk directory.`,suggestion:"Move the file into the same registry chunk directory or update the registry item path."}),null)}function Qm(e,t,r){let o=t.itemSourcesByItem.get(e);return {...e,files:e.files?.map(n=>{let i=N.resolve(o?.registryDir??t.cwd,n.path);return {...n,path:N.relative(r,i).split(N.sep).join("/")}})}}function ef(e,t,r){let o=zm.safeParse(e);if(!o.success)return ht(o.error,t,r,{suggestion:"Update the registry.json file so it matches the schema."}),null;let n=o.data,i={$schema:mo(n,"$schema",t,r),name:mo(n,"name",t,r),homepage:mo(n,"homepage",t,r),hasName:n.name!==void 0,hasHomepage:n.homepage!==void 0,items:[]};if(n.include!==void 0){let s=Hm.safeParse(n.include);s.success?i.include=s.data:ht(s.error,t,r,{pathPrefix:["include"],suggestion:"Update include so it is an array of registry.json paths."});}if(n.items!==void 0){let s=Gm.safeParse(n.items);s.success?(r.itemsChecked+=s.data.length,i.items=tf(s.data,t,r)):ht(s.error,t,r,{pathPrefix:["items"],suggestion:"Update items so it is an array of registry items."});}return n.items===void 0&&n.include===void 0&&j(r,{registryFile:t,message:"Registry must define at least one of `items` or `include`.",suggestion:'Add an "items" array, an "include" array, or both to registry.json.'}),i}function tf(e,t,r){let o=[];return e.forEach((n,i)=>{let s=n$1.safeParse(n);if(!s.success){ht(s.error,t,r,{itemName:rf(n),itemIndex:i,suggestion:"Update the registry item so it matches the registry item schema."});return}o.push(s.data);}),o}function mo(e,t,r,o){let n=e[t];if(n!==void 0){if(typeof n=="string")return n;j(o,{registryFile:r,message:`${t}: Expected string, received ${typeof n}.`,suggestion:`Update "${t}" so it is a string.`});}}function rf(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e.name;return typeof t=="string"?t:void 0}function ht(e,t,r,o){for(let n of e.errors)j(r,{registryFile:t,itemName:o.itemName,itemIndex:o.itemIndex,message:af(n,o.pathPrefix),suggestion:o.suggestion});}function j(e,t){e.diagnostics.push(t);}function fo(e,t){return {valid:e.diagnostics.length===0,cwd:e.cwd,registryFiles:e.checkedRegistryFiles.size,registryFilePaths:Array.from(e.checkedRegistryFiles),items:e.itemsChecked,diagnostics:e.diagnostics}}function of(e){return e.usesInclude?N.dirname(e.rootFile):e.cwd}function Us(e){return e.split(/[\\/]+/).includes("..")}function go(e,t){let r=N.relative(t,e);return !!r&&!r.startsWith("..")&&!N.isAbsolute(r)}function nf(e){return e.map(t=>Ze(t,N.dirname(e[0]))).join(" -> ")}function sf(e,t){return e?`${Ze(e.registryFile,t)} items[${e.itemIndex}]`:"unknown source"}function _s(e){return e.length?e.join("."):"(root)"}function af(e,t=[]){let r=[...t,...e.path];return e.code===z.ZodIssueCode.invalid_union_discriminator&&e.path.at(-1)==="type"?`${_s(r)}: Invalid registry item type. Expected ${Jm.map(o=>`"${o}"`).join(" | ")}.`:`${_s(r)}: ${e.message}`}function Ze(e,t){let r=N.relative(t,e);return r&&!r.startsWith("..")&&!N.isAbsolute(r)?r.split(N.sep).join("/"):r?e:"."}var lf=z.object({cwd:z.string(),registryFile:z.string()}),Hs=new Command().name("validate").description("validate a shadcn registry").argument("[registry]","registry address to validate. Supports registry.json paths and GitHub sources.","./registry.json").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{let r;try{let o=lf.parse({cwd:N.resolve(t.cwd),registryFile:e}),n=await gf(e,o.cwd);r=D$1("Validating registry.").start();let i=n?await ea(n):await Ms(o);mf(i,r),i.valid||(process.exitCode=1);}catch(o){r?.fail("Registry validation failed."),g.break(),ka$1(o);}});function mf(e,t){if(e.valid){t.succeed("Registry is valid."),Ws(e,{success:true});return}t.fail("Registry validation failed."),Ws(e),g.break();for(let[r,o]of Array.from(ff(e))){g.log(f.info(Gs(r,e.cwd)));for(let n of o)g.error(` - ${pf(n)}`),n.suggestion&&g.log(` ${n.suggestion}`);g.break();}}function Ws(e,t={}){let r=`Checked ${Js(e.registryFiles,"registry file","registry files")} and ${Js(e.items,"item","items")}.`;t.success?df(r):g.log(` ${r}`);for(let o of e.registryFilePaths)g.log(` - ${Gs(o,e.cwd)}`);}function ff(e){let t=new Map;for(let r of e.diagnostics){let o=t.get(r.registryFile)??[];o.push(r),t.set(r.registryFile,o);}return t}function pf(e){let t=[];return e.itemIndex!==void 0&&t.push(`items[${e.itemIndex}]`),e.itemName&&t.push(`"${e.itemName}"`),e.includePath&&t.push(`include "${e.includePath}"`),e.filePath&&t.push(`file "${e.filePath}"`),t.length?`${t.join(" ")}: ${e.message}`:e.message}function Gs(e,t){let r=N.relative(t,e);return r&&!r.startsWith("..")&&!N.isAbsolute(r)?r.split(N.sep).join("/"):r?e:"."}function df(e){D$1(e).succeed();}function Js(e,t,r){return `${e} ${e===1?t:r}`}async function gf(e,t){return uf(e)||await hf(N.resolve(t,e))?null:Q(e)}function uf(e){return e.startsWith(".")||N.isAbsolute(e)||e.endsWith(".json")}async function hf(e){try{return await $e.access(e),!0}catch{return false}}var Ks=new Command().name("registry").description("manage registries").addCommand(Ds).addCommand(Hs);var kf=z.object({cwd:z.string(),query:z.string().optional(),types:z.array(z.string()).optional(),limit:z.number().optional(),offset:z.number().optional()}),Xs=new Command().name("search").alias("list").description("search items from registries").argument("[registries...]","the registry addresses to search. Supports namespaces, GitHub sources and URLs. When omitted, searches all registries configured in components.json.").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-q, --query <query>","query string").option("-t, --type <type>","filter by item type, e.g. ui, block, hook. Comma-separated for multiple.").option("-l, --limit <number>","maximum number of items to display","100").option("-o, --offset <number>","number of items to skip","0").option("--json","output as JSON.",false).action(async(e,t)=>{try{let r=kf.parse({cwd:N__default.resolve(t.cwd),query:t.query,types:t.type?t.type.split(",").map(h=>h.trim()).filter(Boolean):void 0,limit:t.limit?parseInt(t.limit,10):void 0,offset:t.offset?parseInt(t.offset,10):void 0});if(r.types?.length){let h=ab(r.types);h.length>0&&(g.break(),g.error(`Unknown ${h.length===1?"type":"types"}: ${h.map(y=>f.info(y)).join(", ")}.`),g.error(`Valid types: ${$a.join(", ")}.`),g.break(),process.exit(1));}await Sa(r.cwd);let o=aa({style:"new-york",resolvedPaths:{cwd:r.cwd}}),n=ba(o),i=N__default.resolve(r.cwd,"components.json"),s=D.existsSync(i);if(s){let h=await D.readJson(i),y=c.partial().parse(h);n=ba({...o,...y});}let c$2=n;try{let h=await Y(r.cwd);h&&(c$2=ba(h));}catch{}let l=e.length===0;l&&!s&&(g.break(),g.error(`Provide a registry or namespace to search, e.g. ${f.info("shadcn search @shadcn")}.`),g.break(),g.error(`If you have a ${f.info("components.json")} with registries configured, run ${f.info("shadcn search")} with no arguments to search all of them.`),g.break(),process.exit(1));let{config:m,newRegistries:p}=await U(e.filter(h=>h.startsWith("@")&&!c$2.registries?.[h]&&!(h in c$1)).map(h=>`${h}/registry`),c$2,{silent:!0,writeFile:!1});p.length>0&&(c$2.registries=m.registries);let f$1=Za$1(e,c$2);l&&f$1.length===0&&(g.break(),g.error(`No registries are configured in ${f.info("components.json")}.`),g.error(`Provide a registry or namespace to search, e.g. ${f.info("shadcn search @shadcn")}.`),g.break(),process.exit(1)),l||ca$1(f$1,c$2);let g$1=await _a$1(f$1,{query:r.query,types:r.types,limit:r.limit,offset:r.offset,config:c$2,continueOnError:l}),u=l&&g$1.errors?.length===f$1.length;t.json?console.log(JSON.stringify(g$1,null,2)):bb(g$1,{query:r.query,types:r.types,registries:f$1}),process.exit(u?1:0);}catch(r){ka$1(r);}finally{S();}});var xf=z.object({cwd:z.string()}),ta=new Command().name("view").description("view items from the registry").argument("<items...>","item addresses to view").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{try{let r=xf.parse({cwd:N__default.resolve(t.cwd)});await Sa(r.cwd);let o=ba({}),n=N__default.resolve(r.cwd,"components.json");if(D.existsSync(n)){let m=await D.readJson(n),p=c.partial().parse(m);o=ba(p);}let i=o;try{let m=await Y(r.cwd);m&&(i=ba(m));}catch{}let{config:s,newRegistries:c$1}=await U(e,i,{silent:!0,writeFile:!1});c$1.length>0&&(i.registries=s.registries),ca$1(e,i);let l=await ma$1(e,{config:i});console.log(JSON.stringify(l,null,2)),process.exit(0);}catch(r){ka$1(r);}finally{S();}});process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function Sf(){let e=new Command().name("shadcn").description("build your component library").version(ja$1.version||"1.0.0","-v, --version","display the version number");e.addCommand(Bn).addCommand(ci).addCommand(ri).addCommand(gi).addCommand(hi).addCommand(ta).addCommand(Xs).addCommand(Fs).addCommand(wi).addCommand(Ai).addCommand(pi).addCommand(Ur).addCommand(io).addCommand(Ks),e.parse();}Sf();
132
+ `));let u=Array.from(new Set(n));return {content:c,replacedPackages:u}}var Rm=["sidebar.tsx","pagination.tsx","calendar.tsx"],Im=`${a$1}/docs/rtl#manual-migration-optional`;async function Ns(e,t={}){let r,o;if(t.path){if(o=e.resolvedPaths.cwd,t.path.includes("*"))r=await Qr(t.path,{cwd:o,onlyFiles:true,ignore:["**/node_modules/**"],suppressErrors:true});else {let m=N__default.resolve(o,t.path),d=await promises.stat(m).catch(()=>null);if(!d)throw new Error(`File not found: ${t.path}`);if(d.isDirectory())o=m,r=await Qr("**/*.{js,ts,jsx,tsx}",{cwd:o,onlyFiles:true,ignore:["**/node_modules/**"],suppressErrors:true});else if(d.isFile())r=[t.path];else throw new Error(`Unsupported path type: ${t.path}`)}if(r.length===0)throw new Error(`No files found matching: ${t.path}`)}else {if(!e.resolvedPaths.ui)throw new Error("Could not find a valid `ui` path in your `components.json`. Please provide a path or glob pattern.");o=e.resolvedPaths.ui,r=await Qr("**/*.{js,ts,jsx,tsx}",{cwd:o,onlyFiles:true,suppressErrors:true});}if(!t.yes){let l=t.path?t.path:`./${N__default.relative(e.resolvedPaths.cwd,o)}`,{confirm:m}=await ge({type:"confirm",name:"confirm",initial:true,message:`We will migrate ${f.info(r.length)} file(s) in ${f.info(l)} to RTL. Continue?`});m||(g.info("Migration cancelled."),process.exit(0));}let n=D$1("Updating components.json...").start();try{let l=N__default.resolve(e.resolvedPaths.cwd,"components.json"),m=JSON.parse(await promises.readFile(l,"utf-8"));m.rtl=!0,await promises.writeFile(l,JSON.stringify(m,null,2)+`
133
+ `),n.succeed("Updated components.json.");}catch{throw n.fail("Failed to update components.json."),new Error("Could not update components.json. Please manually set `rtl: true`.")}let i=D$1("Migrating files to RTL...").start(),s=0,c=[];if(await Promise.all(r.map(async l=>{i.text=`Migrating ${l}...`;let m=N__default.join(o,l),d=await promises.readFile(m,"utf-8"),f=await e$2(d,true);f!==d&&(await promises.writeFile(m,f),s++);let g=N__default.basename(l);Rm.includes(g)&&c.push(l);})),i.succeed(`Migration complete. ${s} file(s) transformed.`),c.length>0){g.break(),g.warn("The following components may need manual RTL adjustments:");for(let l of c)g.info(` - ${l}`);g.break(),g.info(`See ${f.info(Im)} for more information.`);}}async function js(e){let t={};if(!D.existsSync(e.cwd)||!D.existsSync(N__default.resolve(e.cwd,"package.json")))return t["1"]=true,{errors:t,config:null};if(!D.existsSync(N__default.resolve(e.cwd,"components.json")))return t["3"]=true,{errors:t,config:null};try{let r=await Y(e.cwd);return {errors:t,config:r}}catch{g.break(),g.error(`An invalid ${f.info("components.json")} file was found at ${f.info(e.cwd)}.
134
+ Before you can run a migration, you must create a valid ${f.info("components.json")} file by running the ${f.info("init")} command.`),g.error(`Learn more at ${f.info(`${a$1}/docs/components-json`)}.`),g.break(),process.exit(1);}}var Os=[{name:"cn",description:"migrate clsx and tailwind-merge to cn."},{name:"icons",description:"migrate your ui components to a different icon library."},{name:"base-color",description:"migrate your theme to a different base color."},{name:"radix",description:"migrate to radix-ui."},{name:"rtl",description:"migrate your components to support RTL (right-to-left)."}],Em=z.object({cwd:z.string(),list:z.boolean(),yes:z.boolean(),from:z.string().optional(),to:z.string().optional(),migration:z.string().refine(e=>e&&Os.some(t=>t.name===e),{message:"You must specify a valid migration. Run `shadcn migrate --list` to see available migrations."}).optional(),path:z.string().optional()}),Fs=new Command().name("migrate").description("run a migration.").argument("[migration]","the migration to run.").argument("[path]","optional path or glob pattern to migrate.").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-l, --list","list all migrations.",false).option("-y, --yes","skip confirmation prompt.",false).option("-f, --from <name>","the base color or icon library to migrate from.").option("-t, --to <name>","the base color or icon library to migrate to.").action(async(e,t,r)=>{try{let o=Em.parse({cwd:N__default.resolve(r.cwd),migration:e,path:t,list:r.list,yes:r.yes,from:r.from,to:r.to});if(o.list||!o.migration){g.info("Available migrations:");for(let s of Os)g.info(`- ${s.name}: ${s.description}`);return}if(o.migration==="cn"){await Zr({cwd:o.cwd,path:o.path,yes:o.yes});return}let{errors:n,config:i}=await js(o);if(n["1"])throw new Error("No `components.json` file found. Ensure you are at the root of your project.");if(n["3"])throw new Error("No `components.json` file found. Ensure you are at the root of your project.");if(!i)throw new Error("Something went wrong reading your `components.json` file. Please ensure you have a valid `components.json` file.");o.migration==="icons"&&await $s(i,{from:o.from,to:o.to,path:o.path,yes:o.yes}),o.migration==="base-color"&&await Ui(i,{from:o.from,to:o.to,yes:o.yes}),o.migration==="radix"&&await Es(i,{yes:o.yes,path:o.path}),o.migration==="rtl"&&await Ns(i,{yes:o.yes,path:o.path});}catch(o){g.break(),ka$1(o);}});function jm(e){return `${a$1}/create?preset=${e}`}function no(e){let t=s(e);if(!t)throw new Error(`Invalid preset code: ${e}`);let r=[],o=t.chartColor??h$1[t.theme]??t.theme;return t.chartColor||r.push("chartColor"),{code:e,version:e[0],values:{...t,chartColor:o},derived:r,url:jm(e)}}function Om(e){Zt({code:e.code,fallbacks:e.derived,values:e.values},{fallbackNote:" * Compatibility value for older preset versions."});}var Fm=new Command().name("decode").description("decode a preset code").argument("<code>","the preset code to decode").option("--json","output as JSON.",false).action((e,t)=>{try{let r=no(e);if(t.json){console.log(JSON.stringify({code:r.code,version:r.version,values:r.values,derived:r.derived,url:r.url},null,2));return}Om(r);}catch(r){lr(r);}}),Am=new Command().name("url").description("get the create URL for a preset code").argument("<code>","the preset code").action(e=>{try{g.log(no(e).url);}catch(t){lr(t);}}),Dm=new Command().name("open").description("open a preset code in the browser").argument("<code>","the preset code").action(async e=>{let t;try{t=no(e).url;}catch(r){lr(r);return}g.break(),g.log(` Opening ${t} in your browser.`),g.break();try{await ia(t);}catch(r){let o=r instanceof Error?r.message:String(r);lr(new Error(`Failed to open preset URL: ${o}`));}}),Lm=new Command().name("resolve").alias("info").description("resolve a preset from your project").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("--json","output as JSON.",false).action(async e=>{try{let t=N__default.resolve(e.cwd);if(!existsSync(N__default.resolve(t,"components.json"))&&await h(t)){let i$1=await i(t);i$1.length>0&&(e.json?console.log(JSON.stringify({error:"monorepo_root",message:"You are running preset resolve from a monorepo root. Use the -c flag to specify a workspace.",targets:i$1.map(s=>s.name)},null,2)):j$1("preset resolve",i$1),process.exit(1));}let r=await Y(t);if(!r){if(e.json){console.log(JSON.stringify(null,null,2));return}g.log("No components.json found.");return}let o=await Ca$1(t),n=await qt(r,o);if(e.json){console.log(JSON.stringify(n.code?n:null,null,2));return}Zt(n);}catch(t){ka$1(t);}}),io=new Command().name("preset").description("manage presets").addCommand(Fm).addCommand(Lm).addCommand(Am).addCommand(Dm).action(()=>{io.outputHelp();});function lr(e){e instanceof Error&&g.error(e.message),process.exit(1);}var Vm=z.object({cwd:z.string(),silent:z.boolean()}),Ds=new Command().name("add").description("add registries to your project").argument("[registries...]","registries (@namespace) or registry URLs (@namespace=url)").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-s, --silent","mute output.",false).action(async(e,t)=>{try{let r=Vm.parse({cwd:N__default.resolve(t.cwd),silent:t.silent}),o=e.length>0?e:await Wm({silent:r.silent});await Um(o,r.cwd,{silent:r.silent});}catch(r){g.break(),ka$1(r);}});function Bm(e){let[t,...r]=e.split("="),o=r.length>0?r.join("="):void 0;if(!t.startsWith("@"))throw new Error(`Invalid registry namespace: ${f.info(t)}. Registry names must start with @ (e.g., @acme).`);return {namespace:t,url:o}}function co(e,t,r){return `${e} ${e===1?t:r}`}async function Um(e,t,r){let o=["components.json","package.json"].map(y=>N__default.resolve(t,y)).find(y=>D.existsSync(y));if(!o)throw new Error(`No ${f.info("components.json")} or ${f.info("package.json")} found. Run ${f.info("shadcn init")} first.`);let n=N__default.basename(o),i=e.map(Bm),s=i.filter(y=>!y.url),c=[];if(s.length>0){let y=D$1("Fetching registries.",{silent:r.silent}).start(),k=await ya$1();if(!k)throw y.fail(),new Error("Failed to fetch registries.");y.succeed(),c=k;}let l={};for(let{namespace:y,url:k}of i){if(y in c$1){g.warn(`${f.info(y)} is a built-in registry and cannot be added.`);continue}if(k){if(!k.includes("{name}"))throw new Error(`Invalid registry URL for ${f.info(y)}. URL must include {name} placeholder. Example: ${f.info(`${y}=https://example.com/r/{name}.json`)}`);l[y]=k;}else {let C=c.find(x=>x.name===y);if(!C)throw new Error(`Registry ${f.info(y)} not found. Provide a URL: ${f.info(`${y}=https://.../{name}.json`)}`);l[y]=C.url;}}if(Object.keys(l).length===0)return {addedRegistries:[]};let m=await D.readJson(o),d=m.registries||{},f$1={},g$1=[];for(let[y,k]of Object.entries(l))d[y]?g$1.push(y):f$1[y]=k;if(Object.keys(f$1).length===0){if(g$1.length>0&&!r.silent){D$1(`Skipped ${co(g$1.length,"registry","registries")}: (already configured)`,{silent:r.silent})?.info();for(let y of g$1)g.log(` - ${y}`);}else r.silent||g.info("No new registries to add.");return}let u={...m,registries:{...d,...f$1}},h=D$1(`Updating ${n}.`,{silent:r.silent}).start();if(await D.writeJson(o,u,{spaces:2}),h.succeed(),!r.silent){let y=Object.keys(f$1);D$1(`Added ${co(y.length,"registry","registries")}:`,{silent:r.silent})?.succeed();for(let k of y)g.log(` - ${k}`);if(g$1.length>0){D$1(`Skipped ${co(g$1.length,"registry","registries")}: (already configured)`,{silent:r.silent})?.info();for(let k of g$1)g.log(` - ${k}`);}}}async function Wm(e){let t=D$1("Fetching registries.",{silent:e.silent}).start(),r=await ya$1();if(!r)throw t.fail(),new Error("Failed to fetch registries.");t.succeed();let o=[...r].sort((i,s)=>i.name.localeCompare(s.name)),{selected:n}=await ge({type:"autocompleteMultiselect",name:"selected",message:"Which registries would you like to add?",hint:"Space to select. A to toggle all. Enter to submit.",instructions:false,choices:o.map(i=>({title:i.name,description:i.description,value:i.name}))});return n?.length||(g.warn("No registries selected. Exiting."),g.info(""),process.exit(1)),n}var Ls=32,Jm=f$3.options.filter(e=>e!=="registry:example"&&e!=="registry:internal"),zm=z.record(z.string(),z.unknown()),Hm=z.array(z.string()),Gm=z.array(z.unknown());async function Ms(e){let t=N.resolve(e.cwd),r=N.resolve(t,e.registryFile),o={cwd:t,rootFile:r,usesInclude:false,diagnostics:[],registryFiles:new Set,checkedRegistryFiles:new Set,itemsChecked:0,itemSourcesByItem:new Map,firstIncludedFrom:new Map};if(N.basename(r)!=="registry.json"&&j(o,{registryFile:r,message:"Root source registry file must be named registry.json.",suggestion:"Rename the file to registry.json and pass that file to shadcn registry validate."}),!go(r,t))return j(o,{registryFile:r,message:`Root registry file must stay inside ${Ze(t,t)}.`,suggestion:"Run the command from the registry root or pass a registry.json file inside --cwd."}),fo(o);let n=await Bs(r,o);if(!n)return fo(o);o.usesInclude=!!n.include?.length,Km(n,r,o);let i=await Vs(r,n,o,[]);return qm(i,o),await Xm(i,o),fo(o)}async function Vs(e,t,r,o){if(o.length>=Ls)return j(r,{registryFile:e,message:`Registry include tree is too deep. The maximum include depth is ${Ls}.`,suggestion:"Flatten part of the registry include tree or reduce nested include depth."}),[];if(o.includes(e))return j(r,{registryFile:e,message:`Registry include cycle detected: ${nf([...o,e])}.`,suggestion:"Remove one include so the registry graph is acyclic."}),[];let n=o.at(-1)??e,i=r.firstIncludedFrom.get(e);if(i)return j(r,{registryFile:e,message:`Registry file included more than once. First included from ${Ze(i,r.cwd)}, then included from ${Ze(n,r.cwd)}.`,suggestion:"Remove one include or move shared items into a single included registry.json."}),[];r.registryFiles.add(e),r.firstIncludedFrom.set(e,n);let s=N.dirname(e),c=[...o,e],l=[];for(let d of t.include??[]){let f=Ym(d,e,s,r);if(!f)continue;let g=await Bs(f,r);if(!g)continue;let u=await Vs(f,g,r,c);l.push(...u);}let m=!r.usesInclude&&e===r.rootFile?r.cwd:s;return t.items.forEach((d,f)=>{r.itemSourcesByItem.set(d,{registryFile:e,registryDir:m,itemIndex:f});}),[...l,...t.items]}async function Bs(e,t){t.checkedRegistryFiles.add(e);let r;try{r=await $e.readFile(e,"utf-8");}catch{return j(t,{registryFile:e,message:"Registry file was not found or could not be read.",suggestion:"Check that the registry.json file exists and is readable."}),null}let o;try{o=JSON.parse(r);}catch{return j(t,{registryFile:e,message:"Registry file contains invalid JSON.",suggestion:"Fix the JSON syntax in the registry.json file."}),null}return ef(o,e,t)}function Km(e,t,r){!e.name&&!e.hasName&&j(r,{registryFile:t,message:'Root registry.json must define "name".',suggestion:'Add a top-level "name" field to the root registry.json.'}),!e.homepage&&!e.hasHomepage&&j(r,{registryFile:t,message:'Root registry.json must define "homepage".',suggestion:'Add a top-level "homepage" field to the root registry.json.'});}function Ym(e,t,r,o){if(O(e))return j(o,{registryFile:t,includePath:e,message:`Remote include "${e}" is not supported.`,suggestion:"Use a relative path to an explicit registry.json file in the same repository."}),null;if(N.isAbsolute(e))return j(o,{registryFile:t,includePath:e,message:`Include "${e}" must be relative.`,suggestion:'Use a path like "components/ui/registry.json".'}),null;if(Us(e))return j(o,{registryFile:t,includePath:e,message:`Include "${e}" cannot use parent-directory traversal.`,suggestion:"Registry includes must descend from the including chunk. Move shared registries into the registry root and include them from there."}),null;if(N.basename(e)!=="registry.json")return j(o,{registryFile:t,includePath:e,message:`Include "${e}" must explicitly reference a registry.json file.`,suggestion:'Use a path like "components/ui/registry.json".'}),null;let n=N.resolve(r,e);return go(n,o.cwd)?n:(j(o,{registryFile:t,includePath:e,message:`Include "${e}" must stay inside ${Ze(o.cwd,o.cwd)}.`,suggestion:"Keep included registry.json files inside the registry root."}),null)}function qm(e,t){let r=new Map;for(let o of e){let n=r.get(o.name);if(!n){r.set(o.name,o);continue}let i=t.itemSourcesByItem.get(n),s=t.itemSourcesByItem.get(o);j(t,{registryFile:s?.registryFile??t.rootFile,itemName:o.name,itemIndex:s?.itemIndex,message:`Duplicate registry item name "${o.name}". First defined at ${sf(i,t.cwd)}.`,suggestion:"Rename one of these items so each name is unique across the resolved registry."});}}async function Xm(e,t){let r=of(t);for(let o of e){let n=t.itemSourcesByItem.get(o),i={...Qm(o,t,r),$schema:"https://ui.shadcn.com/schema/registry-item.json"};for(let c=0;c<(o.files?.length??0);c++){let l=o.files?.[c];if(!l||!n)continue;let m=Zm(o,l.path,n,t);if(m)try{await $e.readFile(m,"utf-8");}catch{j(t,{registryFile:n.registryFile,itemName:o.name,itemIndex:n.itemIndex,filePath:l.path,message:`File "${l.path}" was not found or could not be read.`,suggestion:"Make sure the file path is relative to the registry.json file that declares the item."});}}let s=n$1.safeParse(i);s.success||ht(s.error,n?.registryFile??t.rootFile,t,{itemName:o.name,itemIndex:n?.itemIndex,suggestion:"Update the registry item so the built item matches the registry item schema."});}}function Zm(e,t,r,o){if(O(t))return j(o,{registryFile:r.registryFile,itemName:e.name,itemIndex:r.itemIndex,filePath:t,message:`File path "${t}" cannot be remote.`,suggestion:"Use a local file path relative to the registry.json file that declares the item."}),null;if(N.isAbsolute(t))return j(o,{registryFile:r.registryFile,itemName:e.name,itemIndex:r.itemIndex,filePath:t,message:`File path "${t}" must be relative.`,suggestion:"Use a local file path relative to the registry.json file that declares the item."}),null;if(Us(t))return j(o,{registryFile:r.registryFile,itemName:e.name,itemIndex:r.itemIndex,filePath:t,message:`File path "${t}" cannot use parent-directory traversal.`,suggestion:"Keep item files inside the registry chunk directory."}),null;let n=N.resolve(r.registryDir,t);return go(n,r.registryDir)?n:(j(o,{registryFile:r.registryFile,itemName:e.name,itemIndex:r.itemIndex,filePath:t,message:`File path "${t}" must stay inside the registry chunk directory.`,suggestion:"Move the file into the same registry chunk directory or update the registry item path."}),null)}function Qm(e,t,r){let o=t.itemSourcesByItem.get(e);return {...e,files:e.files?.map(n=>{let i=N.resolve(o?.registryDir??t.cwd,n.path);return {...n,path:N.relative(r,i).split(N.sep).join("/")}})}}function ef(e,t,r){let o=zm.safeParse(e);if(!o.success)return ht(o.error,t,r,{suggestion:"Update the registry.json file so it matches the schema."}),null;let n=o.data,i={$schema:mo(n,"$schema",t,r),name:mo(n,"name",t,r),homepage:mo(n,"homepage",t,r),hasName:n.name!==void 0,hasHomepage:n.homepage!==void 0,items:[]};if(n.include!==void 0){let s=Hm.safeParse(n.include);s.success?i.include=s.data:ht(s.error,t,r,{pathPrefix:["include"],suggestion:"Update include so it is an array of registry.json paths."});}if(n.items!==void 0){let s=Gm.safeParse(n.items);s.success?(r.itemsChecked+=s.data.length,i.items=tf(s.data,t,r)):ht(s.error,t,r,{pathPrefix:["items"],suggestion:"Update items so it is an array of registry items."});}return n.items===void 0&&n.include===void 0&&j(r,{registryFile:t,message:"Registry must define at least one of `items` or `include`.",suggestion:'Add an "items" array, an "include" array, or both to registry.json.'}),i}function tf(e,t,r){let o=[];return e.forEach((n,i)=>{let s=n$1.safeParse(n);if(!s.success){ht(s.error,t,r,{itemName:rf(n),itemIndex:i,suggestion:"Update the registry item so it matches the registry item schema."});return}o.push(s.data);}),o}function mo(e,t,r,o){let n=e[t];if(n!==void 0){if(typeof n=="string")return n;j(o,{registryFile:r,message:`${t}: Expected string, received ${typeof n}.`,suggestion:`Update "${t}" so it is a string.`});}}function rf(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e.name;return typeof t=="string"?t:void 0}function ht(e,t,r,o){for(let n of e.errors)j(r,{registryFile:t,itemName:o.itemName,itemIndex:o.itemIndex,message:af(n,o.pathPrefix),suggestion:o.suggestion});}function j(e,t){e.diagnostics.push(t);}function fo(e,t){return {valid:e.diagnostics.length===0,cwd:e.cwd,registryFiles:e.checkedRegistryFiles.size,registryFilePaths:Array.from(e.checkedRegistryFiles),items:e.itemsChecked,diagnostics:e.diagnostics}}function of(e){return e.usesInclude?N.dirname(e.rootFile):e.cwd}function Us(e){return e.split(/[\\/]+/).includes("..")}function go(e,t){let r=N.relative(t,e);return !!r&&!r.startsWith("..")&&!N.isAbsolute(r)}function nf(e){return e.map(t=>Ze(t,N.dirname(e[0]))).join(" -> ")}function sf(e,t){return e?`${Ze(e.registryFile,t)} items[${e.itemIndex}]`:"unknown source"}function _s(e){return e.length?e.join("."):"(root)"}function af(e,t=[]){let r=[...t,...e.path];return e.code===z.ZodIssueCode.invalid_union_discriminator&&e.path.at(-1)==="type"?`${_s(r)}: Invalid registry item type. Expected ${Jm.map(o=>`"${o}"`).join(" | ")}.`:`${_s(r)}: ${e.message}`}function Ze(e,t){let r=N.relative(t,e);return r&&!r.startsWith("..")&&!N.isAbsolute(r)?r.split(N.sep).join("/"):r?e:"."}var lf=z.object({cwd:z.string(),registryFile:z.string()}),Hs=new Command().name("validate").description("validate a shadcn registry").argument("[registry]","registry address to validate. Supports registry.json paths and GitHub sources.","./registry.json").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{let r;try{let o=lf.parse({cwd:N.resolve(t.cwd),registryFile:e}),n=await gf(e,o.cwd);r=D$1("Validating registry.").start();let i=n?await ea(n):await Ms(o);mf(i,r),i.valid||(process.exitCode=1);}catch(o){r?.fail("Registry validation failed."),g.break(),ka$1(o);}});function mf(e,t){if(e.valid){t.succeed("Registry is valid."),Ws(e,{success:true});return}t.fail("Registry validation failed."),Ws(e),g.break();for(let[r,o]of Array.from(ff(e))){g.log(f.info(Gs(r,e.cwd)));for(let n of o)g.error(` - ${pf(n)}`),n.suggestion&&g.log(` ${n.suggestion}`);g.break();}}function Ws(e,t={}){let r=`Checked ${Js(e.registryFiles,"registry file","registry files")} and ${Js(e.items,"item","items")}.`;t.success?df(r):g.log(` ${r}`);for(let o of e.registryFilePaths)g.log(` - ${Gs(o,e.cwd)}`);}function ff(e){let t=new Map;for(let r of e.diagnostics){let o=t.get(r.registryFile)??[];o.push(r),t.set(r.registryFile,o);}return t}function pf(e){let t=[];return e.itemIndex!==void 0&&t.push(`items[${e.itemIndex}]`),e.itemName&&t.push(`"${e.itemName}"`),e.includePath&&t.push(`include "${e.includePath}"`),e.filePath&&t.push(`file "${e.filePath}"`),t.length?`${t.join(" ")}: ${e.message}`:e.message}function Gs(e,t){let r=N.relative(t,e);return r&&!r.startsWith("..")&&!N.isAbsolute(r)?r.split(N.sep).join("/"):r?e:"."}function df(e){D$1(e).succeed();}function Js(e,t,r){return `${e} ${e===1?t:r}`}async function gf(e,t){return uf(e)||await hf(N.resolve(t,e))?null:Q(e)}function uf(e){return e.startsWith(".")||N.isAbsolute(e)||e.endsWith(".json")}async function hf(e){try{return await $e.access(e),!0}catch{return false}}var Ks=new Command().name("registry").description("manage registries").addCommand(Ds).addCommand(Hs);var kf=z.object({cwd:z.string(),query:z.string().optional(),types:z.array(z.string()).optional(),limit:z.number().optional(),offset:z.number().optional()}),Xs=new Command().name("search").alias("list").description("search items from registries").argument("[registries...]","the registry addresses to search. Supports namespaces, GitHub sources and URLs. When omitted, searches all registries configured in components.json.").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-q, --query <query>","query string").option("-t, --type <type>","filter by item type, e.g. ui, block, hook. Comma-separated for multiple.").option("-l, --limit <number>","maximum number of items to display","100").option("-o, --offset <number>","number of items to skip","0").option("--json","output as JSON.",false).action(async(e,t)=>{try{let r=kf.parse({cwd:N__default.resolve(t.cwd),query:t.query,types:t.type?t.type.split(",").map(h=>h.trim()).filter(Boolean):void 0,limit:t.limit?parseInt(t.limit,10):void 0,offset:t.offset?parseInt(t.offset,10):void 0});if(r.types?.length){let h=ab(r.types);h.length>0&&(g.break(),g.error(`Unknown ${h.length===1?"type":"types"}: ${h.map(y=>f.info(y)).join(", ")}.`),g.error(`Valid types: ${$a.join(", ")}.`),g.break(),process.exit(1));}await Sa(r.cwd);let o=aa({style:"new-york",resolvedPaths:{cwd:r.cwd}}),n=ba(o),i=N__default.resolve(r.cwd,"components.json"),s=D.existsSync(i);if(s){let h=await D.readJson(i),y=c.partial().parse(h);n=ba({...o,...y});}let c$2=n;try{let h=await Y(r.cwd);h&&(c$2=ba(h));}catch{}let l=e.length===0;l&&!s&&(g.break(),g.error(`Provide a registry or namespace to search, e.g. ${f.info("shadcn search @shadcn")}.`),g.break(),g.error(`If you have a ${f.info("components.json")} with registries configured, run ${f.info("shadcn search")} with no arguments to search all of them.`),g.break(),process.exit(1));let{config:m,newRegistries:d}=await U(e.filter(h=>h.startsWith("@")&&!c$2.registries?.[h]&&!(h in c$1)).map(h=>`${h}/registry`),c$2,{silent:!0,writeFile:!1});d.length>0&&(c$2.registries=m.registries);let f$1=Za$1(e,c$2);l&&f$1.length===0&&(g.break(),g.error(`No registries are configured in ${f.info("components.json")}.`),g.error(`Provide a registry or namespace to search, e.g. ${f.info("shadcn search @shadcn")}.`),g.break(),process.exit(1)),l||ca$1(f$1,c$2);let g$1=await _a$1(f$1,{query:r.query,types:r.types,limit:r.limit,offset:r.offset,config:c$2,continueOnError:l}),u=l&&g$1.errors?.length===f$1.length;t.json?console.log(JSON.stringify(g$1,null,2)):bb(g$1,{query:r.query,types:r.types,registries:f$1}),process.exit(u?1:0);}catch(r){ka$1(r);}finally{S();}});var xf=z.object({cwd:z.string()}),ta=new Command().name("view").description("view items from the registry").argument("<items...>","item addresses to view").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{try{let r=xf.parse({cwd:N__default.resolve(t.cwd)});await Sa(r.cwd);let o=ba({}),n=N__default.resolve(r.cwd,"components.json");if(D.existsSync(n)){let m=await D.readJson(n),d=c.partial().parse(m);o=ba(d);}let i=o;try{let m=await Y(r.cwd);m&&(i=ba(m));}catch{}let{config:s,newRegistries:c$1}=await U(e,i,{silent:!0,writeFile:!1});c$1.length>0&&(i.registries=s.registries),ca$1(e,i);let l=await ma$1(e,{config:i});console.log(JSON.stringify(l,null,2)),process.exit(0);}catch(r){ka$1(r);}finally{S();}});process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function Sf(){let e=new Command().name("shadcn").description("build your component library").version(ja$1.version||"1.0.0","-v, --version","display the version number");e.addCommand(Bn).addCommand(ci).addCommand(ri).addCommand(gi).addCommand(hi).addCommand(ta).addCommand(Xs).addCommand(Fs).addCommand(wi).addCommand(Ai).addCommand(pi).addCommand(Ur).addCommand(io).addCommand(Ks),e.parse();}Sf();
package/dist/mcp/index.js CHANGED
@@ -1 +1 @@
1
- export{a as server}from'../chunk-6NXUDK4F.js';import'../chunk-CE53DPEU.js';import'../chunk-2XFBGS5K.js';import'../chunk-4WBGNKSZ.js';import'../chunk-7SBJAAAY.js';import'../chunk-CHWMSXYA.js';
1
+ export{a as server}from'../chunk-TWAHNSYO.js';import'../chunk-B2MD6U5O.js';import'../chunk-2XFBGS5K.js';import'../chunk-4WBGNKSZ.js';import'../chunk-G5AI2VJ6.js';import'../chunk-CHWMSXYA.js';
@@ -1 +1 @@
1
- export{y as RegistriesIndexParseError,m as RegistryError,l as RegistryErrorCode,q as RegistryFetchError,p as RegistryForbiddenError,x as RegistryInvalidNamespaceError,v as RegistryItemNotFoundError,s as RegistryLocalFileError,w as RegistryMissingEnvironmentVariablesError,r as RegistryNotConfiguredError,n as RegistryNotFoundError,t as RegistryParseError,o as RegistryUnauthorizedError,u as RegistryValidationError,Ya as addRegistryItems,ya as getRegistries,oa as getRegistriesConfig,za as getRegistriesIndex,la as getRegistry,ma as getRegistryItems,Ta as loadRegistry,Ua as loadRegistryItem,na as resolveRegistryItems,_a as searchRegistries}from'../chunk-CE53DPEU.js';import'../chunk-2XFBGS5K.js';import'../chunk-4WBGNKSZ.js';import'../chunk-7SBJAAAY.js';import'../chunk-CHWMSXYA.js';
1
+ export{y as RegistriesIndexParseError,m as RegistryError,l as RegistryErrorCode,q as RegistryFetchError,p as RegistryForbiddenError,x as RegistryInvalidNamespaceError,v as RegistryItemNotFoundError,s as RegistryLocalFileError,w as RegistryMissingEnvironmentVariablesError,r as RegistryNotConfiguredError,n as RegistryNotFoundError,t as RegistryParseError,o as RegistryUnauthorizedError,u as RegistryValidationError,Ya as addRegistryItems,ya as getRegistries,oa as getRegistriesConfig,za as getRegistriesIndex,la as getRegistry,ma as getRegistryItems,Ta as loadRegistry,Ua as loadRegistryItem,na as resolveRegistryItems,_a as searchRegistries}from'../chunk-B2MD6U5O.js';import'../chunk-2XFBGS5K.js';import'../chunk-4WBGNKSZ.js';import'../chunk-G5AI2VJ6.js';import'../chunk-CHWMSXYA.js';
@@ -1 +1 @@
1
- export{e as transformDirection,f as transformFont,c as transformIcons,g as transformMenu}from'../chunk-7SBJAAAY.js';import'../chunk-CHWMSXYA.js';import D from'postcss';import k from'postcss-selector-parser';import {z}from'zod';import {Project,ScriptKind,SyntaxKind,Node}from'ts-morph';import {twMerge}from'tailwind-merge';var b="cn-",B=z.record(z.string().startsWith(b),z.string());function X(t){let e=D.parse(t),r={};return e.walkRules(n=>{let s=n.selectors??[];if(s.length===0)return;let o=q(n);if(o)for(let l of s){let c=_(l);k(i=>{i.each(u=>{let f=G(u);if(!f)return;let g=f.value;g.startsWith(b)&&(r[g]=r[g]?`${o} ${r[g]}`:o);});}).processSync(c);}}),B.parse(r)}function _(t){return t.replace(/\s*&\s*/g,"").trim()}function q(t){let e=[];for(let r of t.nodes||[])if(r.type==="atrule"&&r.name==="apply"){let n=r.params.trim();n&&e.push(n);}return e.length===0?null:e.join(" ")}function G(t){let e=[];return t.walkClasses(r=>{r.value.startsWith(b)&&e.push(r);}),e.length===0?null:e[e.length-1]}var A=new Set(["cn-menu-target","cn-menu-translucent","cn-logical-sides","cn-rtl-flip","cn-font-heading"]);function p(t){return Node.isStringLiteral(t)||Node.isNoSubstitutionTemplateLiteral(t)}var M=async({sourceFile:t,styleMap:e})=>{let r=new Set;return U(t,e,r),Y(t,e,r),Q(t,e,r),rt(t,e,r),t};function Q(t,e,r){t.forEachDescendant(n=>{if(!Node.isPropertyAssignment(n)||n.getNameNode().getText()!=="className")return;let s=n.getInitializer();!s||!Node.isCallExpression(s)||S(s)&&I(s,e,r);});}function $(t,e,r){let n=t.getLiteralText(),s=E(n);if(s.length===0)return;let o=s.filter(i=>!r.has(i));if(o.length===0){let i=m(n);t.setLiteralValue(i);return}let c=o.filter(i=>!A.has(i)).map(i=>e[i]).filter(i=>!!i);if(c.length>0){let i=c.join(" "),u=m(h(i,n));t.setLiteralValue(u),o.forEach(f=>r.add(f));}else {let i=m(n);t.setLiteralValue(i);}}function U(t,e,r){t.forEachDescendant(n=>{if(!Node.isCallExpression(n))return;let s=n.getExpression();if(!Node.isIdentifier(s)||s.getText()!=="cva")return;let o=n.getArguments()[0];Node.isStringLiteral(o)&&$(o,e,r);let l=n.getArguments()[1];if(!l||!Node.isObjectLiteralExpression(l))return;let c=l.getProperties().find(u=>Node.isPropertyAssignment(u)&&Node.isIdentifier(u.getNameNode())&&u.getNameNode().getText()==="variants");if(!c||!Node.isPropertyAssignment(c))return;let i=c.getInitializer();!i||!Node.isObjectLiteralExpression(i)||i.getProperties().forEach(u=>{if(!Node.isPropertyAssignment(u))return;let f=u.getInitializer();!f||!Node.isObjectLiteralExpression(f)||f.getProperties().forEach(g=>{if(!Node.isPropertyAssignment(g))return;let x=g.getInitializer();x&&Node.isStringLiteral(x)&&$(x,e,r);});});});}function Y(t,e,r){t.forEachDescendant(n=>{if(!Node.isJsxAttribute(n)||n.getNameNode().getText()!=="className")return;let s=n.getInitializer();if(!s)return;let o=Z(s);if(o.length>0){o.forEach(g=>I(g,e,r));return}let l=tt(s);if(l.length===0)return;let c=n.getParent()?.getParent();if(!c||!Node.isJsxOpeningElement(c)&&!Node.isJsxSelfClosingElement(c))return;let i=l.filter(g=>!r.has(g));if(i.length===0){P(s);return}let f=i.filter(g=>!A.has(g)).map(g=>e[g]).filter(g=>!!g);if(f.length>0){let g=f.join(" ");et(c,g);}else P(s);});}function Z(t){if(!Node.isJsxExpression(t))return [];let e=t.getExpression();if(!e||Node.isCallExpression(e)&&S(e))return [];let r=[];return e.forEachDescendant(n=>{Node.isCallExpression(n)&&S(n)&&r.push(n);}),r}function tt(t){let e=[];if(p(t))return E(t.getLiteralText());if(!Node.isJsxExpression(t))return e;let r=t.getExpression();if(!r)return e;if(p(r))return E(r.getLiteralText());if(Node.isCallExpression(r)&&S(r))for(let n of r.getArguments())p(n)&&e.push(...E(n.getLiteralText()));return e}function P(t){if(p(t)){let r=m(t.getLiteralText());t.setLiteralValue(r);return}if(!Node.isJsxExpression(t))return;let e=t.getExpression();if(e){if(p(e)){let r=m(e.getLiteralText());e.setLiteralValue(r);return}if(Node.isCallExpression(e)&&S(e)){for(let r of e.getArguments())if(p(r)){let n=m(r.getLiteralText());r.setLiteralValue(n);}N(e);}}}function E(t){let e=t.matchAll(/\bcn-[\w-]+\b/g);return Array.from(e,r=>r[0])}function m(t){return t.replace(/\bcn-[\w-]+\b/g,e=>A.has(e)?e:"").replace(/\s+/g," ").trim()}function N(t){if(!S(t))return;let e=t.getArguments(),r=e.filter(n=>p(n)?n.getLiteralText().trim()!=="":true);if(r.length!==e.length){let n=r.map(o=>o.getText()),s=t.getParent();s&&Node.isJsxExpression(s)?s.replaceWithText(`{cn(${n.join(", ")})}`):t.replaceWithText(`cn(${n.join(", ")})`);}}function et(t,e){if(!Node.isJsxOpeningElement(t)&&!Node.isJsxSelfClosingElement(t))return;let r=t.getAttributes().find(o=>Node.isJsxAttribute(o)&&o.getNameNode().getText()==="className");if(!r||!Node.isJsxAttribute(r)){t.addAttribute({name:"className",initializer:`{cn(${JSON.stringify(e)})}`});return}let n=r.getInitializer();if(!n){r.setInitializer(`{cn(${JSON.stringify(e)})}`);return}if(p(n)){let o=n.getLiteralText(),l=m(h(e,o));n.setLiteralValue(l);return}if(!Node.isJsxExpression(n))return;let s=n.getExpression();if(!s){r.setInitializer(`{cn(${JSON.stringify(e)})}`);return}if(p(s)){let o=s.getLiteralText(),l=m(h(e,o));s.setLiteralValue(l);return}if(Node.isCallExpression(s)&&S(s)){let o=s.getArguments()[0];if(p(o)){let i=o.getLiteralText(),u=m(h(e,i));o.setLiteralValue(u);for(let f=1;f<s.getArguments().length;f++){let g=s.getArguments()[f];if(p(g)){let x=g.getLiteralText(),y=m(x);y!==x&&g.setLiteralValue(y);}}N(s);return}let l=s.getArguments().map(i=>{if(p(i)){let u=m(i.getLiteralText());return u?JSON.stringify(u):null}return i.getText()}).filter(i=>i!==null),c=[JSON.stringify(e),...l];r.setInitializer(`{cn(${c.join(", ")})}`);return}r.setInitializer(`{cn(${JSON.stringify(e)}, ${s.getText()})}`);}function h(t,e){return twMerge(t,e)}function S(t){let e=t.getExpression();return Node.isIdentifier(e)&&e.getText()==="cn"}function rt(t,e,r){t.forEachDescendant(n=>{if(!Node.isCallExpression(n))return;let s=n.getExpression();if(!(!Node.isIdentifier(s)||s.getText()!=="mergeProps"))for(let o of n.getArguments()){if(!Node.isObjectLiteralExpression(o))continue;let l=o.getProperties().find(i=>Node.isPropertyAssignment(i)&&Node.isIdentifier(i.getNameNode())&&i.getNameNode().getText()==="className");if(!l||!Node.isPropertyAssignment(l))continue;let c=l.getInitializer();c&&Node.isCallExpression(c)&&S(c)&&I(c,e,r,true);}});}function I(t,e,r,n=false){let s=nt(t);if(s.length===0)return;let o=s.filter(i=>!r.has(i));if(o.length===0){w(t);return}let c=o.filter(i=>!A.has(i)).map(i=>e[i]).filter(i=>!!i);if(c.length===0){w(t);return}st(t,c.join(" ")),n&&o.forEach(i=>r.add(i));}function nt(t){let e=[];for(let r of t.getArguments())p(r)&&e.push(...E(r.getLiteralText()));return e}function w(t){for(let e of t.getArguments())if(p(e)){let r=m(e.getLiteralText());e.setLiteralValue(r);}N(t);}function st(t,e){let r=t.getArguments()[0];if(p(r)){let l=r.getLiteralText(),c=m(h(e,l));r.setLiteralValue(c);for(let i=1;i<t.getArguments().length;i++){let u=t.getArguments()[i];if(p(u)){let f=u.getLiteralText(),g=m(f);g!==f&&u.setLiteralValue(g);}}N(t);return}let n=t.getArguments().map(l=>{if(p(l)){let c=m(l.getLiteralText());return c?JSON.stringify(c):null}return l.getText()}).filter(l=>l!==null),s=[JSON.stringify(e),...n];t.getParent()&&t.replaceWithText(`cn(${s.join(", ")})`);}async function at(t,{styleMap:e,transformers:r=[M]}){let s=new Project({useInMemoryFileSystem:true}).createSourceFile("component.tsx",t,{scriptKind:ScriptKind.TSX,overwrite:true});for(let o of r)await o({sourceFile:s,styleMap:e});return s.getText()}var lt=async({sourceFile:t,config:e})=>{if(!e.style?.startsWith("base-"))return t;let r=[],n=t.getDescendantsOfKind(SyntaxKind.JsxElement);for(let s of n){let o=s.getOpeningElement(),l=o.getAttribute("render");if(!l)continue;let i=s.getJsxChildren().map(d=>d.getText()).join("").trim();if(!i||l.getKind()!==SyntaxKind.JsxAttribute)continue;let f=l.asKindOrThrow(SyntaxKind.JsxAttribute).getInitializer();if(!f||f.getKind()!==SyntaxKind.JsxExpression)continue;let x=f.asKindOrThrow(SyntaxKind.JsxExpression).getExpression();if(!x||x.getKind()!==SyntaxKind.JsxSelfClosingElement)continue;let y=x.asKindOrThrow(SyntaxKind.JsxSelfClosingElement),C=y.getTagNameNode().getText(),J=y.getAttributes().map(d=>d.getText()).join(" "),j=J?`{<${C} ${J}>${i}</${C}>}`:`{<${C}>${i}</${C}>}`,F=o.getTagNameNode().getText(),O=o.getAttributes().filter(d=>d.getKind()===SyntaxKind.JsxAttribute?d.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText()!=="render":true).map(d=>d.getText()).join(" "),V=O?`${O} render=${j}`:`render=${j}`,z=`<${F} ${V} />`;r.push({elementStart:s.getStart(),elementEnd:s.getEnd(),newText:z});}for(let s of r.reverse()){let o=t.getFullText(),l=o.substring(0,s.elementStart)+s.newText+o.substring(s.elementEnd);t.replaceWithText(l);}return t};export{X as createStyleMap,lt as transformRender,at as transformStyle};
1
+ export{e as transformDirection,f as transformFont,c as transformIcons,g as transformMenu}from'../chunk-G5AI2VJ6.js';import'../chunk-CHWMSXYA.js';import D from'postcss';import k from'postcss-selector-parser';import {z}from'zod';import {Project,ScriptKind,SyntaxKind,Node}from'ts-morph';import {twMerge}from'cn';var b="cn-",B=z.record(z.string().startsWith(b),z.string());function X(t){let e=D.parse(t),r={};return e.walkRules(n=>{let s=n.selectors??[];if(s.length===0)return;let o=q(n);if(o)for(let l of s){let c=_(l);k(i=>{i.each(u=>{let f=G(u);if(!f)return;let g=f.value;g.startsWith(b)&&(r[g]=r[g]?`${o} ${r[g]}`:o);});}).processSync(c);}}),B.parse(r)}function _(t){return t.replace(/\s*&\s*/g,"").trim()}function q(t){let e=[];for(let r of t.nodes||[])if(r.type==="atrule"&&r.name==="apply"){let n=r.params.trim();n&&e.push(n);}return e.length===0?null:e.join(" ")}function G(t){let e=[];return t.walkClasses(r=>{r.value.startsWith(b)&&e.push(r);}),e.length===0?null:e[e.length-1]}var A=new Set(["cn-menu-target","cn-menu-translucent","cn-logical-sides","cn-rtl-flip","cn-font-heading"]);function p(t){return Node.isStringLiteral(t)||Node.isNoSubstitutionTemplateLiteral(t)}var M=async({sourceFile:t,styleMap:e})=>{let r=new Set;return U(t,e,r),Y(t,e,r),Q(t,e,r),rt(t,e,r),t};function Q(t,e,r){t.forEachDescendant(n=>{if(!Node.isPropertyAssignment(n)||n.getNameNode().getText()!=="className")return;let s=n.getInitializer();!s||!Node.isCallExpression(s)||S(s)&&I(s,e,r);});}function $(t,e,r){let n=t.getLiteralText(),s=E(n);if(s.length===0)return;let o=s.filter(i=>!r.has(i));if(o.length===0){let i=m(n);t.setLiteralValue(i);return}let c=o.filter(i=>!A.has(i)).map(i=>e[i]).filter(i=>!!i);if(c.length>0){let i=c.join(" "),u=m(h(i,n));t.setLiteralValue(u),o.forEach(f=>r.add(f));}else {let i=m(n);t.setLiteralValue(i);}}function U(t,e,r){t.forEachDescendant(n=>{if(!Node.isCallExpression(n))return;let s=n.getExpression();if(!Node.isIdentifier(s)||s.getText()!=="cva")return;let o=n.getArguments()[0];Node.isStringLiteral(o)&&$(o,e,r);let l=n.getArguments()[1];if(!l||!Node.isObjectLiteralExpression(l))return;let c=l.getProperties().find(u=>Node.isPropertyAssignment(u)&&Node.isIdentifier(u.getNameNode())&&u.getNameNode().getText()==="variants");if(!c||!Node.isPropertyAssignment(c))return;let i=c.getInitializer();!i||!Node.isObjectLiteralExpression(i)||i.getProperties().forEach(u=>{if(!Node.isPropertyAssignment(u))return;let f=u.getInitializer();!f||!Node.isObjectLiteralExpression(f)||f.getProperties().forEach(g=>{if(!Node.isPropertyAssignment(g))return;let x=g.getInitializer();x&&Node.isStringLiteral(x)&&$(x,e,r);});});});}function Y(t,e,r){t.forEachDescendant(n=>{if(!Node.isJsxAttribute(n)||n.getNameNode().getText()!=="className")return;let s=n.getInitializer();if(!s)return;let o=Z(s);if(o.length>0){o.forEach(g=>I(g,e,r));return}let l=tt(s);if(l.length===0)return;let c=n.getParent()?.getParent();if(!c||!Node.isJsxOpeningElement(c)&&!Node.isJsxSelfClosingElement(c))return;let i=l.filter(g=>!r.has(g));if(i.length===0){P(s);return}let f=i.filter(g=>!A.has(g)).map(g=>e[g]).filter(g=>!!g);if(f.length>0){let g=f.join(" ");et(c,g);}else P(s);});}function Z(t){if(!Node.isJsxExpression(t))return [];let e=t.getExpression();if(!e||Node.isCallExpression(e)&&S(e))return [];let r=[];return e.forEachDescendant(n=>{Node.isCallExpression(n)&&S(n)&&r.push(n);}),r}function tt(t){let e=[];if(p(t))return E(t.getLiteralText());if(!Node.isJsxExpression(t))return e;let r=t.getExpression();if(!r)return e;if(p(r))return E(r.getLiteralText());if(Node.isCallExpression(r)&&S(r))for(let n of r.getArguments())p(n)&&e.push(...E(n.getLiteralText()));return e}function P(t){if(p(t)){let r=m(t.getLiteralText());t.setLiteralValue(r);return}if(!Node.isJsxExpression(t))return;let e=t.getExpression();if(e){if(p(e)){let r=m(e.getLiteralText());e.setLiteralValue(r);return}if(Node.isCallExpression(e)&&S(e)){for(let r of e.getArguments())if(p(r)){let n=m(r.getLiteralText());r.setLiteralValue(n);}N(e);}}}function E(t){let e=t.matchAll(/\bcn-[\w-]+\b/g);return Array.from(e,r=>r[0])}function m(t){return t.replace(/\bcn-[\w-]+\b/g,e=>A.has(e)?e:"").replace(/\s+/g," ").trim()}function N(t){if(!S(t))return;let e=t.getArguments(),r=e.filter(n=>p(n)?n.getLiteralText().trim()!=="":true);if(r.length!==e.length){let n=r.map(o=>o.getText()),s=t.getParent();s&&Node.isJsxExpression(s)?s.replaceWithText(`{cn(${n.join(", ")})}`):t.replaceWithText(`cn(${n.join(", ")})`);}}function et(t,e){if(!Node.isJsxOpeningElement(t)&&!Node.isJsxSelfClosingElement(t))return;let r=t.getAttributes().find(o=>Node.isJsxAttribute(o)&&o.getNameNode().getText()==="className");if(!r||!Node.isJsxAttribute(r)){t.addAttribute({name:"className",initializer:`{cn(${JSON.stringify(e)})}`});return}let n=r.getInitializer();if(!n){r.setInitializer(`{cn(${JSON.stringify(e)})}`);return}if(p(n)){let o=n.getLiteralText(),l=m(h(e,o));n.setLiteralValue(l);return}if(!Node.isJsxExpression(n))return;let s=n.getExpression();if(!s){r.setInitializer(`{cn(${JSON.stringify(e)})}`);return}if(p(s)){let o=s.getLiteralText(),l=m(h(e,o));s.setLiteralValue(l);return}if(Node.isCallExpression(s)&&S(s)){let o=s.getArguments()[0];if(p(o)){let i=o.getLiteralText(),u=m(h(e,i));o.setLiteralValue(u);for(let f=1;f<s.getArguments().length;f++){let g=s.getArguments()[f];if(p(g)){let x=g.getLiteralText(),y=m(x);y!==x&&g.setLiteralValue(y);}}N(s);return}let l=s.getArguments().map(i=>{if(p(i)){let u=m(i.getLiteralText());return u?JSON.stringify(u):null}return i.getText()}).filter(i=>i!==null),c=[JSON.stringify(e),...l];r.setInitializer(`{cn(${c.join(", ")})}`);return}r.setInitializer(`{cn(${JSON.stringify(e)}, ${s.getText()})}`);}function h(t,e){return twMerge(t,e)}function S(t){let e=t.getExpression();return Node.isIdentifier(e)&&e.getText()==="cn"}function rt(t,e,r){t.forEachDescendant(n=>{if(!Node.isCallExpression(n))return;let s=n.getExpression();if(!(!Node.isIdentifier(s)||s.getText()!=="mergeProps"))for(let o of n.getArguments()){if(!Node.isObjectLiteralExpression(o))continue;let l=o.getProperties().find(i=>Node.isPropertyAssignment(i)&&Node.isIdentifier(i.getNameNode())&&i.getNameNode().getText()==="className");if(!l||!Node.isPropertyAssignment(l))continue;let c=l.getInitializer();c&&Node.isCallExpression(c)&&S(c)&&I(c,e,r,true);}});}function I(t,e,r,n=false){let s=nt(t);if(s.length===0)return;let o=s.filter(i=>!r.has(i));if(o.length===0){w(t);return}let c=o.filter(i=>!A.has(i)).map(i=>e[i]).filter(i=>!!i);if(c.length===0){w(t);return}st(t,c.join(" ")),n&&o.forEach(i=>r.add(i));}function nt(t){let e=[];for(let r of t.getArguments())p(r)&&e.push(...E(r.getLiteralText()));return e}function w(t){for(let e of t.getArguments())if(p(e)){let r=m(e.getLiteralText());e.setLiteralValue(r);}N(t);}function st(t,e){let r=t.getArguments()[0];if(p(r)){let l=r.getLiteralText(),c=m(h(e,l));r.setLiteralValue(c);for(let i=1;i<t.getArguments().length;i++){let u=t.getArguments()[i];if(p(u)){let f=u.getLiteralText(),g=m(f);g!==f&&u.setLiteralValue(g);}}N(t);return}let n=t.getArguments().map(l=>{if(p(l)){let c=m(l.getLiteralText());return c?JSON.stringify(c):null}return l.getText()}).filter(l=>l!==null),s=[JSON.stringify(e),...n];t.getParent()&&t.replaceWithText(`cn(${s.join(", ")})`);}async function at(t,{styleMap:e,transformers:r=[M]}){let s=new Project({useInMemoryFileSystem:true}).createSourceFile("component.tsx",t,{scriptKind:ScriptKind.TSX,overwrite:true});for(let o of r)await o({sourceFile:s,styleMap:e});return s.getText()}var lt=async({sourceFile:t,config:e})=>{if(!e.style?.startsWith("base-"))return t;let r=[],n=t.getDescendantsOfKind(SyntaxKind.JsxElement);for(let s of n){let o=s.getOpeningElement(),l=o.getAttribute("render");if(!l)continue;let i=s.getJsxChildren().map(d=>d.getText()).join("").trim();if(!i||l.getKind()!==SyntaxKind.JsxAttribute)continue;let f=l.asKindOrThrow(SyntaxKind.JsxAttribute).getInitializer();if(!f||f.getKind()!==SyntaxKind.JsxExpression)continue;let x=f.asKindOrThrow(SyntaxKind.JsxExpression).getExpression();if(!x||x.getKind()!==SyntaxKind.JsxSelfClosingElement)continue;let y=x.asKindOrThrow(SyntaxKind.JsxSelfClosingElement),C=y.getTagNameNode().getText(),J=y.getAttributes().map(d=>d.getText()).join(" "),j=J?`{<${C} ${J}>${i}</${C}>}`:`{<${C}>${i}</${C}>}`,F=o.getTagNameNode().getText(),O=o.getAttributes().filter(d=>d.getKind()===SyntaxKind.JsxAttribute?d.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText()!=="render":true).map(d=>d.getText()).join(" "),V=O?`${O} render=${j}`:`render=${j}`,z=`<${F} ${V} />`;r.push({elementStart:s.getStart(),elementEnd:s.getEnd(),newText:z});}for(let s of r.reverse()){let o=t.getFullText(),l=o.substring(0,s.elementStart)+s.newText+o.substring(s.elementEnd);t.replaceWithText(l);}return t};export{X as createStyleMap,lt as transformRender,at as transformStyle};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shadcn",
3
- "version": "4.20.0",
3
+ "version": "4.21.0",
4
4
  "description": "Add components to your apps.",
5
5
  "homepage": "https://ui.shadcn.com",
6
6
  "publishConfig": {
@@ -75,6 +75,7 @@
75
75
  "@modelcontextprotocol/sdk": "^1.26.0",
76
76
  "@types/validate-npm-package-name": "^4.0.2",
77
77
  "browserslist": "^4.26.2",
78
+ "cn": "^0.2.4",
78
79
  "commander": "^14.0.0",
79
80
  "cosmiconfig": "^9.0.0",
80
81
  "dedent": "^1.6.0",
@@ -93,7 +94,6 @@
93
94
  "recast": "^0.23.11",
94
95
  "socks": "^2.8.8",
95
96
  "stringify-object": "^5.0.0",
96
- "tailwind-merge": "^3.0.1",
97
97
  "ts-morph": "^26.0.0",
98
98
  "tsconfig-paths": "^4.2.0",
99
99
  "undici": "^7.27.2",