shadcn 4.8.1 → 4.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,27 +1,26 @@
1
1
  #!/usr/bin/env node
2
- import {a as a$2}from'./chunk-I3RKATY2.js';import {r,q,c as c$3,g as g$2,k,l,h as h$1,i,d as d$2,p,f as f$3}from'./chunk-NUMOKWW5.js';import {e,d,P,f,Ca,g,h,Fa as Fa$1,a,la as la$1,ca as ca$1,Da as Da$1,W as W$1,X as X$1,D,b,Y,V,ra as ra$1,ta as ta$1,T as T$1,U,R,Ea as Ea$1,aa,na as na$1,Q as Q$1,c as c$1,qa,$,Ia as Ia$1,Ja as Ja$1,Ka,wa as wa$1,ua,xa as xa$1,I,E,F,H,G,ia as ia$1,ya as ya$1,ba as ba$1,da,La as La$1,ha as ha$1,ea as ea$1,za as za$1,sa as sa$1,x,ka as ka$1,w,ga,o,_ as _$1,fa,Z as Z$1,K,S,N as N$1,L as L$1,M,z as z$1,J,O,y,A,C,B}from'./chunk-IQ4BGOAU.js';export{wa as fetchTree,xa as getItemTargetPath,Ba as getPreset,Aa as getPresets,ya as getRegistries,pa as getRegistriesConfig,za as getRegistriesIndex,ma as getRegistry,ua as getRegistryBaseColor,ta as getRegistryBaseColors,sa as getRegistryIcons,na as getRegistryItems,ra as getRegistryStyles,qa as getShadcnRegistryIndex,oa as resolveRegistryItems,va as resolveTree}from'./chunk-IQ4BGOAU.js';import {c,f as f$2,n}from'./chunk-3ORLOMOE.js';import {a as a$1,c as c$2,g as g$1,d as d$1,f as f$1,e as e$1}from'./chunk-WLJDV6SE.js';import {a as a$3}from'./chunk-CHWMSXYA.js';import*as T from'path';import T__default,{join}from'path';import {promises,existsSync}from'fs';import L from'fs-extra';import ss from'open';import ke from'prompts';import ho from'dedent';import ls,{tmpdir}from'os';import {execa}from'execa';import P$1 from'postcss';import hs from'postcss/lib/at-rule';import Gr,{z}from'zod';import {twMerge}from'tailwind-merge';import {Project,ScriptKind,SyntaxKind,VariableDeclarationKind,Node}from'ts-morph';import go from'deepmerge';import {Command}from'commander';import {loadConfig}from'tsconfig-paths';import {diffLines,structuredPatch,diffWords}from'diff';import {dim,yellow,bold,green,cyan,red}from'kleur/colors';import*as wt from'fs/promises';import wt__default from'fs/promises';import {StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import {randomBytes}from'crypto';import qr from'fast-glob';async function Qn(e$1){let t={};if(!L.existsSync(e$1.cwd)||!L.existsSync(T__default.resolve(e$1.cwd,"package.json")))return t["1"]=true,{errors:t,projectInfo:null};let r=D("Preflight checks.",{silent:e$1.silent}).start();L.existsSync(T__default.resolve(e$1.cwd,"components.json"))&&!e$1.force&&(r?.fail(),e.break(),e.error(`A ${d.info("components.json")} file already exists at ${d.info(e$1.cwd)}.
3
- To start over, remove the ${d.info("components.json")} file and run ${d.info("init")} again.`),e.break(),process.exit(1)),r?.succeed();let n=D("Verifying framework.",{silent:e$1.silent}).start(),o=e$1.existingConfig?.tailwind,i=await Ca(e$1.cwd,{configCssFile:typeof o?.css=="string"?o.css:void 0});if(!i||i?.framework.name==="manual"){if(t["7"]=true,n?.fail(),!e$1.monorepo&&await f(e$1.cwd)){let f=await g(e$1.cwd);f.length>0&&(h("init",f),process.exit(1));}e.break(),i?.framework.links.installation&&e.error(`We could not detect a supported framework at ${d.info(e$1.cwd)}.
2
+ import {a as a$2}from'./chunk-TLULQEJM.js';import {r,q,c as c$3,g as g$2,k,l,h as h$1,i,d as d$2,p,f as f$3}from'./chunk-NUMOKWW5.js';import {e,d,Q as Q$1,f,Da as Da$1,g,h,Ga as Ga$1,a,ma,da,Ea,X as X$1,Y,E,b,Z as Z$1,W,sa as sa$1,ua,U,V,S,Fa as Fa$1,ba as ba$1,oa as oa$1,R,c as c$1,ra as ra$1,aa as aa$1,Ja as Ja$1,Ka as Ka$1,La as La$1,xa as xa$1,va,ya as ya$1,J,F,G,I,H,ja as ja$1,za as za$1,ca as ca$1,ea as ea$1,Ma as Ma$1,ia as ia$1,fa as fa$1,Aa as Aa$1,ta as ta$1,y,la,x,ha,p as p$1,$,ga,_ as _$1,L as L$1,T as T$1,O,M,N as N$1,A,K,P,z as z$1,i as i$1,B as B$1,D,C}from'./chunk-TE73JWUV.js';export{xa as fetchTree,ya as getItemTargetPath,Ca as getPreset,Ba as getPresets,za as getRegistries,qa as getRegistriesConfig,Aa as getRegistriesIndex,na as getRegistry,va as getRegistryBaseColor,ua as getRegistryBaseColors,ta as getRegistryIcons,oa as getRegistryItems,sa as getRegistryStyles,ra as getShadcnRegistryIndex,pa as resolveRegistryItems,wa as resolveTree}from'./chunk-TE73JWUV.js';import {c,f as f$2,n}from'./chunk-3ORLOMOE.js';import {a as a$1,c as c$2,g as g$1,d as d$1,f as f$1,e as e$1}from'./chunk-7SBJAAAY.js';import {a as a$3}from'./chunk-CHWMSXYA.js';import*as T from'path';import T__default,{join}from'path';import {promises,existsSync}from'fs';import L from'fs-extra';import as from'open';import ke from'prompts';import yo from'dedent';import cs,{tmpdir}from'os';import {execa}from'execa';import P$1 from'postcss';import ys from'postcss/lib/at-rule';import Gr,{z}from'zod';import {twMerge}from'tailwind-merge';import {Project,ScriptKind,SyntaxKind,VariableDeclarationKind,Node}from'ts-morph';import ho from'deepmerge';import {Command}from'commander';import {loadConfig}from'tsconfig-paths';import {diffLines,structuredPatch,diffWords}from'diff';import {dim,yellow,bold,green,cyan,red}from'kleur/colors';import*as wt from'fs/promises';import wt__default from'fs/promises';import {StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import {randomBytes}from'crypto';import qr from'fast-glob';async function eo(e$1){let t={};if(!L.existsSync(e$1.cwd)||!L.existsSync(T__default.resolve(e$1.cwd,"package.json")))return t["1"]=true,{errors:t,projectInfo:null};let r=E("Preflight checks.",{silent:e$1.silent}).start();L.existsSync(T__default.resolve(e$1.cwd,"components.json"))&&!e$1.force&&(r?.fail(),e.break(),e.error(`A ${d.info("components.json")} file already exists at ${d.info(e$1.cwd)}.
3
+ To start over, remove the ${d.info("components.json")} file and run ${d.info("init")} again.`),e.break(),process.exit(1)),r?.succeed();let n=E("Verifying framework.",{silent:e$1.silent}).start(),o=e$1.existingConfig?.tailwind,i=await Da$1(e$1.cwd,{configCssFile:typeof o?.css=="string"?o.css:void 0});if(!i||i?.framework.name==="manual"){if(t["7"]=true,n?.fail(),!e$1.monorepo&&await f(e$1.cwd)){let f=await g(e$1.cwd);f.length>0&&(h("init",f),process.exit(1));}e.break(),i?.framework.links.installation&&e.error(`We could not detect a supported framework at ${d.info(e$1.cwd)}.
4
4
  Visit ${d.info(i?.framework.links.installation)} to manually configure your project.
5
- Once configured, you can use the cli to add components.`),e.break(),process.exit(1);}n?.succeed(`Verifying framework. Found ${d.info(i.framework.label)}.`);let s="Validating Tailwind CSS.";i.tailwindVersion==="v4"&&(s=`Validating Tailwind CSS. Found ${d.info("v4")}.`);let l=D(s,{silent:e$1.silent}).start();i.tailwindVersion==="v3"&&(!i?.tailwindConfigFile||!i?.tailwindCssFile)?(t["5"]=true,l?.fail()):i.tailwindVersion==="v4"&&!i?.tailwindCssFile?(t["5"]=true,l?.fail()):i.tailwindVersion?l?.succeed():(t["5"]=true,l?.fail());let a$1=D("Validating import alias.",{silent:e$1.silent}).start();return i?.aliasPrefix?a$1?.succeed():(t["6"]=true,a$1?.fail()),Object.keys(t).length>0&&(t["5"]&&(e.break(),e.error(`No Tailwind CSS configuration found at ${d.info(e$1.cwd)}.`),e.error("It is likely you do not have Tailwind CSS installed or have an invalid configuration."),e.error("Install Tailwind CSS then try again."),i?.framework.links.tailwind&&e.error(`Visit ${d.info(i?.framework.links.tailwind)} to get started.`)),t["6"]&&(e.break(),e.error(`Could not find valid path aliases or package imports for ${d.info("init")}.`),e.error(`Configure path aliases in ${d.info("tsconfig.json")} or imports in ${d.info("package.json")}, then run ${d.info("init")} again.`),e.error(`Learn more at ${d.info(`${a}/docs/installation/manual#configure-import-aliases`)}.`)),e.break(),process.exit(1)),{errors:t,projectInfo:i}}async function eo(e,t){let r=new Set,n=new Set,o$1=[...e];for(;o$1.length>0;){let i=o$1.shift();if(n.has(i))continue;n.add(i);let{registry:s}=w(i);s&&!b[s]&&r.add(s);try{let[l]=await ga([i],t,{useCache:!0});if(l?.registryDependencies)for(let a of l.registryDependencies){let{registry:f}=w(a);f&&!b[f]&&r.add(f),n.has(a)||o$1.push(a);}}catch(l){if(l instanceof o){let{registry:a}=w(i);a&&!b[a]&&r.add(a);continue}continue}}return Array.from(r)}async function W(e,t,r={}){r={silent:false,writeFile:true,...r};let o=(await eo(e,t)).filter(f=>!t.registries?.[f]&&!Object.keys(b).includes(f));if(o.length===0)return {config:t,newRegistries:[]};let i=await za$1({useCache:process.env.NODE_ENV!=="development"});if(!i)return {config:t,newRegistries:[]};let s={};for(let f of o)i[f]&&(s[f]=i[f]);if(Object.keys(s).length===0)return {config:t,newRegistries:[]};let l=Object.fromEntries(Object.entries(t.registries||{}).filter(([f])=>!Object.keys(b).includes(f))),a={...t,registries:{...l,...s}};if(r.writeFile){let{resolvedPaths:f,...m}=a,p=D("Updating components.json.",{silent:r.silent}).start(),u=c.parse(m);await L.writeFile(T__default.resolve(t.resolvedPaths.cwd,"components.json"),JSON.stringify(u,null,2)+`
6
- `,"utf-8"),p.succeed();}return {config:a,newRegistries:Object.keys(s)}}var Z={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 Sr(e){let t=new URL(`${a}/create`),{rtl:r,pointer:n,...o}=e??{};for(let[i,s]of Object.entries(o))s!==void 0&&t.searchParams.set(i,String(s));return r&&t.searchParams.set("rtl","true"),n&&t.searchParams.set("pointer","true"),t.toString()}async function Ir(e$1){if(e.break(),e.log(` Build your custom preset on ${d.info(e$1.createUrl)}`),e.log(` ${e$1.followUp}`),e.break(),e$1.prompt===false)return;let{proceed:t}=await ke({type:"confirm",name:"proceed",message:"Open in browser?",initial:true});t&&await ss(e$1.createUrl);}function de(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}/init?${r.toString()}`}async function Ke(){let{base:e}=await ke({type:"select",name:"base",message:`Select a ${d.info("component library")}`,choices:[{title:"Radix",value:"radix"},{title:"Base",value:"base"}]});return e||process.exit(1),e}async function lt(e){let t=Object.entries(Z),{selectedPreset:r}=await ke({type:"select",name:"selectedPreset",message:`Which ${d.info("preset")} would you like to use?`,choices:[...t.map(([o,i])=>({title:i.title,description:i.description,value:o})),{title:"Custom",description:`Build your own at ${d.info(`${a}/create`)}`,value:"custom"}]});if(r||process.exit(1),r==="custom"){let o=Sr({command:"init",rtl:e.rtl,pointer:e.pointer,base:e.base,...e.template&&{template:e.template}});await Ir({createUrl:o,followUp:`Then ${d.info("copy and run the command")} from ui.shadcn.com.`}),process.exit(0);}let n=Z[r];return n||process.exit(1),{url:de({...n,base:e.base,rtl:e.rtl},{template:e.template,pointer:e.pointer}),base:e.base}}async function Fe(e,t,r){let n=ba$1(aa({resolvedPaths:{cwd:t},...r?.registries&&{registries:r.registries}})),{config:o}=await W([e],n,{silent:true,writeFile:false});n=o,ea$1(e,n);let[i]=await na$1([e],{config:n,useCache:true}),s=i?.type==="registry:base"&&i.config?i.config:void 0,l=e;if(as(e)){let a=new URL(e);a.searchParams.delete("track"),l=a.toString();}return {registryBaseConfig:s,installStyleIndex:i?.extends!=="none",url:l}}function as(e){try{return new URL(e).pathname==="/init"&&e.startsWith(a)}catch{return false}}var cs=process.env.SHADCN_GITHUB_URL??"https://github.com/shadcn-ui/ui.git";function X(e){return {...e,frameworks:e.frameworks??[],scaffold:e.scaffold??ro({title:e.title,templateDir:e.templateDir}),postInit:e.postInit??us}}function Te(e,{monorepo:t}){if(!t||!e.monorepo)return e;let r=e.monorepo,n={...e,templateDir:r.templateDir,defaultProjectName:r.defaultProjectName??r.templateDir,init:r.init??e.init,files:r.files??e.files};return n.scaffold=ro({title:e.title,templateDir:r.templateDir}),n}function fs(e){switch(e){case "pnpm":return ["--no-frozen-lockfile"];default:return []}}async function ms(e,t){if(t==="pnpm")return;let r=T__default.join(e,"pnpm-workspace.yaml"),n=T__default.join(e,"package.json"),o=T__default.join(e,"pnpm-lock.yaml");L.existsSync(o)&&await L.remove(o);let i=L.existsSync(r);if(L.existsSync(n)){let s=await L.readFile(n,"utf8"),l=JSON.parse(s);if(i?l.packageManager=await ps(t):delete l.packageManager,i){let a=await L.readFile(r,"utf8"),f=[];for(let m of a.split(`
7
- `)){let p=m.match(/^\s*-\s*["']?(.+?)["']?\s*$/);p&&f.push(p[1]);}l.workspaces=f,await L.remove(r);}await L.writeFile(n,JSON.stringify(l,null,2)+`
8
- `);}i&&t==="npm"&&await to(e);}async function ps(e){try{let{stdout:t}=await execa(e,["--version"]);return `${e}@${t.trim()}`}catch{return `${e}@*`}}async function to(e){let t=await L.readdir(e,{withFileTypes:true});for(let r of t){if(r.name==="node_modules")continue;let n=T__default.join(e,r.name);if(r.isDirectory())await to(n);else if(r.name==="package.json"){let o=await L.readFile(n,"utf8");if(!o.includes("workspace:"))continue;let i=JSON.parse(o),s=false;for(let l of ["dependencies","devDependencies","peerDependencies","optionalDependencies"]){let a=i[l];if(a)for(let[f,m]of Object.entries(a))typeof m=="string"&&m.startsWith("workspace:")&&(a[f]="*",s=true);}s&&await L.writeFile(n,JSON.stringify(i,null,2)+`
9
- `);}}}function ro({title:e,templateDir:t}){return async({projectPath:r,packageManager:n})=>{let o=D(`Creating a new ${e} project. This may take a few minutes.`).start();try{let i=process.env.SHADCN_TEMPLATE_DIR;if(i){let f=T__default.resolve(i,t);await L.copy(f,r,{filter:m=>!m.includes("node_modules")});}else {let f=T__default.join(ls.tmpdir(),`shadcn-template-${Date.now()}`);await execa("git",["clone","--depth","1","--filter=blob:none","--sparse",cs,f]),await execa("git",["-C",f,"sparse-checkout","set",`templates/${t}`]);let m=T__default.resolve(f,"templates",t);await L.move(m,r),await L.remove(f);}await ms(r,n);let l=["install",...fs(n)];await execa(n,l,{cwd:r});let a=T__default.join(r,"package.json");if(L.existsSync(a)){let f=await L.readFile(a,"utf8"),m=JSON.parse(f);m.name=T__default.basename(r),await L.writeFile(a,JSON.stringify(m,null,2)+`
10
- `);}o?.succeed(`Creating a new ${e} project.`);}catch(i){o?.fail(`Something went wrong creating a new ${e} project.`),la$1(i);}}}async function us({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{}}var no={"--font-heading":"cn-font-heading"};function ds(e){return e.startsWith("--")?e:`--${e}`}function Ae(e){let t=new Set;for(let r of e){for(let n of r.fonts??[]){let o=n.font?.variable;if(!o)continue;let i=no[o];i&&t.add(i);}for(let n of Object.values(r.cssVars??{}))for(let o of Object.keys(n??{})){let i=no[ds(o)];i&&t.add(i);}}return Array.from(t)}function oo(e,t){if(e.includes("\0"))return false;let r;try{r=e;let u="";for(;r!==u&&r.includes("%");)u=r,r=decodeURIComponent(r);}catch{return false}let n=T__default.normalize(r.replace(/\\/g,"/")),o=T__default.normalize(t),i=u=>u.replace(/\[\.\.\..*?\]/g,"").includes("..");if(i(n)||i(r)||i(e))return false;let s=u=>u.replace(/\[\.\.\..*?\]/g,""),l=s(e),a=s(r);if([/\.\.[\/\\]/,/[\/\\]\.\./,/\.\./,/\.\.%/,/\x00/,/[\x01-\x1f]/].some(u=>u.test(l)||u.test(a))||(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(T__default.isAbsolute(n))return n.startsWith(o+T__default.sep);let p=T__default.resolve(o,n);return p.startsWith(o+T__default.sep)||p===o}async function zt(e,t,r){if(!t.resolvedPaths.tailwindCss||!Object.keys(e??{}).length)return;r={cleanupDefaultNextStyles:false,silent:false,tailwindVersion:"v3",overwriteCssVars:false,...r};let n=t.resolvedPaths.tailwindCss,o=T__default.relative(t.resolvedPaths.cwd,n),i=D(`Updating CSS variables in ${d.info(o)}`,{silent:r.silent}).start(),s=await promises.readFile(n,"utf8"),l=await ct(s,e??{},t,{cleanupDefaultNextStyles:r.cleanupDefaultNextStyles,tailwindVersion:r.tailwindVersion,tailwindConfig:r.tailwindConfig,overwriteCssVars:r.overwriteCssVars});await promises.writeFile(n,l,"utf8"),i.succeed();}async function ct(e,t,r,n={cleanupDefaultNextStyles:false,tailwindVersion:"v3",tailwindConfig:void 0,overwriteCssVars:false}){n={cleanupDefaultNextStyles:false,tailwindVersion:"v3",tailwindConfig:void 0,overwriteCssVars:false,...n};let o=[ys(t)];n.cleanupDefaultNextStyles&&o.push(ao()),n.tailwindVersion==="v4"&&(o=[],o.push(Cs({params:"dark (&:is(.dark *))"})),n.cleanupDefaultNextStyles&&o.push(ao()),o.push(bs(t,{overwriteCssVars:n.overwriteCssVars})),o.push(ks(t)),n.tailwindConfig&&(o.push(Rs(n.tailwindConfig)),o.push(xs(n.tailwindConfig)),o.push(vs(n.tailwindConfig))));let s=(await P$1(o).process(e,{from:void 0})).css;return s=s.replace(/\/\* ---break--- \*\//g,""),n.tailwindVersion==="v4"&&(s=s.replace(/(\n\s*\n)+/g,`
11
-
12
- `)),s}function ys(e){return {postcssPlugin:"update-css-vars",Once(t){let r=t.nodes.find(n=>n.type==="atrule"&&n.name==="layer"&&n.params==="base");r instanceof hs||(r=P$1.atRule({name:"layer",params:"base",nodes:[],raws:{semicolon:true,before:`
13
- `,between:" "}}),t.append(r),t.insertBefore(r,P$1.comment({text:"---break---"}))),r!==void 0&&Object.entries(e).forEach(([n,o])=>{let i=n==="light"?":root":`.${n}`;ws(r,i,o);});}}}function so(e){let t=e.nodes.find(r=>r.type==="rule"&&r.selector===":root");if(t){let r=["--background","--foreground"];t.nodes.filter(n=>n.type==="decl"&&r.includes(n.prop)).forEach(n=>n.remove()),t.nodes.length===0&&t.remove();}}function ao(){return {postcssPlugin:"cleanup-default-next-styles",Once(e){let t=e.nodes.find(n=>n.type==="rule"&&n.selector==="body");t&&(t.nodes.find(n=>n.type==="decl"&&n.prop==="color"&&["rgb(var(--foreground-rgb))","var(--foreground)"].includes(n.value))?.remove(),t.nodes.find(n=>n.type==="decl"&&n.prop==="background"&&(n.value.startsWith("linear-gradient")||n.value==="var(--background)"))?.remove(),t.nodes.find(n=>n.type==="decl"&&n.prop==="font-family"&&n.value==="Arial, Helvetica, sans-serif")?.remove(),t.nodes.length===0&&t.remove()),so(e);let r=e.nodes.find(n=>n.type==="atrule"&&n.params==="(prefers-color-scheme: dark)");r&&(so(r),r.nodes.length===0&&r.remove());}}}function ws(e,t,r){let n=e.nodes?.find(o=>o.type==="rule"&&o.selector===t);n||Object.keys(r).length>0&&(n=P$1.rule({selector:t,raws:{between:" ",before:`
14
- `}}),e.append(n)),Object.entries(r).forEach(([o,i])=>{let s=`--${o.replace(/^--/,"")}`,l=P$1.decl({prop:s,value:i,raws:{semicolon:true}}),a=n?.nodes.find(f=>f.type==="decl"&&f.prop===s);a?a.replaceWith(l):n?.append(l);});}function bs(e,t){return {postcssPlugin:"update-css-vars-v4",Once(r){Object.entries(e).forEach(([n,o])=>{let i=n==="light"?":root":`.${n}`;if(n==="theme"){i="@theme";let l=Jt(r);Object.entries(o).forEach(([a,f])=>{let m=`--${a.replace(/^--/,"")}`,p=P$1.decl({prop:m,value:f,raws:{semicolon:true}}),u=l?.nodes?.find(h=>h.type==="decl"&&h.prop===m);t.overwriteCssVars?u?u.replaceWith(p):l?.append(p):u||l?.append(p);});return}let s=r.nodes?.find(l=>l.type==="rule"&&l.selector===i);!s&&Object.keys(o).length>0&&(s=P$1.rule({selector:i,nodes:[],raws:{semicolon:true,between:" ",before:`
15
- `}}),r.append(s),r.insertBefore(s,P$1.comment({text:"---break---"}))),Object.entries(o).forEach(([l,a])=>{let f=`--${l.replace(/^--/,"")}`;f==="--sidebar-background"&&(f="--sidebar"),lo(a)&&(a=`hsl(${a})`);let m=P$1.decl({prop:f,value:a,raws:{semicolon:true}}),p=s?.nodes.find(u=>u.type==="decl"&&u.prop===f);t.overwriteCssVars?p?p.replaceWith(m):s?.append(m):p||s?.append(m);});});}}}function ks(e){return {postcssPlugin:"update-theme",Once(t){let r=Array.from(new Set(Object.keys(e).flatMap(i=>Object.keys(e[i]||{}))));if(!r.length)return;let n=Jt(t),o=n.nodes?.filter(i=>i.type==="decl"&&i.prop.startsWith("--"));for(let i of r){let s=Object.values(e).find(p=>p[i])?.[i];if(!s)continue;if(i==="radius"){let p={sm:"calc(var(--radius) * 0.6)",md:"calc(var(--radius) * 0.8)",lg:"var(--radius)",xl:"calc(var(--radius) * 1.4)","2xl":"calc(var(--radius) * 1.8)","3xl":"calc(var(--radius) * 2.2)","4xl":"calc(var(--radius) * 2.6)"};for(let[u,h]of Object.entries(p)){let g=P$1.decl({prop:`--radius-${u}`,value:h,raws:{semicolon:true}});n?.nodes?.find(y=>y.type==="decl"&&y.prop===g.prop)||n?.append(g);}continue}let l=lo(s)||Is(s)?`--color-${i.replace(/^--/,"")}`:`--${i.replace(/^--/,"")}`;l==="--color-sidebar-background"&&(l="--color-sidebar");let a=`var(--${i})`;l==="--color-sidebar"&&(a="var(--sidebar)");let f=P$1.decl({prop:l,value:a,raws:{semicolon:true}});n?.nodes?.find(p=>p.type==="decl"&&p.prop===f.prop)||(o?.length?n?.insertAfter(o[o.length-1],f):n?.append(f));}}}}function Jt(e){let t=e.nodes.find(r=>r.type==="atrule"&&r.name==="theme"&&r.params==="inline");return t||(t=P$1.atRule({name:"theme",params:"inline",nodes:[],raws:{semicolon:true,between:" ",before:`
16
- `}}),e.append(t),e.insertBefore(t,P$1.comment({text:"---break---"}))),t}function Cs({params:e}){return {postcssPlugin:"add-custom-variant",Once(t){if(!t.nodes.find(n=>n.type==="atrule"&&n.name==="custom-variant")){let n=t.nodes.filter(i=>i.type==="atrule"&&i.name==="import"),o=P$1.atRule({name:"custom-variant",params:e,raws:{semicolon:true,before:`
17
- `}});if(n.length>0){let i=n[n.length-1];t.insertAfter(i,o);}else t.insertAfter(t.nodes[0],o);t.insertBefore(o,P$1.comment({text:"---break---"}));}}}}function Rs(e){return {postcssPlugin:"update-tailwind-config",Once(t){if(!e?.plugins)return;let n=Ss(t)==="single"?"'":'"',o=t.nodes.filter(s=>s.type==="atrule"&&s.name==="plugin"),i=o[o.length-1]||t.nodes[0];for(let s of e.plugins){let l=s.replace(/^require\(["']|["']\)$/g,"");if(o.some(f=>f.params.replace(/["']/g,"")===l))continue;let a=P$1.atRule({name:"plugin",params:`${n}${l}${n}`,raws:{semicolon:true,before:`
18
- `}});t.insertAfter(i,a),t.insertBefore(a,P$1.comment({text:"---break---"}));}}}}function vs(e){return {postcssPlugin:"update-tailwind-config-keyframes",Once(t){if(!e?.theme?.extend?.keyframes)return;let r=Jt(t),n=r.nodes?.filter(i=>i.type==="atrule"&&i.name==="keyframes"),o=z.record(z.string(),z.record(z.string(),z.string()));for(let[i,s]of Object.entries(e.theme.extend.keyframes)){if(typeof i!="string")continue;let l=o.safeParse(s);if(!l.success||n?.find(f=>f.type==="atrule"&&f.name==="keyframes"&&f.params===i))continue;let a=P$1.atRule({name:"keyframes",params:i,nodes:[],raws:{semicolon:true,between:" ",before:`
5
+ Once configured, you can use the cli to add components.`),e.break(),process.exit(1);}n?.succeed(`Verifying framework. Found ${d.info(i.framework.label)}.`);let s="Validating Tailwind CSS.";i.tailwindVersion==="v4"&&(s=`Validating Tailwind CSS. Found ${d.info("v4")}.`);let l=E(s,{silent:e$1.silent}).start();i.tailwindVersion==="v3"&&(!i?.tailwindConfigFile||!i?.tailwindCssFile)?(t["5"]=true,l?.fail()):i.tailwindVersion==="v4"&&!i?.tailwindCssFile?(t["5"]=true,l?.fail()):i.tailwindVersion?l?.succeed():(t["5"]=true,l?.fail());let a$1=E("Validating import alias.",{silent:e$1.silent}).start();return i?.aliasPrefix?a$1?.succeed():(t["6"]=true,a$1?.fail()),Object.keys(t).length>0&&(t["5"]&&(e.break(),e.error(`No Tailwind CSS configuration found at ${d.info(e$1.cwd)}.`),e.error("It is likely you do not have Tailwind CSS installed or have an invalid configuration."),e.error("Install Tailwind CSS then try again."),i?.framework.links.tailwind&&e.error(`Visit ${d.info(i?.framework.links.tailwind)} to get started.`)),t["6"]&&(e.break(),e.error(`Could not find valid path aliases or package imports for ${d.info("init")}.`),e.error(`Configure path aliases in ${d.info("tsconfig.json")} or imports in ${d.info("package.json")}, then run ${d.info("init")} again.`),e.error(`Learn more at ${d.info(`${a}/docs/installation/manual#configure-import-aliases`)}.`)),e.break(),process.exit(1)),{errors:t,projectInfo:i}}async function to(e,t){let r=new Set,n=new Set,o=[...e];for(;o.length>0;){let i=o.shift();if(n.has(i))continue;n.add(i);let{registry:s}=x(i);s&&!b[s]&&r.add(s);try{let[l]=await ha([i],t,{useCache:!0});if(l?.registryDependencies)for(let a of l.registryDependencies){let{registry:f}=x(a);f&&!b[f]&&r.add(f),n.has(a)||o.push(a);}}catch(l){if(l instanceof p$1){let{registry:a}=x(i);a&&!b[a]&&r.add(a);continue}continue}}return Array.from(r)}async function B(e,t,r={}){r={silent:false,writeFile:true,...r};let o=(await to(e,t)).filter(f=>!t.registries?.[f]&&!Object.keys(b).includes(f));if(o.length===0)return {config:t,newRegistries:[]};let i=await Aa$1({useCache:process.env.NODE_ENV!=="development"});if(!i)return {config:t,newRegistries:[]};let s={};for(let f of o)i[f]&&(s[f]=i[f]);if(Object.keys(s).length===0)return {config:t,newRegistries:[]};let l=Object.fromEntries(Object.entries(t.registries||{}).filter(([f])=>!Object.keys(b).includes(f))),a={...t,registries:{...l,...s}};if(r.writeFile){let{resolvedPaths:f,...m}=a,p=E("Updating components.json.",{silent:r.silent}).start(),u=c.parse(m);await L.writeFile(T__default.resolve(t.resolvedPaths.cwd,"components.json"),JSON.stringify(u,null,2)+`
6
+ `,"utf-8"),p.succeed();}return {config:a,newRegistries:Object.keys(s)}}var Z={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 Sr(e){let t=new URL(`${a}/create`),{rtl:r,pointer:n,...o}=e??{};for(let[i,s]of Object.entries(o))s!==void 0&&t.searchParams.set(i,String(s));return r&&t.searchParams.set("rtl","true"),n&&t.searchParams.set("pointer","true"),t.toString()}async function Ir(e$1){if(e.break(),e.log(` Build your custom preset on ${d.info(e$1.createUrl)}`),e.log(` ${e$1.followUp}`),e.break(),e$1.prompt===false)return;let{proceed:t}=await ke({type:"confirm",name:"proceed",message:"Open in browser?",initial:true});t&&await as(e$1.createUrl);}function de(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}/init?${r.toString()}`}async function Ke(){let{base:e}=await ke({type:"select",name:"base",message:`Select a ${d.info("component library")}`,choices:[{title:"Radix",value:"radix"},{title:"Base",value:"base"}]});return e||process.exit(1),e}async function lt(e){let t=Object.entries(Z),{selectedPreset:r}=await ke({type:"select",name:"selectedPreset",message:`Which ${d.info("preset")} would you like to use?`,choices:[...t.map(([o,i])=>({title:i.title,description:i.description,value:o})),{title:"Custom",description:`Build your own at ${d.info(`${a}/create`)}`,value:"custom"}]});if(r||process.exit(1),r==="custom"){let o=Sr({command:"init",rtl:e.rtl,pointer:e.pointer,base:e.base,...e.template&&{template:e.template}});await Ir({createUrl:o,followUp:`Then ${d.info("copy and run the command")} from ui.shadcn.com.`}),process.exit(0);}let n=Z[r];return n||process.exit(1),{url:de({...n,base:e.base,rtl:e.rtl},{template:e.template,pointer:e.pointer}),base:e.base}}async function Fe(e,t,r){let n=ca$1(ba$1({resolvedPaths:{cwd:t},...r?.registries&&{registries:r.registries}})),{config:o}=await B([e],n,{silent:true,writeFile:false});n=o,fa$1(e,n);let[i]=await oa$1([e],{config:n,useCache:true}),s=i?.type==="registry:base"&&i.config?i.config:void 0,l=e;if(ls(e)){let a=new URL(e);a.searchParams.delete("track"),l=a.toString();}return {registryBaseConfig:s,installStyleIndex:i?.extends!=="none",url:l}}function ls(e){try{return new URL(e).pathname==="/init"&&e.startsWith(a)}catch{return false}}var fs=process.env.SHADCN_GITHUB_URL??"https://github.com/shadcn-ui/ui.git";function X(e){return {...e,frameworks:e.frameworks??[],scaffold:e.scaffold??no({title:e.title,templateDir:e.templateDir}),postInit:e.postInit??ds}}function Te(e,{monorepo:t}){if(!t||!e.monorepo)return e;let r=e.monorepo,n={...e,templateDir:r.templateDir,defaultProjectName:r.defaultProjectName??r.templateDir,init:r.init??e.init,files:r.files??e.files};return n.scaffold=no({title:e.title,templateDir:r.templateDir}),n}function ms(e){switch(e){case "pnpm":return ["--no-frozen-lockfile"];case "yarn":return ["--no-immutable"];default:return []}}async function ps(e,t){if(t==="pnpm")return;let r=T__default.join(e,"pnpm-workspace.yaml"),n=T__default.join(e,"package.json"),o=T__default.join(e,"pnpm-lock.yaml");L.existsSync(o)&&await L.remove(o);let i=L.existsSync(r),s=i?i$1(await L.readFile(r,"utf8")):[],l=s.length>0;if(L.existsSync(n)){let a=await L.readFile(n,"utf8"),f=JSON.parse(a);l?f.packageManager=await us(t):delete f.packageManager,l&&(f.workspaces=s),await L.writeFile(n,JSON.stringify(f,null,2)+`
7
+ `);}i&&await L.remove(r),l&&t==="npm"&&await ro(e);}async function us(e){try{let{stdout:t}=await execa(e,["--version"]);return `${e}@${t.trim()}`}catch{return `${e}@*`}}async function ro(e){let t=await L.readdir(e,{withFileTypes:true});for(let r of t){if(r.name==="node_modules")continue;let n=T__default.join(e,r.name);if(r.isDirectory())await ro(n);else if(r.name==="package.json"){let o=await L.readFile(n,"utf8");if(!o.includes("workspace:"))continue;let i=JSON.parse(o),s=false;for(let l of ["dependencies","devDependencies","peerDependencies","optionalDependencies"]){let a=i[l];if(a)for(let[f,m]of Object.entries(a))typeof m=="string"&&m.startsWith("workspace:")&&(a[f]="*",s=true);}s&&await L.writeFile(n,JSON.stringify(i,null,2)+`
8
+ `);}}}function no({title:e,templateDir:t}){return async({projectPath:r,packageManager:n})=>{let o=E(`Creating a new ${e} project. This may take a few minutes.`).start();try{let i=process.env.SHADCN_TEMPLATE_DIR;if(i){let f=T__default.resolve(i,t);await L.copy(f,r,{filter:m=>!m.includes("node_modules")});}else {let f=T__default.join(cs.tmpdir(),`shadcn-template-${Date.now()}`);await execa("git",["clone","--depth","1","--filter=blob:none","--sparse",fs,f]),await execa("git",["-C",f,"sparse-checkout","set",`templates/${t}`]);let m=T__default.resolve(f,"templates",t);await L.move(m,r),await L.remove(f);}await ps(r,n);let l=["install",...ms(n)];await execa(n,l,{cwd:r});let a=T__default.join(r,"package.json");if(L.existsSync(a)){let f=await L.readFile(a,"utf8"),m=JSON.parse(f);m.name=T__default.basename(r),await L.writeFile(a,JSON.stringify(m,null,2)+`
9
+ `);}o?.succeed(`Creating a new ${e} project.`);}catch(i){o?.fail(`Something went wrong creating a new ${e} project.`),ma(i);}}}async function ds({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{}}var oo={"--font-heading":"cn-font-heading"};function gs(e){return e.startsWith("--")?e:`--${e}`}function Ae(e){let t=new Set;for(let r of e){for(let n of r.fonts??[]){let o=n.font?.variable;if(!o)continue;let i=oo[o];i&&t.add(i);}for(let n of Object.values(r.cssVars??{}))for(let o of Object.keys(n??{})){let i=oo[gs(o)];i&&t.add(i);}}return Array.from(t)}function io(e,t){if(e.includes("\0"))return false;let r;try{r=e;let u="";for(;r!==u&&r.includes("%");)u=r,r=decodeURIComponent(r);}catch{return false}let n=T__default.normalize(r.replace(/\\/g,"/")),o=T__default.normalize(t),i=u=>u.replace(/\[\.\.\..*?\]/g,"").includes("..");if(i(n)||i(r)||i(e))return false;let s=u=>u.replace(/\[\.\.\..*?\]/g,""),l=s(e),a=s(r);if([/\.\.[\/\\]/,/[\/\\]\.\./,/\.\./,/\.\.%/,/\x00/,/[\x01-\x1f]/].some(u=>u.test(l)||u.test(a))||(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(T__default.isAbsolute(n))return n.startsWith(o+T__default.sep);let p=T__default.resolve(o,n);return p.startsWith(o+T__default.sep)||p===o}async function zt(e,t,r){if(!t.resolvedPaths.tailwindCss||!Object.keys(e??{}).length)return;r={cleanupDefaultNextStyles:false,silent:false,tailwindVersion:"v3",overwriteCssVars:false,...r};let n=t.resolvedPaths.tailwindCss,o=T__default.relative(t.resolvedPaths.cwd,n),i=E(`Updating CSS variables in ${d.info(o)}`,{silent:r.silent}).start(),s=await promises.readFile(n,"utf8"),l=await ct(s,e??{},t,{cleanupDefaultNextStyles:r.cleanupDefaultNextStyles,tailwindVersion:r.tailwindVersion,tailwindConfig:r.tailwindConfig,overwriteCssVars:r.overwriteCssVars});await promises.writeFile(n,l,"utf8"),i.succeed();}async function ct(e,t,r,n={cleanupDefaultNextStyles:false,tailwindVersion:"v3",tailwindConfig:void 0,overwriteCssVars:false}){n={cleanupDefaultNextStyles:false,tailwindVersion:"v3",tailwindConfig:void 0,overwriteCssVars:false,...n};let o=[ws(t)];n.cleanupDefaultNextStyles&&o.push(lo()),n.tailwindVersion==="v4"&&(o=[],o.push(Rs({params:"dark (&:is(.dark *))"})),n.cleanupDefaultNextStyles&&o.push(lo()),o.push(ks(t,{overwriteCssVars:n.overwriteCssVars})),o.push(Cs(t)),n.tailwindConfig&&(o.push(vs(n.tailwindConfig)),o.push(Ss(n.tailwindConfig)),o.push(xs(n.tailwindConfig))));let s=(await P$1(o).process(e,{from:void 0})).css;return s=s.replace(/\/\* ---break--- \*\//g,""),n.tailwindVersion==="v4"&&(s=s.replace(/(\n\s*\n)+/g,`
10
+
11
+ `)),s}function ws(e){return {postcssPlugin:"update-css-vars",Once(t){let r=t.nodes.find(n=>n.type==="atrule"&&n.name==="layer"&&n.params==="base");r instanceof ys||(r=P$1.atRule({name:"layer",params:"base",nodes:[],raws:{semicolon:true,before:`
12
+ `,between:" "}}),t.append(r),t.insertBefore(r,P$1.comment({text:"---break---"}))),r!==void 0&&Object.entries(e).forEach(([n,o])=>{let i=n==="light"?":root":`.${n}`;bs(r,i,o);});}}}function ao(e){let t=e.nodes.find(r=>r.type==="rule"&&r.selector===":root");if(t){let r=["--background","--foreground"];t.nodes.filter(n=>n.type==="decl"&&r.includes(n.prop)).forEach(n=>n.remove()),t.nodes.length===0&&t.remove();}}function lo(){return {postcssPlugin:"cleanup-default-next-styles",Once(e){let t=e.nodes.find(n=>n.type==="rule"&&n.selector==="body");t&&(t.nodes.find(n=>n.type==="decl"&&n.prop==="color"&&["rgb(var(--foreground-rgb))","var(--foreground)"].includes(n.value))?.remove(),t.nodes.find(n=>n.type==="decl"&&n.prop==="background"&&(n.value.startsWith("linear-gradient")||n.value==="var(--background)"))?.remove(),t.nodes.find(n=>n.type==="decl"&&n.prop==="font-family"&&n.value==="Arial, Helvetica, sans-serif")?.remove(),t.nodes.length===0&&t.remove()),ao(e);let r=e.nodes.find(n=>n.type==="atrule"&&n.params==="(prefers-color-scheme: dark)");r&&(ao(r),r.nodes.length===0&&r.remove());}}}function bs(e,t,r){let n=e.nodes?.find(o=>o.type==="rule"&&o.selector===t);n||Object.keys(r).length>0&&(n=P$1.rule({selector:t,raws:{between:" ",before:`
13
+ `}}),e.append(n)),Object.entries(r).forEach(([o,i])=>{let s=`--${o.replace(/^--/,"")}`,l=P$1.decl({prop:s,value:i,raws:{semicolon:true}}),a=n?.nodes.find(f=>f.type==="decl"&&f.prop===s);a?a.replaceWith(l):n?.append(l);});}function ks(e,t){return {postcssPlugin:"update-css-vars-v4",Once(r){Object.entries(e).forEach(([n,o])=>{let i=n==="light"?":root":`.${n}`;if(n==="theme"){i="@theme";let l=Jt(r);Object.entries(o).forEach(([a,f])=>{let m=`--${a.replace(/^--/,"")}`,p=P$1.decl({prop:m,value:f,raws:{semicolon:true}}),u=l?.nodes?.find(h=>h.type==="decl"&&h.prop===m);t.overwriteCssVars?u?u.replaceWith(p):l?.append(p):u||l?.append(p);});return}let s=r.nodes?.find(l=>l.type==="rule"&&l.selector===i);!s&&Object.keys(o).length>0&&(s=P$1.rule({selector:i,nodes:[],raws:{semicolon:true,between:" ",before:`
14
+ `}}),r.append(s),r.insertBefore(s,P$1.comment({text:"---break---"}))),Object.entries(o).forEach(([l,a])=>{let f=`--${l.replace(/^--/,"")}`;f==="--sidebar-background"&&(f="--sidebar"),co(a)&&(a=`hsl(${a})`);let m=P$1.decl({prop:f,value:a,raws:{semicolon:true}}),p=s?.nodes.find(u=>u.type==="decl"&&u.prop===f);t.overwriteCssVars?p?p.replaceWith(m):s?.append(m):p||s?.append(m);});});}}}function Cs(e){return {postcssPlugin:"update-theme",Once(t){let r=Array.from(new Set(Object.keys(e).flatMap(i=>Object.keys(e[i]||{}))));if(!r.length)return;let n=Jt(t),o=n.nodes?.filter(i=>i.type==="decl"&&i.prop.startsWith("--"));for(let i of r){let s=Object.values(e).find(p=>p[i])?.[i];if(!s)continue;if(i==="radius"){let p={sm:"calc(var(--radius) * 0.6)",md:"calc(var(--radius) * 0.8)",lg:"var(--radius)",xl:"calc(var(--radius) * 1.4)","2xl":"calc(var(--radius) * 1.8)","3xl":"calc(var(--radius) * 2.2)","4xl":"calc(var(--radius) * 2.6)"};for(let[u,h]of Object.entries(p)){let g=P$1.decl({prop:`--radius-${u}`,value:h,raws:{semicolon:true}});n?.nodes?.find(y=>y.type==="decl"&&y.prop===g.prop)||n?.append(g);}continue}let l=co(s)||Ps(s)?`--color-${i.replace(/^--/,"")}`:`--${i.replace(/^--/,"")}`;l==="--color-sidebar-background"&&(l="--color-sidebar");let a=`var(--${i})`;l==="--color-sidebar"&&(a="var(--sidebar)");let f=P$1.decl({prop:l,value:a,raws:{semicolon:true}});n?.nodes?.find(p=>p.type==="decl"&&p.prop===f.prop)||(o?.length?n?.insertAfter(o[o.length-1],f):n?.append(f));}}}}function Jt(e){let t=e.nodes.find(r=>r.type==="atrule"&&r.name==="theme"&&r.params==="inline");return t||(t=P$1.atRule({name:"theme",params:"inline",nodes:[],raws:{semicolon:true,between:" ",before:`
15
+ `}}),e.append(t),e.insertBefore(t,P$1.comment({text:"---break---"}))),t}function Rs({params:e}){return {postcssPlugin:"add-custom-variant",Once(t){if(!t.nodes.find(n=>n.type==="atrule"&&n.name==="custom-variant")){let n=t.nodes.filter(i=>i.type==="atrule"&&i.name==="import"),o=P$1.atRule({name:"custom-variant",params:e,raws:{semicolon:true,before:`
16
+ `}});if(n.length>0){let i=n[n.length-1];t.insertAfter(i,o);}else t.insertAfter(t.nodes[0],o);t.insertBefore(o,P$1.comment({text:"---break---"}));}}}}function vs(e){return {postcssPlugin:"update-tailwind-config",Once(t){if(!e?.plugins)return;let n=Is(t)==="single"?"'":'"',o=t.nodes.filter(s=>s.type==="atrule"&&s.name==="plugin"),i=o[o.length-1]||t.nodes[0];for(let s of e.plugins){let l=s.replace(/^require\(["']|["']\)$/g,"");if(o.some(f=>f.params.replace(/["']/g,"")===l))continue;let a=P$1.atRule({name:"plugin",params:`${n}${l}${n}`,raws:{semicolon:true,before:`
17
+ `}});t.insertAfter(i,a),t.insertBefore(a,P$1.comment({text:"---break---"}));}}}}function xs(e){return {postcssPlugin:"update-tailwind-config-keyframes",Once(t){if(!e?.theme?.extend?.keyframes)return;let r=Jt(t),n=r.nodes?.filter(i=>i.type==="atrule"&&i.name==="keyframes"),o=z.record(z.string(),z.record(z.string(),z.string()));for(let[i,s]of Object.entries(e.theme.extend.keyframes)){if(typeof i!="string")continue;let l=o.safeParse(s);if(!l.success||n?.find(f=>f.type==="atrule"&&f.name==="keyframes"&&f.params===i))continue;let a=P$1.atRule({name:"keyframes",params:i,nodes:[],raws:{semicolon:true,between:" ",before:`
19
18
  `}});for(let[f,m]of Object.entries(l.data)){let p=P$1.rule({selector:f,nodes:Object.entries(m).map(([u,h])=>P$1.decl({prop:u,value:h,raws:{semicolon:true,before:`
20
19
  `,between:": "}})),raws:{semicolon:true,between:" ",before:`
21
- `}});a.append(p);}r.append(a),r.insertBefore(a,P$1.comment({text:"---break---"}));}}}}function xs(e){return {postcssPlugin:"update-tailwind-config-animation",Once(t){if(!e?.theme?.extend?.animation)return;let r=Jt(t),n=r.nodes?.filter(i=>i.type==="decl"&&i.prop.startsWith("--animate-")),o=z.record(z.string(),z.string()).safeParse(e.theme.extend.animation);if(o.success)for(let[i,s]of Object.entries(o.data)){let l=`--animate-${i}`;if(n?.find(f=>f.prop===l))continue;let a=P$1.decl({prop:l,value:s,raws:{semicolon:true,between:": ",before:`
22
- `}});r.append(a);}}}}function Ss(e){return e.nodes[0].toString().includes("'")?"single":"double"}function lo(e){if(e.startsWith("hsl")||e.startsWith("rgb")||e.startsWith("#")||e.startsWith("oklch"))return false;let t=e.split(" ");return t.length===3&&t.slice(1,3).every(r=>r.includes("%"))}function Is(e){return e.startsWith("hsl")||e.startsWith("rgb")||e.startsWith("#")||e.startsWith("oklch")||e.includes("--color-")}async function ft(e,t,r){let n=e&&Object.keys(e).length>0,o=Object.keys(r.cssVars??{}).length>0;if(!t.resolvedPaths.tailwindCss||!n&&!o)return;r={silent:false,...r};let i=t.resolvedPaths.tailwindCss,s=T__default.relative(t.resolvedPaths.cwd,i),l=D(`Updating ${d.info(s)}`,{silent:r.silent}).start(),a=await promises.readFile(i,"utf8");o&&(a=await ct(a,r.cssVars,t,{cleanupDefaultNextStyles:r.cleanupDefaultNextStyles,tailwindVersion:r.tailwindVersion,tailwindConfig:r.tailwindConfig,overwriteCssVars:r.overwriteCssVars})),n&&(a=await Pr(a,e)),await promises.writeFile(i,a,"utf8"),l.succeed();}async function Pr(e,t){let r=[Es(t)],n=await P$1(r).process(e,{from:void 0}),o=n.css,i=n.root;if(i.nodes&&i.nodes.length>0){let s=i.nodes[i.nodes.length-1];s.type==="atrule"&&!s.nodes&&!o.trimEnd().endsWith(";")&&(o=o.trimEnd()+";");}return o=o.replace(/\/\* ---break--- \*\//g,""),o=o.replace(/(\n\s*\n)+/g,`
20
+ `}});a.append(p);}r.append(a),r.insertBefore(a,P$1.comment({text:"---break---"}));}}}}function Ss(e){return {postcssPlugin:"update-tailwind-config-animation",Once(t){if(!e?.theme?.extend?.animation)return;let r=Jt(t),n=r.nodes?.filter(i=>i.type==="decl"&&i.prop.startsWith("--animate-")),o=z.record(z.string(),z.string()).safeParse(e.theme.extend.animation);if(o.success)for(let[i,s]of Object.entries(o.data)){let l=`--animate-${i}`;if(n?.find(f=>f.prop===l))continue;let a=P$1.decl({prop:l,value:s,raws:{semicolon:true,between:": ",before:`
21
+ `}});r.append(a);}}}}function Is(e){return e.nodes[0].toString().includes("'")?"single":"double"}function co(e){if(e.startsWith("hsl")||e.startsWith("rgb")||e.startsWith("#")||e.startsWith("oklch"))return false;let t=e.split(" ");return t.length===3&&t.slice(1,3).every(r=>r.includes("%"))}function Ps(e){return e.startsWith("hsl")||e.startsWith("rgb")||e.startsWith("#")||e.startsWith("oklch")||e.includes("--color-")}async function ft(e,t,r){let n=e&&Object.keys(e).length>0,o=Object.keys(r.cssVars??{}).length>0;if(!t.resolvedPaths.tailwindCss||!n&&!o)return;r={silent:false,...r};let i=t.resolvedPaths.tailwindCss,s=T__default.relative(t.resolvedPaths.cwd,i),l=E(`Updating ${d.info(s)}`,{silent:r.silent}).start(),a=await promises.readFile(i,"utf8");o&&(a=await ct(a,r.cssVars,t,{cleanupDefaultNextStyles:r.cleanupDefaultNextStyles,tailwindVersion:r.tailwindVersion,tailwindConfig:r.tailwindConfig,overwriteCssVars:r.overwriteCssVars})),n&&(a=await Pr(a,e)),await promises.writeFile(i,a,"utf8"),l.succeed();}async function Pr(e,t){let r=[Fs(t)],n=await P$1(r).process(e,{from:void 0}),o=n.css,i=n.root;if(i.nodes&&i.nodes.length>0){let s=i.nodes[i.nodes.length-1];s.type==="atrule"&&!s.nodes&&!o.trimEnd().endsWith(";")&&(o=o.trimEnd()+";");}return o=o.replace(/\/\* ---break--- \*\//g,""),o=o.replace(/(\n\s*\n)+/g,`
23
22
 
24
- `),o=o.trimEnd(),o}function Es(e){return {postcssPlugin:"update-css",Once(t){for(let[r,n]of Object.entries(e))if(r.startsWith("@")){let o=r.match(/@([a-zA-Z-]+)\s*(.*)/);if(!o)continue;let[,i,s]=o;if(i==="import"){if(!t.nodes?.find(a=>a.type==="atrule"&&a.name==="import"&&a.params===s)){let a=P$1.atRule({name:"import",params:s,raws:{semicolon:true}}),f=t.nodes?.filter(m=>m.type==="atrule"&&m.name==="import");if(f&&f.length>0){let m=f[f.length-1];a.raws.before=`
23
+ `),o=o.trimEnd(),o}function Fs(e){return {postcssPlugin:"update-css",Once(t){for(let[r,n]of Object.entries(e))if(r.startsWith("@")){let o=r.match(/@([a-zA-Z-]+)\s*(.*)/);if(!o)continue;let[,i,s]=o;if(i==="import"){if(!t.nodes?.find(a=>a.type==="atrule"&&a.name==="import"&&a.params===s)){let a=P$1.atRule({name:"import",params:s,raws:{semicolon:true}}),f=t.nodes?.filter(m=>m.type==="atrule"&&m.name==="import");if(f&&f.length>0){let m=f[f.length-1];a.raws.before=`
25
24
  `,t.insertAfter(m,a);}else !t.nodes||t.nodes.length,a.raws.before="",t.prepend(a);}}else if(i==="plugin"){let l=s;s&&!s.startsWith('"')&&!s.startsWith("'")&&(l=`"${s}"`);let a=m=>m.startsWith('"')&&m.endsWith('"')||m.startsWith("'")&&m.endsWith("'")?m.slice(1,-1):m;if(!t.nodes?.find(m=>m.type!=="atrule"||m.name!=="plugin"?false:a(m.params)===a(s))){let m=P$1.atRule({name:"plugin",params:l,raws:{semicolon:true,before:`
26
25
  `}}),p=t.nodes?.filter(h=>h.type==="atrule"&&h.name==="import"),u=t.nodes?.filter(h=>h.type==="atrule"&&h.name==="plugin");if(u&&u.length>0){let h=u[u.length-1];t.insertAfter(h,m);}else if(p&&p.length>0){let h=p[p.length-1];t.insertAfter(h,m),t.insertBefore(m,P$1.comment({text:"---break---"})),t.insertAfter(m,P$1.comment({text:"---break---"}));}else t.prepend(m),t.insertBefore(m,P$1.comment({text:"---break---"})),t.insertAfter(m,P$1.comment({text:"---break---"}));}}else if(typeof n=="object"&&Object.keys(n).length===0){if(!t.nodes?.find(a=>a.type==="atrule"&&a.name===i&&a.params===s)){let a=P$1.atRule({name:i,params:s,raws:{semicolon:true}});t.append(a),t.insertBefore(a,P$1.comment({text:"---break---"}));}}else if(i==="keyframes"){let l=t.nodes?.find(m=>m.type==="atrule"&&m.name==="theme"&&m.params==="inline");l||(l=P$1.atRule({name:"theme",params:"inline",raws:{semicolon:true,between:" ",before:`
27
26
  `}}),t.append(l),t.insertBefore(l,P$1.comment({text:"---break---"})));let a=l.nodes?.find(m=>m.type==="atrule"&&m.name==="keyframes"&&m.params===s),f;if(a?(f=P$1.atRule({name:"keyframes",params:s,raws:{semicolon:true,between:" ",before:`
@@ -31,20 +30,20 @@ Once configured, you can use the cli to add components.`),e.break(),process.exit
31
30
  `}});l.append(g);}}}else typeof f=="object"&&Ne(l,a,f);}else {let a=P$1.atRule({name:i,params:s,raws:{semicolon:true,between:" ",before:`
32
31
  `}});if(t.append(a),t.insertBefore(a,P$1.comment({text:"---break---"})),typeof n=="object")for(let[f,m]of Object.entries(n))if(typeof m=="string"){let p=P$1.decl({prop:f,value:m,raws:{semicolon:true,before:`
33
32
  `}});a.append(p);}else if(f.startsWith("@")&&typeof m=="object"&&m!==null&&Object.keys(m).length===0){let p=f.match(/@([a-zA-Z-]+)\s*(.*)/);if(p){let[,u,h]=p;if(!a.nodes?.find(y=>y.type==="atrule"&&y.name===u&&y.params===h)){let y=P$1.atRule({name:u,params:h,raws:{semicolon:true,before:`
34
- `}});a.append(y);}}}else typeof m=="object"&&Ne(a,f,m);}}else i==="property"?Ne(t,r,n):fo(t,i,s,n);}else Ne(t,r,n);}}}function fo(e,t,r,n){let o=e.nodes?.find(i=>i.type==="atrule"&&i.name===t&&i.params===r);if(o||(o=P$1.atRule({name:t,params:r,raws:{semicolon:true,between:" ",before:`
35
- `}}),e.append(o),e.insertBefore(o,P$1.comment({text:"---break---"}))),typeof n=="object")for(let[i,s]of Object.entries(n))if(i.startsWith("@")){let l=i.match(/@([a-zA-Z-]+)\s*(.*)/);if(l){let[,a,f]=l;fo(o,a,f,s);}}else Ne(o,i,s);else if(typeof n=="string")try{let s=P$1.parse(`.temp{${n}}`).first;if(s&&s.nodes){let l=P$1.rule({selector:"temp",raws:{semicolon:!0,between:" ",before:`
33
+ `}});a.append(y);}}}else typeof m=="object"&&Ne(a,f,m);}}else i==="property"?Ne(t,r,n):mo(t,i,s,n);}else Ne(t,r,n);}}}function mo(e,t,r,n){let o=e.nodes?.find(i=>i.type==="atrule"&&i.name===t&&i.params===r);if(o||(o=P$1.atRule({name:t,params:r,raws:{semicolon:true,between:" ",before:`
34
+ `}}),e.append(o),e.insertBefore(o,P$1.comment({text:"---break---"}))),typeof n=="object")for(let[i,s]of Object.entries(n))if(i.startsWith("@")){let l=i.match(/@([a-zA-Z-]+)\s*(.*)/);if(l){let[,a,f]=l;mo(o,a,f,s);}}else Ne(o,i,s);else if(typeof n=="string")try{let s=P$1.parse(`.temp{${n}}`).first;if(s&&s.nodes){let l=P$1.rule({selector:"temp",raws:{semicolon:!0,between:" ",before:`
36
35
  `}});s.nodes.forEach(a=>{if(a.type==="decl"){let f=a.clone();f.raws.before=`
37
36
  `,l.append(f);}}),l.nodes?.length&&o.append(l);}}catch(i){throw console.error("Error parsing at-rule content:",n,i),i}}function Ne(e,t,r){let n=e.nodes?.find(o=>o.type==="rule"&&o.selector===t);if(n||(n=P$1.rule({selector:t,raws:{semicolon:true,between:" ",before:`
38
37
  `}}),e.append(n)),typeof r=="object"){for(let[o,i]of Object.entries(r))if(o.startsWith("@")&&typeof i=="object"&&i!==null&&Object.keys(i).length===0){let s=o.match(/@([a-zA-Z-]+)\s*(.*)/);if(s){let[,l,a]=s;if(!n.nodes?.find(m=>m.type==="atrule"&&m.name===l&&m.params===a)){if(l==="apply"){let p=n.nodes?.find(u=>u.type==="atrule"&&u.name==="apply");if(p){p.params=twMerge(p.params,a);continue}}let m=P$1.atRule({name:l,params:a,raws:{semicolon:true,before:`
39
38
  `}});n.append(m);}}}else if(typeof i=="string"){let s=P$1.decl({prop:o,value:i,raws:{semicolon:true,before:`
40
39
  `}}),l=n.nodes?.find(a=>a.type==="decl"&&a.prop===o);l?l.replaceWith(s):n.append(s);}else if(typeof i=="object"){let s=o.startsWith("&")?t.replace(/^([^:]+)/,`$1${o.substring(1)}`):o;Ne(e,s,i);}}else if(typeof r=="string")try{let i=P$1.parse(`.temp{${r}}`).first;i&&i.nodes&&i.nodes.forEach(s=>{if(s.type==="decl"){let l=s.clone();l.raws.before=`
41
- `,n?.append(l);}});}catch(o){throw console.error("Error parsing rule content:",t,r,o),o}}async function _(e$1,t,r,n){if(e$1=Array.from(new Set(e$1)),t=Array.from(new Set(t)),!e$1?.length&&!t?.length)return;n={silent:false,...n};let o=D("Installing dependencies.",{silent:n.silent})?.start(),i=await Ts(r),s="";if(js(r)&&i==="npm")if(n.silent)s="force";else {o.stopAndPersist(),e.warn(`
40
+ `,n?.append(l);}});}catch(o){throw console.error("Error parsing rule content:",t,r,o),o}}async function _(e$1,t,r,n){if(e$1=Array.from(new Set(e$1)),t=Array.from(new Set(t)),!e$1?.length&&!t?.length)return;n={silent:false,...n};let o=E("Installing dependencies.",{silent:n.silent})?.start(),i=await As(r),s="";if(Ts(r)&&i==="npm")if(n.silent)s="force";else {o.stopAndPersist(),e.warn(`
42
41
  It looks like you are using React 19.
43
42
  Some packages may fail to install due to peer dependency issues in npm (see ${a}/react-19).
44
- `);let l=await ke([{type:"select",name:"flag",message:"How would you like to proceed?",choices:[{title:"Use --force",value:"force"},{title:"Use --legacy-peer-deps",value:"legacy-peer-deps"}]}]);l&&(s=l.flag);}o?.start(),await As(i,e$1,t,r.resolvedPaths.cwd,s),o?.succeed();}function js(e){let t=x(e.resolvedPaths.cwd,false);if(!t?.dependencies?.react)return false;let r=/^(?:\^|~)?19(?:\.\d+)*(?:-.*)?$/.test(t.dependencies.react),n=t.dependencies["react-day-picker"]?.startsWith("8");return r&&n}async function Ts(e){return x(e.resolvedPaths.cwd,false)?.dependencies?.expo?"expo":ia$1(e.resolvedPaths.cwd)}async function As(e,t,r,n,o){if(e==="npm")return Ns(t,r,n,o);if(e==="deno")return Os(t,r,n);if(e==="expo")return Vs(t,r,n);t?.length&&await execa(e,["add",...t],{cwd:n}),r?.length&&await execa(e,["add","-D",...r],{cwd:n});}async function Ns(e,t,r,n){e.length&&await execa("npm",["install",...n?[`--${n}`]:[],...e],{cwd:r}),t.length&&await execa("npm",["install",...n?[`--${n}`]:[],"-D",...t],{cwd:r});}async function Os(e,t,r){e?.length&&await execa("deno",["add",...e.map(n=>`npm:${n}`)],{cwd:r}),t?.length&&await execa("deno",["add","-D",...t.map(n=>`npm:${n}`)],{cwd:r});}async function Vs(e,t,r){e.length&&await execa("npx",["expo","install",...e],{cwd:r}),t.length&&await execa("npx",["expo","install","-- -D",...t],{cwd:r});}async function Er(e$1,t,r){if(!e$1||Object.keys(e$1).length===0)return {envVarsAdded:[],envFileUpdated:null,envFileCreated:null};r={silent:false,...r};let n=D("Adding environment variables.",{silent:r.silent})?.start(),o=t.resolvedPaths.cwd,i=T__default.join(o,".env.local"),s=A(o);s&&(i=s);let l=existsSync(i),a=T__default.basename(i),f=Object.entries(e$1).map(([h,g])=>`${h}=${g}`).join(`
45
- `),m=[],p=null,u=null;if(l){let h=await promises.readFile(i,"utf-8"),g=C(h,f);if(m=B(h,f),m.length>0){if(await promises.writeFile(i,g,"utf-8"),p=T__default.relative(o,i),n?.succeed(`Added the following variables to ${d.info(a)}:`),!r.silent)for(let y of m)e.log(` ${d.success("+")} ${y}`);}else n?.stop();}else if(await promises.writeFile(i,f+`
46
- `,"utf-8"),u=T__default.relative(o,i),m=Object.keys(e$1),n?.succeed(`Added the following variables to ${d.info(a)}:`),!r.silent)for(let h of m)e.log(` ${d.success("+")} ${h}`);return !r.silent&&m.length>0&&e.break(),{envVarsAdded:m,envFileUpdated:p,envFileCreated:u}}var Ws=new Set(["--font-sans","--font-serif","--font-mono"]);async function pt(e,t){if(!e.fonts?.length)return e;let r=await Ca(t.resolvedPaths.cwd);if(!r)return e;e.cssVars??={},e.cssVars.theme??={};let n=r.framework.name==="next-app"||r.framework.name==="next-pages";for(let o of e.fonts)if(n)e.cssVars.theme[o.font.variable]=`var(${o.font.variable})`;else {let i=o.name.replace("font-",""),s=o.font.dependency??`@fontsource-variable/${i}`;e.dependencies??=[],e.dependencies.push(s),e.css??={},e.css[`@import "${s}"`]={},e.cssVars.theme[o.font.variable]=o.font.family;}if(e.fonts.length>0){let o=new Map;for(let i of e.fonts){let s=i.font.selector??Ks(i.font.variable);if(!s)continue;let l=i.font.variable.replace("--","");o.has(s)||o.set(s,[]),o.get(s).push(l);}e.css??={},e.css["@layer base"]??={};for(let[i,s]of Array.from(o.entries())){let l=s.join(" ");e.css["@layer base"][i]??={};let a=Object.keys(e.css["@layer base"][i]).find(f=>f.startsWith("@apply "));a?(delete e.css["@layer base"][i][a],e.css["@layer base"][i][`${a} ${l}`]={}):e.css["@layer base"][i][`@apply ${l}`]={};}}return e}async function ut(e,t,r){if(!e?.length)return;let n=await Ca(t.resolvedPaths.cwd);if(!n||n.framework.name!=="next-app"&&n.framework.name!=="next-pages")return;let o=D("Updating fonts.",{silent:r.silent})?.start();try{await zs(e,t,n),o?.succeed("Updating fonts.");}catch(i){throw o?.fail("Failed to update fonts."),i}}async function zs(e,t,r){let n=await Js(t,r);if(!n)return;let o=await promises.readFile(n,"utf-8"),i=await Hs(o,e,t);i!==o&&await promises.writeFile(n,i,"utf-8");}async function Js(e,t){let r=e.resolvedPaths.cwd,n=t.isSrcDir,i=t.isTsx?"tsx":"jsx",s=n?[`src/app/layout.${i}`,`app/layout.${i}`]:[`app/layout.${i}`];for(let l of s){let a=T__default.join(r,l);if(existsSync(a))return a}return null}async function Hs(e,t,r){let o=new Project({compilerOptions:{}}).createSourceFile("layout.tsx",e,{scriptKind:ScriptKind.TSX}),i=t.filter(p=>p.font.provider==="google"),s=[],l=[];for(let p of i){let u=p.font.import;if(!u)continue;let h=o.getImportDeclaration(x=>x.getModuleSpecifierValue()==="next/font/google"),g=false;h?(g=h.getNamedImports().some(R=>R.getName()===u),g||h.addNamedImport(u)):o.addImportDeclaration({moduleSpecifier:"next/font/google",namedImports:[u]});let y=qs(u,p.font.variable),b=Gs(p),C=Qs(o,p.font.variable),I=y;if(!(g&&!C&&Gt(p.font.variable)&&!ea(o,u))){if(C)C.setInitializer(`${u}(${b})`),C.getName()!==y&&C.rename(y),I=y;else {let x=ta(o);o.insertVariableStatement(x,{declarationKind:VariableDeclarationKind.Const,declarations:[{name:y,initializer:`${u}(${b})`}]}).appendWhitespace(`
47
- `);}s.push(I),Ys(p)&&l.push(p.font.variable.replace("--",""));}}let a=new Set(["font-sans","font-serif","font-mono"]),f=[...l].reverse().find(p=>a.has(p)),m=l.filter(p=>!a.has(p));return f&&m.unshift(f),s.length>0&&ra(o,s,m,r),o.getFullText()}function Gs(e){let t={};return e.font.subsets?.length&&(t.subsets=e.font.subsets),e.font.weight?.length&&(t.weight=e.font.weight),t.variable=e.font.variable,JSON.stringify(t).replace(/"([^"]+)":/g,"$1:").replace(/"/g,"'")}function Gt(e){return Ws.has(e)}function Ks(e){return Gt(e)?"html":null}function Ys(e){return !e.font.selector&&Gt(e.font.variable)}function qs(e,t){let r=Zs(e);return Gt(t)?r:`${r}${Xs(t.replace(/^--font-/,""))}`}function Zs(e){return e.split("_").map((t,r)=>r===0?t.toLowerCase():t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}function Xs(e){return e.split("-").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}function Qs(e,t){let r=e.getVariableStatements();for(let n of r)for(let o of n.getDeclarations()){let i=o.getInitializer();if(!i||i.getKind()!==SyntaxKind.CallExpression)continue;let l=i.getArguments();if(l.length===0)continue;let a=l[0].getText();if(a.includes("variable:")&&a.includes(t))return o}return null}function ea(e,t){let r=e.getVariableStatements();for(let n of r)for(let o of n.getDeclarations()){let i=o.getInitializer();if(!i||i.getKind()!==SyntaxKind.CallExpression)continue;let s=i;if(s.getExpression().getText()!==t)continue;let l=s.getArguments();if(!l.length)continue;let a=l[0].getText();if(a.includes("variable:")&&a.includes("--font-heading"))return true}return false}function ta(e){let t=e.getImportDeclarations();return t.length>0?t[t.length-1].getChildIndex()+1:0}function ra(e,t,r,n){let o=e.getDescendantsOfKind(SyntaxKind.JsxOpeningElement);for(let i of o){if(i.getTagNameNode().getText()!=="html")continue;let l=r.map(h=>`"${h}"`),a=t.map(h=>`${h}.variable`),f=[...l,...a],m=i.getAttribute("className");if(!m){mt(e,n),i.addAttribute({name:"className",initializer:`{cn(${f.join(", ")})}`});return}if(m.getKind()!==SyntaxKind.JsxAttribute)return;let p=m.asKindOrThrow(SyntaxKind.JsxAttribute),u=p.getInitializer();if(!u)return;if(u.getKind()===SyntaxKind.StringLiteral){let h=u.getText().slice(1,-1);mt(e,n),p.setInitializer(`{cn("${h}", ${f.join(", ")})}`);}else if(u.getKind()===SyntaxKind.JsxExpression){let h=u.asKindOrThrow(SyntaxKind.JsxExpression),g=h.getExpression();if(!g)return;let y=g.getText();if(y.startsWith("cn(")){let b=a.every($=>y.includes($)),C=r.every($=>y.includes(`"${$}"`)),I=["font-sans","font-serif","font-mono"].filter($=>!r.includes($)).some($=>y.includes(`"${$}"`));if(b&&C&&!I)continue;let x=oa(y,a);x=ia(x);let R=sa(x,f);h.replaceWithText(`{${R}}`);}else if(/^\w+\.variable$/.test(y)){if(a.includes(y)&&r.length===0)continue;mt(e,n);let C=(y.split(".")[0]??"").toLowerCase().includes("heading")||r.length===0;h.replaceWithText(C?`{cn(${y}, ${f.join(", ")})}`:`{cn(${f.join(", ")})}`);}else if(y.startsWith("`")&&y.endsWith("`")){let b=na(y);mt(e,n);let C=new Set(f),I=new Set(["font-sans","font-serif","font-mono"].map(R=>`"${R}"`)),x=b.filter(R=>!C.has(R)&&!I.has(R));h.replaceWithText(`{cn(${[...x,...f].join(", ")})}`);}else mt(e,n),h.replaceWithText(`{cn(${y}, ${f.join(", ")})}`);}}}function mt(e,t){if(!e.getImportDeclaration(n=>n.getNamedImports().some(i=>i.getName()==="cn"))){let n=e.getImportDeclaration(o=>o.getModuleSpecifierValue().includes("/lib/utils"));n?n.getNamedImports().some(i=>i.getName()==="cn")||n.addNamedImport("cn"):e.addImportDeclaration({moduleSpecifier:t.aliases.utils,namedImports:["cn"]});}}function na(e){let t=[],r=[],o=e.slice(1,-1).split(/(\$\{[^}]+\})/);for(let i of o)if(i)if(i.startsWith("${")&&i.endsWith("}")){let s=i.slice(2,-1).trim();s&&r.push(s);}else {let s=i.trim().split(/\s+/).filter(Boolean);for(let l of s)t.push(`"${l}"`);}return [...t,...r]}function oa(e,t){let r=e;for(let n of t)r=r.replace(new RegExp(`,?\\s*${n.replace(".","\\.")}`,"g"),"").replace(/cn\(\s*,/,"cn(");return r}function ia(e){let t=e;for(let r of ["font-sans","font-serif","font-mono"])t=t.replace(new RegExp(`,?\\s*"${r}"`,"g"),"").replace(/cn\(\s*,/,"cn(");return t}function sa(e,t){let r=t.join(", ");return e.replace(/\)$/,`, ${r})`)}async function fe(e,t,r){r={overwrite:false,silent:false,isNewProject:false,...r};let n=await Y(t);return n&&n.ui&&n.ui.resolvedPaths.cwd!==t.resolvedPaths.cwd?await ca(e,t,n,{...r,isRemote:e?.length===1&&!!e[0].match(/\/chat\/b\//)}):await la(e,t,{...r,skipFonts:r.skipFonts})}async function la(e$1,t,r){if(!e$1.length)return;let n=D("Checking registry.",{silent:r.silent})?.start(),o=await ha$1(e$1,ba$1(t));if(!o)return n?.fail(),la$1(new Error("Failed to fetch components from registry."));try{uo(o.files??[],t.resolvedPaths.cwd);}catch(a){return n?.fail(),la$1(a)}n?.succeed();let i=await Ea$1(t);r.skipFonts||(o=await pt(o,t));let s=Ae([o]);await _(o.dependencies,o.devDependencies,t,{silent:r.silent}),await fa(o.tailwind?.config,t,{silent:r.silent,tailwindVersion:i}),await Er(o.envVars,t,{silent:r.silent}),r.skipFonts||await ut(o.fonts,t,{silent:r.silent}),await K(o.files,t,{overwrite:r.overwrite,silent:r.silent,path:r.path,supportedFontMarkers:s});let l=o.cssVars?r.overwriteCssVars??await po(e$1,t):void 0;await ft(o.css,t,{silent:r.silent,cssVars:o.cssVars,cleanupDefaultNextStyles:r.isNewProject,overwriteCssVars:l,tailwindVersion:i,tailwindConfig:o.tailwind?.config}),o.docs&&e.info(o.docs);}async function ca(e$1,t,r,n){if(!e$1.length)return;let o=D("Checking registry.",{silent:n.silent})?.start(),i=await ha$1(e$1,ba$1(t));if(!i)return o?.fail(),la$1(new Error("Failed to fetch components from registry."));try{uo(i.files??[],t.resolvedPaths.cwd);}catch(E){return o?.fail(),la$1(E)}o?.succeed();let s=[],l=[],a=[],f=D("Installing components.")?.start(),m=r.ui,p=await Ea$1(m),u=_$1(t.resolvedPaths.cwd,m.resolvedPaths.ui);i=await pt(i,t);let h=Ae([i]);await _(i.dependencies,i.devDependencies,m,{silent:true}),i.tailwind?.config&&(await fa(i.tailwind?.config,m,{silent:true,tailwindVersion:p}),l.push(T__default.relative(u,m.resolvedPaths.tailwindConfig))),i.envVars&&await Er(i.envVars,m,{silent:true}),await ut(i.fonts,t,{silent:true});let g=["components","ui","lib","hooks"],y=new Map,b={"registry:ui":"ui","registry:hook":"hooks","registry:lib":"lib"},C=E=>g.includes(E),I=E=>{let ie=E?.match(/^@([^/]+)\//);return ie&&C(ie[1])?ie[1]:null},x=E=>I(E.target)??b[E.type||"registry:ui"]??"components",R=E=>E&&r[E]?r[E]:t;for(let E of i.files??[]){let ie=x(E);y.has(ie)||y.set(ie,[]),y.get(ie).push(E);}for(let E of Array.from(y.keys())){let ie=y.get(E),Ue=R(E),rs=(i.files??[]).filter(Pe=>R(x(Pe)).resolvedPaths.cwd===Ue.resolvedPaths.cwd),Pt=_$1(t.resolvedPaths.cwd,Ue.resolvedPaths.ui||Ue.resolvedPaths.cwd),gr=await Z$1(Pt,Ue.resolvedPaths.cwd)??Ue.resolvedPaths.cwd,hr=await K(ie,Ue,{overwrite:n.overwrite,silent:true,rootSpinner:f,isRemote:n.isRemote,isWorkspace:true,path:n.path,plannedFiles:rs,supportedFontMarkers:h});s.push(...hr.filesCreated.map(Pe=>T__default.relative(Pt,T__default.join(gr,Pe)))),l.push(...hr.filesUpdated.map(Pe=>T__default.relative(Pt,T__default.join(gr,Pe)))),a.push(...hr.filesSkipped.map(Pe=>T__default.relative(Pt,T__default.join(gr,Pe))));}let $=i.cssVars?n.overwriteCssVars??await po(e$1,t):void 0;await ft(i.css,m,{silent:true,cssVars:i.cssVars,overwriteCssVars:$,tailwindVersion:p,tailwindConfig:i.tailwind?.config}),(i.cssVars||i.css)&&l.push(T__default.relative(u,m.resolvedPaths.tailwindCss)),f?.succeed();let U=Array.from(new Set(s)).sort(),Y=Array.from(new Set(l.filter(E=>!s.includes(E)))).sort(),Ie=Array.from(new Set(a)).sort();if(!(U.length||Y.length)&&!Ie.length&&D("No files updated.",{silent:n.silent})?.info(),U.length){D(`Created ${U.length} ${U.length===1?"file":"files"}:`,{silent:n.silent})?.succeed();for(let E of U)e.log(` - ${E}`);}if(Y.length){D(`Updated ${Y.length} ${Y.length===1?"file":"files"}:`,{silent:n.silent})?.info();for(let E of Y)e.log(` - ${E}`);}if(Ie.length){D(`Skipped ${Ie.length} ${Ie.length===1?"file":"files"}: (use --overwrite to overwrite)`,{silent:n.silent})?.info();for(let E of Ie)e.log(` - ${E}`);}i.docs&&e.info(i.docs);}async function po(e,t){let r=await na$1(e,{config:t});return z.array(n).parse(r).some(o=>o.type==="registry:theme"||o.type==="registry:style"||o.type==="registry:font"||o.type==="registry:base")}function uo(e,t){for(let r of e)if(r?.target&&!oo(r.target,t))throw new Error(`We found an unsafe file path "${r.target} in the registry item. Installation aborted.`)}async function be(e){let t=T__default.resolve(e.projectPath,"packages/ui"),r=T__default.resolve(e.projectPath,"apps/web"),n=T__default.resolve(t,"components.json"),o=await L.readJson(n);e.registryBaseConfig&&(o=go(o,e.registryBaseConfig)),o.tailwind.baseColor="neutral",e.rtl&&(o.rtl=true),e.menuColor&&(o.menuColor=e.menuColor),e.menuAccent&&(o.menuAccent=e.menuAccent),e.iconLibrary&&(o.iconLibrary=e.iconLibrary),await L.writeJson(n,o,{spaces:2});let i=T__default.resolve(r,"components.json"),s=await L.readJson(i);e.registryBaseConfig&&(s=go(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 L.writeJson(i,s,{spaces:2});let l=await X$1(t,c.parse(o)),{config:a}=await W(e.components,l,{silent:true});await fe(e.components,a,{overwrite:true,silent:e.silent,isNewProject:true,skipFonts:true});let f=await X$1(r,c.parse(s)),m=await ha$1(e.components,ba$1(a));if(m?.fonts?.length){let u={},h=new Set;for(let g of m.fonts){let y=g.name.replace(/^font-heading-/,"").replace("font-",""),b=g.font.dependency??`@fontsource-variable/${y}`;u[g.font.variable]=g.font.family,h.add(b);}await _(Array.from(h),[],l,{silent:true}),await zt({theme:u},l,{silent:e.silent,overwriteCssVars:false,tailwindVersion:"v4"}),await ft(Object.fromEntries(Array.from(h).map(g=>[`@import "${g}"`,{}])),l,{silent:e.silent});}let p=l.iconLibrary;if(p&&p in a$3){let u=[...a$3[p].packages];await _(u,[],l,{silent:true}),await _(u,[],f,{silent:true});}return f}var yo=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:ho`---
43
+ `);let l=await ke([{type:"select",name:"flag",message:"How would you like to proceed?",choices:[{title:"Use --force",value:"force"},{title:"Use --legacy-peer-deps",value:"legacy-peer-deps"}]}]);l&&(s=l.flag);}o?.start(),await Ns(i,e$1,t,r.resolvedPaths.cwd,s),o?.succeed();}function Ts(e){let t=y(e.resolvedPaths.cwd,false);if(!t?.dependencies?.react)return false;let r=/^(?:\^|~)?19(?:\.\d+)*(?:-.*)?$/.test(t.dependencies.react),n=t.dependencies["react-day-picker"]?.startsWith("8");return r&&n}async function As(e){return y(e.resolvedPaths.cwd,false)?.dependencies?.expo?"expo":ja$1(e.resolvedPaths.cwd)}async function Ns(e,t,r,n,o){if(e==="npm")return Os(t,r,n,o);if(e==="deno")return Vs(t,r,n);if(e==="expo")return Ds(t,r,n);t?.length&&await execa(e,["add",...t],{cwd:n}),r?.length&&await execa(e,["add","-D",...r],{cwd:n});}async function Os(e,t,r,n){e.length&&await execa("npm",["install",...n?[`--${n}`]:[],...e],{cwd:r}),t.length&&await execa("npm",["install",...n?[`--${n}`]:[],"-D",...t],{cwd:r});}async function Vs(e,t,r){e?.length&&await execa("deno",["add",...e.map(n=>`npm:${n}`)],{cwd:r}),t?.length&&await execa("deno",["add","-D",...t.map(n=>`npm:${n}`)],{cwd:r});}async function Ds(e,t,r){e.length&&await execa("npx",["expo","install",...e],{cwd:r}),t.length&&await execa("npx",["expo","install","-- -D",...t],{cwd:r});}async function Er(e$1,t,r){if(!e$1||Object.keys(e$1).length===0)return {envVarsAdded:[],envFileUpdated:null,envFileCreated:null};r={silent:false,...r};let n=E("Adding environment variables.",{silent:r.silent})?.start(),o=t.resolvedPaths.cwd,i=T__default.join(o,".env.local"),s=B$1(o);s&&(i=s);let l=existsSync(i),a=T__default.basename(i),f=Object.entries(e$1).map(([h,g])=>`${h}=${g}`).join(`
44
+ `),m=[],p=null,u=null;if(l){let h=await promises.readFile(i,"utf-8"),g=D(h,f);if(m=C(h,f),m.length>0){if(await promises.writeFile(i,g,"utf-8"),p=T__default.relative(o,i),n?.succeed(`Added the following variables to ${d.info(a)}:`),!r.silent)for(let y of m)e.log(` ${d.success("+")} ${y}`);}else n?.stop();}else if(await promises.writeFile(i,f+`
45
+ `,"utf-8"),u=T__default.relative(o,i),m=Object.keys(e$1),n?.succeed(`Added the following variables to ${d.info(a)}:`),!r.silent)for(let h of m)e.log(` ${d.success("+")} ${h}`);return !r.silent&&m.length>0&&e.break(),{envVarsAdded:m,envFileUpdated:p,envFileCreated:u}}var zs=new Set(["--font-sans","--font-serif","--font-mono"]);async function pt(e,t){if(!e.fonts?.length)return e;let r=await Da$1(t.resolvedPaths.cwd);if(!r)return e;e.cssVars??={},e.cssVars.theme??={};let n=r.framework.name==="next-app"||r.framework.name==="next-pages";for(let o of e.fonts)if(n)e.cssVars.theme[o.font.variable]=`var(${o.font.variable})`;else {let i=o.name.replace("font-",""),s=o.font.dependency??`@fontsource-variable/${i}`;e.dependencies??=[],e.dependencies.push(s),e.css??={},e.css[`@import "${s}"`]={},e.cssVars.theme[o.font.variable]=o.font.family;}if(e.fonts.length>0){let o=new Map;for(let i of e.fonts){let s=i.font.selector??Ys(i.font.variable);if(!s)continue;let l=i.font.variable.replace("--","");o.has(s)||o.set(s,[]),o.get(s).push(l);}e.css??={},e.css["@layer base"]??={};for(let[i,s]of Array.from(o.entries())){let l=s.join(" ");e.css["@layer base"][i]??={};let a=Object.keys(e.css["@layer base"][i]).find(f=>f.startsWith("@apply "));a?(delete e.css["@layer base"][i][a],e.css["@layer base"][i][`${a} ${l}`]={}):e.css["@layer base"][i][`@apply ${l}`]={};}}return e}async function ut(e,t,r){if(!e?.length)return;let n=await Da$1(t.resolvedPaths.cwd);if(!n||n.framework.name!=="next-app"&&n.framework.name!=="next-pages")return;let o=E("Updating fonts.",{silent:r.silent})?.start();try{await Js(e,t,n),o?.succeed("Updating fonts.");}catch(i){throw o?.fail("Failed to update fonts."),i}}async function Js(e,t,r){let n=await Hs(t,r);if(!n)return;let o=await promises.readFile(n,"utf-8"),i=await Gs(o,e,t);i!==o&&await promises.writeFile(n,i,"utf-8");}async function Hs(e,t){let r=e.resolvedPaths.cwd,n=t.isSrcDir,i=t.isTsx?"tsx":"jsx",s=n?[`src/app/layout.${i}`,`app/layout.${i}`]:[`app/layout.${i}`];for(let l of s){let a=T__default.join(r,l);if(existsSync(a))return a}return null}async function Gs(e,t,r){let o=new Project({compilerOptions:{}}).createSourceFile("layout.tsx",e,{scriptKind:ScriptKind.TSX}),i=t.filter(p=>p.font.provider==="google"),s=[],l=[];for(let p of i){let u=p.font.import;if(!u)continue;let h=o.getImportDeclaration(x=>x.getModuleSpecifierValue()==="next/font/google"),g=false;h?(g=h.getNamedImports().some(R=>R.getName()===u),g||h.addNamedImport(u)):o.addImportDeclaration({moduleSpecifier:"next/font/google",namedImports:[u]});let y=Zs(u,p.font.variable),b=Ks(p),C=ea(o,p.font.variable),I=y;if(!(g&&!C&&Gt(p.font.variable)&&!ta(o,u))){if(C)C.setInitializer(`${u}(${b})`),C.getName()!==y&&C.rename(y),I=y;else {let x=ra(o);o.insertVariableStatement(x,{declarationKind:VariableDeclarationKind.Const,declarations:[{name:y,initializer:`${u}(${b})`}]}).appendWhitespace(`
46
+ `);}s.push(I),qs(p)&&l.push(p.font.variable.replace("--",""));}}let a=new Set(["font-sans","font-serif","font-mono"]),f=[...l].reverse().find(p=>a.has(p)),m=l.filter(p=>!a.has(p));return f&&m.unshift(f),s.length>0&&na(o,s,m,r),o.getFullText()}function Ks(e){let t={};return e.font.subsets?.length&&(t.subsets=e.font.subsets),e.font.weight?.length&&(t.weight=e.font.weight),t.variable=e.font.variable,JSON.stringify(t).replace(/"([^"]+)":/g,"$1:").replace(/"/g,"'")}function Gt(e){return zs.has(e)}function Ys(e){return Gt(e)?"html":null}function qs(e){return !e.font.selector&&Gt(e.font.variable)}function Zs(e,t){let r=Xs(e);return Gt(t)?r:`${r}${Qs(t.replace(/^--font-/,""))}`}function Xs(e){return e.split("_").map((t,r)=>r===0?t.toLowerCase():t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}function Qs(e){return e.split("-").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}function ea(e,t){let r=e.getVariableStatements();for(let n of r)for(let o of n.getDeclarations()){let i=o.getInitializer();if(!i||i.getKind()!==SyntaxKind.CallExpression)continue;let l=i.getArguments();if(l.length===0)continue;let a=l[0].getText();if(a.includes("variable:")&&a.includes(t))return o}return null}function ta(e,t){let r=e.getVariableStatements();for(let n of r)for(let o of n.getDeclarations()){let i=o.getInitializer();if(!i||i.getKind()!==SyntaxKind.CallExpression)continue;let s=i;if(s.getExpression().getText()!==t)continue;let l=s.getArguments();if(!l.length)continue;let a=l[0].getText();if(a.includes("variable:")&&a.includes("--font-heading"))return true}return false}function ra(e){let t=e.getImportDeclarations();return t.length>0?t[t.length-1].getChildIndex()+1:0}function na(e,t,r,n){let o=e.getDescendantsOfKind(SyntaxKind.JsxOpeningElement);for(let i of o){if(i.getTagNameNode().getText()!=="html")continue;let l=r.map(h=>`"${h}"`),a=t.map(h=>`${h}.variable`),f=[...l,...a],m=i.getAttribute("className");if(!m){mt(e,n),i.addAttribute({name:"className",initializer:`{cn(${f.join(", ")})}`});return}if(m.getKind()!==SyntaxKind.JsxAttribute)return;let p=m.asKindOrThrow(SyntaxKind.JsxAttribute),u=p.getInitializer();if(!u)return;if(u.getKind()===SyntaxKind.StringLiteral){let h=u.getText().slice(1,-1);mt(e,n),p.setInitializer(`{cn("${h}", ${f.join(", ")})}`);}else if(u.getKind()===SyntaxKind.JsxExpression){let h=u.asKindOrThrow(SyntaxKind.JsxExpression),g=h.getExpression();if(!g)return;let y=g.getText();if(y.startsWith("cn(")){let b=a.every($=>y.includes($)),C=r.every($=>y.includes(`"${$}"`)),I=["font-sans","font-serif","font-mono"].filter($=>!r.includes($)).some($=>y.includes(`"${$}"`));if(b&&C&&!I)continue;let x=ia(y,a);x=sa(x);let R=aa(x,f);h.replaceWithText(`{${R}}`);}else if(/^\w+\.variable$/.test(y)){if(a.includes(y)&&r.length===0)continue;mt(e,n);let C=(y.split(".")[0]??"").toLowerCase().includes("heading")||r.length===0;h.replaceWithText(C?`{cn(${y}, ${f.join(", ")})}`:`{cn(${f.join(", ")})}`);}else if(y.startsWith("`")&&y.endsWith("`")){let b=oa(y);mt(e,n);let C=new Set(f),I=new Set(["font-sans","font-serif","font-mono"].map(R=>`"${R}"`)),x=b.filter(R=>!C.has(R)&&!I.has(R));h.replaceWithText(`{cn(${[...x,...f].join(", ")})}`);}else mt(e,n),h.replaceWithText(`{cn(${y}, ${f.join(", ")})}`);}}}function mt(e,t){if(!e.getImportDeclaration(n=>n.getNamedImports().some(i=>i.getName()==="cn"))){let n=e.getImportDeclaration(o=>o.getModuleSpecifierValue().includes("/lib/utils"));n?n.getNamedImports().some(i=>i.getName()==="cn")||n.addNamedImport("cn"):e.addImportDeclaration({moduleSpecifier:t.aliases.utils,namedImports:["cn"]});}}function oa(e){let t=[],r=[],o=e.slice(1,-1).split(/(\$\{[^}]+\})/);for(let i of o)if(i)if(i.startsWith("${")&&i.endsWith("}")){let s=i.slice(2,-1).trim();s&&r.push(s);}else {let s=i.trim().split(/\s+/).filter(Boolean);for(let l of s)t.push(`"${l}"`);}return [...t,...r]}function ia(e,t){let r=e;for(let n of t)r=r.replace(new RegExp(`,?\\s*${n.replace(".","\\.")}`,"g"),"").replace(/cn\(\s*,/,"cn(");return r}function sa(e){let t=e;for(let r of ["font-sans","font-serif","font-mono"])t=t.replace(new RegExp(`,?\\s*"${r}"`,"g"),"").replace(/cn\(\s*,/,"cn(");return t}function aa(e,t){let r=t.join(", ");return e.replace(/\)$/,`, ${r})`)}async function fe(e,t,r){r={overwrite:false,silent:false,isNewProject:false,...r};let n=await Z$1(t);return n&&n.ui&&n.ui.resolvedPaths.cwd!==t.resolvedPaths.cwd?await fa(e,t,n,{...r,isRemote:e?.length===1&&!!e[0].match(/\/chat\/b\//)}):await ca(e,t,{...r,skipFonts:r.skipFonts})}async function ca(e$1,t,r){if(!e$1.length)return;let n=E("Checking registry.",{silent:r.silent})?.start(),o=await ia$1(e$1,ca$1(t));if(!o)return n?.fail(),ma(new Error("Failed to fetch components from registry."));try{go(o.files??[],t.resolvedPaths.cwd);}catch(a){return n?.fail(),ma(a)}n?.succeed();let i=await Fa$1(t);r.skipFonts||(o=await pt(o,t));let s=Ae([o]);await _(o.dependencies,o.devDependencies,t,{silent:r.silent}),await ga(o.tailwind?.config,t,{silent:r.silent,tailwindVersion:i}),await Er(o.envVars,t,{silent:r.silent}),r.skipFonts||await ut(o.fonts,t,{silent:r.silent}),await L$1(o.files,t,{overwrite:r.overwrite,silent:r.silent,path:r.path,supportedFontMarkers:s});let l=o.cssVars?r.overwriteCssVars??await uo(e$1,t):void 0;await ft(o.css,t,{silent:r.silent,cssVars:o.cssVars,cleanupDefaultNextStyles:r.isNewProject,overwriteCssVars:l,tailwindVersion:i,tailwindConfig:o.tailwind?.config}),o.docs&&e.info(o.docs);}async function fa(e$1,t,r,n){if(!e$1.length)return;let o=E("Checking registry.",{silent:n.silent})?.start(),i=await ia$1(e$1,ca$1(t));if(!i)return o?.fail(),ma(new Error("Failed to fetch components from registry."));try{go(i.files??[],t.resolvedPaths.cwd);}catch(E){return o?.fail(),ma(E)}o?.succeed();let s=[],l=[],a=[],f=E("Installing components.")?.start(),m=r.ui,p=await Fa$1(m),u=$(t.resolvedPaths.cwd,m.resolvedPaths.ui);i=await pt(i,t);let h=Ae([i]);await _(i.dependencies,i.devDependencies,m,{silent:true}),i.tailwind?.config&&(await ga(i.tailwind?.config,m,{silent:true,tailwindVersion:p}),l.push(T__default.relative(u,m.resolvedPaths.tailwindConfig))),i.envVars&&await Er(i.envVars,m,{silent:true}),await ut(i.fonts,t,{silent:true});let g=["components","ui","lib","hooks"],y=new Map,b={"registry:ui":"ui","registry:hook":"hooks","registry:lib":"lib"},C=E=>g.includes(E),I=E=>{let ie=E?.match(/^@([^/]+)\//);return ie&&C(ie[1])?ie[1]:null},x=E=>I(E.target)??b[E.type||"registry:ui"]??"components",R=E=>E&&r[E]?r[E]:t;for(let E of i.files??[]){let ie=x(E);y.has(ie)||y.set(ie,[]),y.get(ie).push(E);}for(let E of Array.from(y.keys())){let ie=y.get(E),Ue=R(E),ns=(i.files??[]).filter(Pe=>R(x(Pe)).resolvedPaths.cwd===Ue.resolvedPaths.cwd),Pt=$(t.resolvedPaths.cwd,Ue.resolvedPaths.ui||Ue.resolvedPaths.cwd),gr=await _$1(Pt,Ue.resolvedPaths.cwd)??Ue.resolvedPaths.cwd,hr=await L$1(ie,Ue,{overwrite:n.overwrite,silent:true,rootSpinner:f,isRemote:n.isRemote,isWorkspace:true,path:n.path,plannedFiles:ns,supportedFontMarkers:h});s.push(...hr.filesCreated.map(Pe=>T__default.relative(Pt,T__default.join(gr,Pe)))),l.push(...hr.filesUpdated.map(Pe=>T__default.relative(Pt,T__default.join(gr,Pe)))),a.push(...hr.filesSkipped.map(Pe=>T__default.relative(Pt,T__default.join(gr,Pe))));}let $$1=i.cssVars?n.overwriteCssVars??await uo(e$1,t):void 0;await ft(i.css,m,{silent:true,cssVars:i.cssVars,overwriteCssVars:$$1,tailwindVersion:p,tailwindConfig:i.tailwind?.config}),(i.cssVars||i.css)&&l.push(T__default.relative(u,m.resolvedPaths.tailwindCss)),f?.succeed();let U=Array.from(new Set(s)).sort(),Y=Array.from(new Set(l.filter(E=>!s.includes(E)))).sort(),Ie=Array.from(new Set(a)).sort();if(!(U.length||Y.length)&&!Ie.length&&E("No files updated.",{silent:n.silent})?.info(),U.length){E(`Created ${U.length} ${U.length===1?"file":"files"}:`,{silent:n.silent})?.succeed();for(let E of U)e.log(` - ${E}`);}if(Y.length){E(`Updated ${Y.length} ${Y.length===1?"file":"files"}:`,{silent:n.silent})?.info();for(let E of Y)e.log(` - ${E}`);}if(Ie.length){E(`Skipped ${Ie.length} ${Ie.length===1?"file":"files"}: (use --overwrite to overwrite)`,{silent:n.silent})?.info();for(let E of Ie)e.log(` - ${E}`);}i.docs&&e.info(i.docs);}async function uo(e,t){let r=await oa$1(e,{config:t});return z.array(n).parse(r).some(o=>o.type==="registry:theme"||o.type==="registry:style"||o.type==="registry:font"||o.type==="registry:base")}function go(e,t){for(let r of e)if(r?.target&&!io(r.target,t))throw new Error(`We found an unsafe file path "${r.target} in the registry item. Installation aborted.`)}async function be(e){let t=T__default.resolve(e.projectPath,"packages/ui"),r=T__default.resolve(e.projectPath,"apps/web"),n=T__default.resolve(t,"components.json"),o=await L.readJson(n);e.registryBaseConfig&&(o=ho(o,e.registryBaseConfig)),o.tailwind.baseColor="neutral",e.rtl&&(o.rtl=true),e.menuColor&&(o.menuColor=e.menuColor),e.menuAccent&&(o.menuAccent=e.menuAccent),e.iconLibrary&&(o.iconLibrary=e.iconLibrary),await L.writeJson(n,o,{spaces:2});let i=T__default.resolve(r,"components.json"),s=await L.readJson(i);e.registryBaseConfig&&(s=ho(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 L.writeJson(i,s,{spaces:2});let l=await Y(t,c.parse(o)),{config:a}=await B(e.components,l,{silent:true});await fe(e.components,a,{overwrite:true,silent:e.silent,isNewProject:true,skipFonts:true});let f=await Y(r,c.parse(s)),m=await ia$1(e.components,ca$1(a));if(m?.fonts?.length){let u={},h=new Set;for(let g of m.fonts){let y=g.name.replace(/^font-heading-/,"").replace("font-",""),b=g.font.dependency??`@fontsource-variable/${y}`;u[g.font.variable]=g.font.family,h.add(b);}await _(Array.from(h),[],l,{silent:true}),await zt({theme:u},l,{silent:e.silent,overwriteCssVars:false,tailwindVersion:"v4"}),await ft(Object.fromEntries(Array.from(h).map(g=>[`@import "${g}"`,{}])),l,{silent:e.silent});}let p=l.iconLibrary;if(p&&p in a$3){let u=[...a$3[p].packages];await _(u,[],l,{silent:true}),await _(u,[],f,{silent:true});}return f}var wo=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:yo`---
48
47
  import Layout from "@/layouts/main.astro"
49
48
  import { ComponentExample } from "@/components/component-example"
50
49
  ---
@@ -52,7 +51,7 @@ import { ComponentExample } from "@/components/component-example"
52
51
  <Layout>
53
52
  <ComponentExample client:load />
54
53
  </Layout>
55
- `}],monorepo:{templateDir:"astro-monorepo",init:be,files:[{type:"registry:page",path:"src/pages/index.astro",target:"src/pages/index.astro",content:ho`---
54
+ `}],monorepo:{templateDir:"astro-monorepo",init:be,files:[{type:"registry:page",path:"src/pages/index.astro",target:"src/pages/index.astro",content:yo`---
56
55
  import "@workspace/ui/globals.css"
57
56
  import { ComponentExample } from "@/components/component-example"
58
57
  ---
@@ -67,27 +66,27 @@ import { ComponentExample } from "@/components/component-example"
67
66
  <ComponentExample client:load />
68
67
  </body>
69
68
  </html>
70
- `}]}});var wo=X({name:"laravel",title:"Laravel",description:"Requires `laravel new`",defaultProjectName:"laravel-app",templateDir:"laravel-app",frameworks:["laravel"],scaffold:async()=>{e.break(),e.log(` Please create a new app with ${d.info("laravel new --react")} first then run ${d.info("shadcn init")}.`),e.log(` See ${d.info(`${a}/docs/installation/laravel`)} for more information.`),e.break(),process.exit(0);},create:async()=>{}});var Co=X({name:"next",title:"Next.js",defaultProjectName:"next-app",templateDir:"next-app",frameworks:["next-app","next-pages"],create:async()=>{},files:[{type:"registry:page",path:"app/page.tsx",target:"app/page.tsx",content:ho`import { ComponentExample } from "@/components/component-example";
69
+ `}]}});var bo=X({name:"laravel",title:"Laravel",description:"Requires `laravel new`",defaultProjectName:"laravel-app",templateDir:"laravel-app",frameworks:["laravel"],scaffold:async()=>{e.break(),e.log(` Please create a new app with ${d.info("laravel new --react")} first then run ${d.info("shadcn init")}.`),e.log(` See ${d.info(`${a}/docs/installation/laravel`)} for more information.`),e.break(),process.exit(0);},create:async()=>{}});var Ro=X({name:"next",title:"Next.js",defaultProjectName:"next-app",templateDir:"next-app",frameworks:["next-app","next-pages"],create:async()=>{},files:[{type:"registry:page",path:"app/page.tsx",target:"app/page.tsx",content:yo`import { ComponentExample } from "@/components/component-example";
71
70
 
72
71
  export default function Page() {
73
72
  return <ComponentExample />;
74
73
  }
75
- `}],monorepo:{templateDir:"next-monorepo",init:async e=>{let t=T__default.resolve(e.projectPath,"packages/ui"),r=T__default.resolve(e.projectPath,"apps/web"),n=T__default.resolve(t,"components.json"),o=await L.readJson(n);e.registryBaseConfig&&(o=go(o,e.registryBaseConfig)),o.tailwind.baseColor="neutral",e.rtl&&(o.rtl=true),await L.writeJson(n,o,{spaces:2});let i=T__default.resolve(r,"components.json"),s=await L.readJson(i);e.registryBaseConfig&&(s=go(s,e.registryBaseConfig)),s.tailwind.baseColor="neutral",e.rtl&&(s.rtl=true),await L.writeJson(i,s,{spaces:2});let l=await X$1(t,c.parse(o)),{config:a}=await W(e.components,l,{silent:true});await fe(e.components,a,{overwrite:true,silent:e.silent,isNewProject:true,skipFonts:true});let f=await X$1(r,c.parse(s)),m=await ha$1(e.components,ba$1(a));if(m?.fonts?.length){let u={};for(let h of m.fonts)u[h.font.variable]=`var(${h.font.variable})`;await zt({theme:u},l,{silent:e.silent,overwriteCssVars:false,tailwindVersion:"v4"}),await ut(m.fonts,f,{silent:e.silent});}let p=l.iconLibrary;if(p&&p in a$3){let u=[...a$3[p].packages];await _(u,[],l,{silent:true}),await _(u,[],f,{silent:true});}return f},files:[{type:"registry:page",path:"app/page.tsx",target:"app/page.tsx",content:ho`import { ComponentExample } from "@/components/component-example";
74
+ `}],monorepo:{templateDir:"next-monorepo",init:async e=>{let t=T__default.resolve(e.projectPath,"packages/ui"),r=T__default.resolve(e.projectPath,"apps/web"),n=T__default.resolve(t,"components.json"),o=await L.readJson(n);e.registryBaseConfig&&(o=ho(o,e.registryBaseConfig)),o.tailwind.baseColor="neutral",e.rtl&&(o.rtl=true),await L.writeJson(n,o,{spaces:2});let i=T__default.resolve(r,"components.json"),s=await L.readJson(i);e.registryBaseConfig&&(s=ho(s,e.registryBaseConfig)),s.tailwind.baseColor="neutral",e.rtl&&(s.rtl=true),await L.writeJson(i,s,{spaces:2});let l=await Y(t,c.parse(o)),{config:a}=await B(e.components,l,{silent:true});await fe(e.components,a,{overwrite:true,silent:e.silent,isNewProject:true,skipFonts:true});let f=await Y(r,c.parse(s)),m=await ia$1(e.components,ca$1(a));if(m?.fonts?.length){let u={};for(let h of m.fonts)u[h.font.variable]=`var(${h.font.variable})`;await zt({theme:u},l,{silent:e.silent,overwriteCssVars:false,tailwindVersion:"v4"}),await ut(m.fonts,f,{silent:e.silent});}let p=l.iconLibrary;if(p&&p in a$3){let u=[...a$3[p].packages];await _(u,[],l,{silent:true}),await _(u,[],f,{silent:true});}return f},files:[{type:"registry:page",path:"app/page.tsx",target:"app/page.tsx",content:yo`import { ComponentExample } from "@/components/component-example";
76
75
 
77
76
  export default function Page() {
78
77
  return <ComponentExample />;
79
78
  }
80
- `}]}});var vo=X({name:"react-router",title:"React Router",defaultProjectName:"react-router-app",templateDir:"react-router-app",frameworks:["react-router"],create:async()=>{},files:[{type:"registry:file",path:"app/routes/home.tsx",target:"app/routes/home.tsx",content:ho`import { ComponentExample } from "@/components/component-example";
79
+ `}]}});var xo=X({name:"react-router",title:"React Router",defaultProjectName:"react-router-app",templateDir:"react-router-app",frameworks:["react-router"],create:async()=>{},files:[{type:"registry:file",path:"app/routes/home.tsx",target:"app/routes/home.tsx",content:yo`import { ComponentExample } from "@/components/component-example";
81
80
 
82
81
  export default function Home() {
83
82
  return <ComponentExample />;
84
83
  }
85
- `}],monorepo:{templateDir:"react-router-monorepo",init:be,files:[{type:"registry:file",path:"app/routes/home.tsx",target:"app/routes/home.tsx",content:ho`import { ComponentExample } from "@/components/component-example";
84
+ `}],monorepo:{templateDir:"react-router-monorepo",init:be,files:[{type:"registry:file",path:"app/routes/home.tsx",target:"app/routes/home.tsx",content:yo`import { ComponentExample } from "@/components/component-example";
86
85
 
87
86
  export default function Home() {
88
87
  return <ComponentExample />;
89
88
  }
90
- `}]}});var So=X({name:"start",title:"TanStack Start",defaultProjectName:"start-app",templateDir:"start-app",frameworks:["tanstack-start"],create:async()=>{},files:[{type:"registry:file",path:"src/routes/index.tsx",target:"src/routes/index.tsx",content:ho`import { createFileRoute } from "@tanstack/react-router";
89
+ `}]}});var Io=X({name:"start",title:"TanStack Start",defaultProjectName:"start-app",templateDir:"start-app",frameworks:["tanstack-start"],create:async()=>{},files:[{type:"registry:file",path:"src/routes/index.tsx",target:"src/routes/index.tsx",content:yo`import { createFileRoute } from "@tanstack/react-router";
91
90
  import { ComponentExample } from "@/components/component-example";
92
91
 
93
92
  export const Route = createFileRoute("/")({ component: App });
@@ -97,7 +96,7 @@ function App() {
97
96
  <ComponentExample />
98
97
  );
99
98
  }
100
- `}],monorepo:{templateDir:"start-monorepo",init:be,files:[{type:"registry:file",path:"src/routes/index.tsx",target:"src/routes/index.tsx",content:ho`import { createFileRoute } from "@tanstack/react-router";
99
+ `}],monorepo:{templateDir:"start-monorepo",init:be,files:[{type:"registry:file",path:"src/routes/index.tsx",target:"src/routes/index.tsx",content:yo`import { createFileRoute } from "@tanstack/react-router";
101
100
  import { ComponentExample } from "@/components/component-example";
102
101
 
103
102
  export const Route = createFileRoute("/")({ component: App });
@@ -107,63 +106,63 @@ function App() {
107
106
  <ComponentExample />
108
107
  );
109
108
  }
110
- `}]}});var Po=X({name:"vite",title:"Vite",defaultProjectName:"vite-app",templateDir:"vite-app",frameworks:["vite"],create:async()=>{},files:[{type:"registry:file",path:"src/App.tsx",target:"src/App.tsx",content:ho`import { ComponentExample } from "@/components/component-example";
109
+ `}]}});var $o=X({name:"vite",title:"Vite",defaultProjectName:"vite-app",templateDir:"vite-app",frameworks:["vite"],create:async()=>{},files:[{type:"registry:file",path:"src/App.tsx",target:"src/App.tsx",content:yo`import { ComponentExample } from "@/components/component-example";
111
110
 
112
111
  export function App() {
113
112
  return <ComponentExample />;
114
113
  }
115
114
 
116
115
  export default App;
117
- `}],monorepo:{templateDir:"vite-monorepo",init:be,files:[{type:"registry:file",path:"src/App.tsx",target:"src/App.tsx",content:ho`import { ComponentExample } from "@/components/component-example";
116
+ `}],monorepo:{templateDir:"vite-monorepo",init:be,files:[{type:"registry:file",path:"src/App.tsx",target:"src/App.tsx",content:yo`import { ComponentExample } from "@/components/component-example";
118
117
 
119
118
  export function App() {
120
119
  return <ComponentExample />;
121
120
  }
122
121
 
123
122
  export default App;
124
- `}]}});var Q={next:Co,vite:Po,start:So,"react-router":vo,astro:yo,laravel:wo};function qe(e){if(e){for(let[t,r]of Object.entries(Q))if(r.frameworks.includes(e))return t}}function Eo(e,t){let r=t?.lib??Xt(e,"lib");return {ui:t?.ui??Xt(e,"ui"),lib:r,hooks:t?.hooks??Xt(e,"hooks"),utils:t?.utils??Xt(e,"utils",r)}}function Xt(e,t,r){let n=e||R;if(t==="ui")return `${n}/ui`;if(t==="utils"){let o=r||$o(n,"lib");return o?`${o}/utils`:S}return $o(n,t)}function $o(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 Qt(e$1){let t=e$1.template&&e$1.template in Q?e$1.template:"next",r=Te(Q[t],{monorepo:e$1.monorepo}),n=e$1.name??r.defaultProjectName,o=e$1.components?.length===1&&!!e$1.components[0].match(/\/chat\/b\//);if(o&&(t="next"),!e$1.force){let{type:a,name:f}=await ke([{type:e$1.template||o?null:"select",name:"type",message:`The path ${d.info(e$1.cwd)} does not contain a package.json file.
125
- Would you like to start a new project?`,choices:Object.entries(Q).map(([m,p])=>({title:p.title,value:m,description:p.description})),initial:0},{type:e$1.name?null:"text",name:"name",message:"What is your project named?",initial:n,format:m=>m.trim(),validate:m=>m.length>128?"Name should be less than 128 characters.":true}]);t=a??t,n=f??n;}let i=Te(Q[t],{monorepo:e$1.monorepo}),s=await ia$1(e$1.cwd,{withFallback:true}),l=T__default.join(e$1.cwd,n);try{await L.access(e$1.cwd,L.constants.W_OK);}catch{e.break(),e.error(`The path ${d.info(e$1.cwd)} is not writable.`),e.error(`It is likely you do not have write permissions for this folder or the path ${d.info(e$1.cwd)} does not exist.`),e.break(),process.exit(1);}return L.existsSync(T__default.resolve(e$1.cwd,n,"package.json"))&&(e.break(),e.error(`A project with the name ${d.info(n)} already exists.`),e.error("Please choose a different name and try again."),e.break(),process.exit(1)),await i.scaffold({projectPath:l,packageManager:s,cwd:e$1.cwd}),{projectPath:l,projectName:n,template:t}}async function ee(e$1=process.cwd()){try{let{config:t}=await import('@dotenvx/dotenvx'),r=[".env.local",".env.development.local",".env.development",".env"];for(let n of r){let o=join(e$1,n);existsSync(o)&&t({path:o,overload:!1,quiet:!0});}}catch(t){e.warn("Failed to load env files:",t);}}var Qe=".bak",Ze=class extends Error{filePath;constructor(t){super(`Could not back up ${t}.`),this.name="FileBackupError",this.filePath=t;}};function dt(e){if(!L.existsSync(e))return null;let t=`${e}${Qe}`;try{return L.renameSync(e,t),t}catch{return null}}function Xe(e){let t=`${e}${Qe}`;if(!L.existsSync(t))return false;try{return L.renameSync(t,e),!0}catch(r){return console.error(`Warning: Could not restore backup file ${t}: ${r}`),false}}function gt(e){let t=`${e}${Qe}`;if(!L.existsSync(t))return false;try{return L.unlinkSync(t),!0}catch{return false}}async function jo(e,t){if(!L.existsSync(e))return t();if(!dt(e))throw new Ze(e);let n=()=>Xe(e);process.on("exit",n);try{let o=await t();return process.removeListener("exit",n),gt(e),o}catch(o){throw process.removeListener("exit",n),Xe(e),o}}var ha=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(["radix","base"]).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 ya(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 To=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. (radix, base)").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$1,t)=>{let r$1,n=[],o=()=>{r$1&&Xe(r$1.replace(Qe,""));};process.on("exit",o);try{let i=ha.parse({...t,reinstall:t.reinstall,cwd:T__default.resolve(t.cwd)}),s=new Map(Object.entries(Z)),l;if(i.defaults&&(i.template=i.template||"next",i.base=i.base||"base",i.reinstall=i.reinstall??!1),i.template&&!(i.template in Q)&&(e.error(`Invalid template: ${d.info(i.template)}. Available templates: ${Object.keys(Q).map(u=>d.info(u)).join(", ")}.`),e.break(),process.exit(1)),typeof i.preset=="string"&&!P(i.preset)&&!r(i.preset)){let u=Array.from(s.keys());s.has(i.preset)||(e.error(`Invalid preset: ${d.info(i.preset)}. Available presets: ${u.join(", ")}`),e.break(),process.exit(1));}let a$1=i.cwd,f$1=L.existsSync(T__default.resolve(a$1,"components.json"));if(!i.monorepo&&!f$1&&await f(a$1)){let u=await Ca(a$1);if(!u||u.framework.name==="manual"){let h$1=await g(a$1);h$1.length>0&&(h("init",h$1),process.exit(1));}}if(f$1&&!i.force){let{overwrite:u}=await ke({type:"confirm",name:"overwrite",message:`A ${d.info("components.json")} file already exists. Would you like to overwrite it?`,initial:!1});u||(e.info(` To start over, remove the ${d.info("components.json")} file and run ${d.info("init")} again.`),e.break(),process.exit(1)),i.force=!0;}let m;if(f$1){try{m=await L.readJson(T__default.resolve(a$1,"components.json"));}catch{}m&&(i.existingConfig=m);let u=i.reinstall;if(u===void 0){let{reinstall:h}=await ke({type:"confirm",name:"reinstall",message:"Would you like to re-install existing UI components?",initial:!1});u=h;}if(u&&(n=await Fa$1(a$1),n.length)){e.break(),e.log(" The following components will be re-installed and overwritten:");for(let h=0;h<n.length;h+=8)e.log(` - ${n.slice(h,h+8).join(", ")}`);e.break();}}if(i.preset===void 0&&e$1.length===0&&!i.defaults){let u=L.existsSync(T__default.resolve(a$1,"package.json"));if(!i.template&&!u){let{template:h}=await ke({type:"select",name:"template",message:"Select a template",choices:Object.entries(Q).map(([g,y])=>({title:y.title,value:g,description:y.description,disabled:i.monorepo&&g==="laravel"}))});h||process.exit(1),i.template=h;}if(!i.template&&u){let h=await Ca(a$1),g=qe(h?.framework.name);g&&(i.template=g);}if(i.template==="laravel"&&!u&&(e.break(),e.log(` Please create a new app with ${d.info("laravel new --react")} first then run ${d.info("shadcn init")}.`),e.log(` See ${d.info(`${a}/docs/installation/laravel`)} for more information.`),e.break(),process.exit(0)),i.monorepo===void 0&&!u&&i.template&&Q[i.template]?.monorepo){let{monorepo:h}=await ke({type:"confirm",name:"monorepo",message:"Would you like to set up a monorepo?",initial:!1});i.monorepo=h;}i.base||(i.base=await Ke()),i.preset=!0;}if(i.preset!==void 0){let u=i.preset===!0?!0:i.preset;if(u===!0){let h=await lt({rtl:i.rtl??!1,template:i.template,base:i.base,pointer:i.pointer});e$1=[h.url,...e$1],l=h.base;}if(typeof u=="string"){let h;if(P(u)){let g=new URL(u);ya(g,i),g.pathname==="/init"&&u.startsWith(a)&&g.searchParams.set("track","1"),h=g.toString(),l=g.searchParams.get("base")??void 0;}else if(r(u)){let g=q(u);g||(e.error(`Invalid preset code: ${d.info(u)}`),e.break(),process.exit(1)),h=de({...g,base:"radix",rtl:i.rtl??!1},{template:i.template,preset:u,pointer:i.pointer}),l=void 0;}else {let g=s.get(u);if(!g)throw new Error(`Unknown preset: ${u}`);h=de({...g,base:i.base??"radix",rtl:i.rtl??g.rtl},{template:i.template,pointer:i.pointer}),l=void 0;}e$1=[h,...e$1];}}let p=i.base??l??(m?.style?m.style.startsWith("base-")?"base":"radix":"");if(!p)if(e$1.length>0)p="radix";else {let u=await Ke();p=u,i.base=u;}if(i.defaults&&!e$1.some(P)&&(e$1=[de({...Z.nova,base:p,rtl:i.rtl??!1},{template:i.template,pointer:i.pointer}),...e$1]),e$1.length>0&&P(e$1[0])){let u=new URL(e$1[0]);u.searchParams.set("base",p),e$1[0]=u.toString();}if(m?.style){let u=await ka(m.style,p);if(u!==p&&(p=u,e$1.length>0&&P(e$1[0]))){let h=new URL(e$1[0]);h.searchParams.set("base",u),e$1[0]=h.toString();}}if(n.length&&(e$1=[...e$1,...n]),i.components=e$1,await ee(i.cwd),e$1.length>0){let u=T__default.resolve(a$1,"components.json");f$1&&(r$1=dt(u)??void 0,r$1||e.warn(`Could not back up ${d.info("components.json")}.`));let{registryBaseConfig:h,installStyleIndex:g,url:y}=await Fe(e$1[0],a$1,{registries:m?.registries});e$1[0]=y,g||(i.installStyleIndex=!1),h&&(i.registryBaseConfig=h);}await et(i),e.break(),e.log(`Project initialization completed.
126
- You may now add components.`),process.removeListener("exit",o),gt(T__default.resolve(a$1,"components.json")),e.break();}catch(i){process.removeListener("exit",o),o(),e.break(),la$1(i);}finally{ca$1();}});async function et(e){let t,r,n,o=e.template,i=o?Te(Q[o],{monorepo:e.monorepo}):void 0;if(e.monorepo&&i?.init&&L.existsSync(T__default.resolve(e.cwd,"package.json")))t=await Ca(e.cwd);else if(e.skipPreflight)t=await Ca(e.cwd);else {let R=await Qn(e);if(R.errors["1"]){let{projectPath:$,template:U}=await Qt(e);$||process.exit(1),e.cwd=$,e.isNewProject=true,n=U,t=await Ca(e.cwd);}else t=R.projectInfo;}r=await Da$1(e.cwd,t);let l=n??o,a=l?Te(Q[l],{monorepo:e.monorepo}):void 0,f=[...e.installStyleIndex?["index"]:[],...e.components??[],...a?["button"]:[]],m=n?a?.postInit:void 0;if(a?.init){let R=await a.init({projectPath:e.cwd,components:f,registryBaseConfig:e.registryBaseConfig,rtl:e.rtl??false,menuColor:e.menuColor,menuAccent:e.menuAccent,iconLibrary:e.iconLibrary,silent:e.silent});return m&&await m({projectPath:e.cwd}),R}let p=r?await ba(r,e):await wa(await W$1(e.cwd));if(!e.yes){let{proceed:R}=await ke({type:"confirm",name:"proceed",message:`Write configuration to ${d.info("components.json")}. Proceed?`,initial:true});R||process.exit(1);}let u=await X$1(e.cwd,p),{config:h}=await W(f,u,{silent:true});h.registries&&(p.registries=h.registries);let g=D("Writing components.json.").start(),y=T__default.resolve(e.cwd,"components.json"),b$1=`${y}${Qe}`,C=(R,$)=>{let{registries:U,...Y}=go(R,$);return {...Y,registries:U}};if(L.existsSync(b$1)){let R=await L.readJson(b$1);e.force?R.registries&&(p.registries={...R.registries,...p.registries||{}}):p=C(R,p);}e.registryBaseConfig&&(p=C(p,e.registryBaseConfig)),e.rtl!==void 0&&(p.rtl=e.rtl),p.registries=Object.fromEntries(Object.entries(p.registries||{}).filter(([R])=>!Object.keys(b).includes(R))),await promises.writeFile(y,`${JSON.stringify(p,null,2)}
127
- `,"utf8"),g.succeed();let I=await X$1(e.cwd,p),x=await Y(I);if(x){let R={};if(p.menuColor&&(R.menuColor=p.menuColor),p.menuAccent&&(R.menuAccent=p.menuAccent),p.rtl!==void 0&&(R.rtl=p.rtl),p.iconLibrary&&(R.iconLibrary=p.iconLibrary),Object.keys(R).length>0)for(let $ of Object.keys(x)){let U=x[$];if(U.resolvedPaths.cwd===I.resolvedPaths.cwd)continue;let Y=T__default.resolve(U.resolvedPaths.cwd,"components.json");if(L.existsSync(Y)){let Ie=await L.readJson(Y);await L.writeJson(Y,{...Ie,...R},{spaces:2});}}}return V.clearCaches(),await fe(f,I,{overwrite:true,overwriteCssVars:e.reinstall||void 0,silent:e.silent,isNewProject:e.isNewProject||t?.framework.name==="next-app"}),m&&await m({projectPath:e.cwd}),I}async function wa(e$1=null){let[t,r]=await Promise.all([ra$1(),ta$1()]);e.info("");let n=await ke([{type:"toggle",name:"typescript",message:`Would you like to use ${d.info("TypeScript")} (recommended)?`,initial:e$1?.tsx??true,active:"yes",inactive:"no"},{type:"select",name:"style",message:`Which ${d.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 ${d.info("base color")}?`,choices:r.map(s=>({title:s.label,value:s.name}))},{type:"text",name:"tailwindCss",message:`Where is your ${d.info("global CSS")} file?`,initial:e$1?.tailwind.css??T$1},{type:"toggle",name:"tailwindCssVariables",message:`Would you like to use ${d.info("CSS variables")} for theming?`,initial:e$1?.tailwind.cssVariables??true,active:"yes",inactive:"no"},{type:"text",name:"tailwindPrefix",message:`Are you using a custom ${d.info("tailwind prefix eg. tw-")}? (Leave blank if not)`,initial:""},{type:"text",name:"tailwindConfig",message:`Where is your ${d.info("tailwind.config.js")} located?`,initial:e$1?.tailwind.config??U},{type:"text",name:"components",message:`Configure the import alias for ${d.info("components")}:`,initial:e$1?.aliases.components??R},{type:"toggle",name:"rsc",message:`Are you using ${d.info("React Server Components")}?`,initial:e$1?.rsc??true,active:"yes",inactive:"no"}]);n.style||process.exit(1);let o=e$1&&e$1.aliases.components===n.components?e$1.aliases:void 0,i=Eo(n.components,o);return c.parse({$schema:"https://ui.shadcn.com/schema.json",style:n.style,tailwind:{config:n.tailwindConfig,css:n.tailwindCss,baseColor:n.tailwindBaseColor,cssVariables:n.tailwindCssVariables,prefix:n.tailwindPrefix},rsc:n.rsc,tsx:n.typescript,aliases:{components:n.components,ui:i.ui,lib:i.lib,hooks:i.hooks,utils:i.utils}})}async function ba(e,t){let r=e.style,n="neutral",o=e.tailwind.cssVariables,i=e.iconLibrary??"lucide";if(!t.defaults){let[s,l]=await Promise.all([ra$1(),Ea$1(e)]);r=(await ke([{type:l==="v4"||r?null:"select",name:"style",message:`Which ${d.info("style")} would you like to use?`,choices:s.map(f=>({title:f.name==="new-york"?"New York (Recommended)":f.label,value:f.name})),initial:0}])).style??r??"new-york";}return o=t.cssVariables,c.parse({$schema:e?.$schema,style:r,tailwind:{...e?.tailwind,baseColor:n,cssVariables:o},rsc:e?.rsc,tsx:e?.tsx,iconLibrary:i,rtl:t.rtl??e?.rtl??false,aliases:e?.aliases})}async function ka(e$1,t){let r=e$1.startsWith("base-")?"base":"radix";if(t===r)return t;e.warn(` You are switching from ${d.info(r)} to ${d.info(t)}.`),e.warn(` Components outside the ${d.info("ui")} directory that depend on ${d.info(r)} primitives may need manual updates.`),e.break();let{proceed:n}=await ke({type:"confirm",name:"proceed",message:"Would you like to continue?",initial:false});return n?t:r}async function No(e$1){let t={};if(!L.existsSync(e$1.cwd)||!L.existsSync(T__default.resolve(e$1.cwd,"package.json")))return t["1"]=true,{errors:t,config:null};if(!L.existsSync(T__default.resolve(e$1.cwd,"components.json"))){if(await f(e$1.cwd)){let r=await g(e$1.cwd);r.length>0&&(h("add [component]",r),process.exit(1));}return t["3"]=true,{errors:t,config:null}}try{let r=await W$1(e$1.cwd);return {errors:t,config:r}}catch{e.break(),e.error(`An invalid ${d.info("components.json")} file was found at ${d.info(e$1.cwd)}.
128
- Before you can add components, you must create a valid ${d.info("components.json")} file by running the ${d.info("init")} command.`),e.error(`Learn more at ${d.info(`${a}/docs/components-json`)}.`),e.break(),process.exit(1);}}async function Vo(e,t,r={}){let n={files:[],dependencies:[],devDependencies:[],css:null,envVars:null,fonts:[],docs:null};if(!e.length)return n;let o=await ha$1(e,ba$1(t));if(!o)throw new Error("Failed to fetch components from registry.");r.skipFonts||(o=await pt(o,t));let i=Ae([o]);return n.dependencies=Array.from(new Set(o.dependencies??[])),n.devDependencies=Array.from(new Set(o.devDependencies??[])),n.docs=o.docs??null,await va(o,t,n,r,i),await xa(o,t,n,r),Sa(o,t,n),r.skipFonts||Ia(o,n),n}async function va(e,t,r,n,o){let i=e.files;if(!i?.length)return;let[s,l]=await Promise.all([Ca(t.resolvedPaths.cwd),t.tailwind.baseColor?ua(t.tailwind.baseColor):Promise.resolve(void 0)]),a;try{a=loadConfig(t.resolvedPaths.cwd);}catch{a={resultType:"failed"};}let f=new Project({compilerOptions:{}}),m=N$1(i,t,{isSrcDir:s?.isSrcDir,framework:s?.framework.name});for(let p=0;p<i.length;p++){let u=i[p];if(!u.content)continue;let h=L$1(u,t,{isSrcDir:s?.isSrcDir,framework:s?.framework.name,commonRoot:M(i.map($=>$.path),u.path),fileIndex:p});if(!h)continue;t.tsx||(h=h.replace(/\.tsx?$/,$=>$===".tsx"?".jsx":".js"));let g=existsSync(h),y$1=T__default.relative(t.resolvedPaths.cwd,h),b=u.type==="registry:file"||u.type==="registry:item",C=z$1(h)||b?u.content:await I({filename:u.path,raw:u.content,config:t,baseColor:l,transformJsx:!t.tsx,isRemote:false,supportedFontMarkers:o},[E,F,a$1,H,c$2,g$1,J,d$1,f$1,G]),I$1=z$1(h)||b?C:await O({config:t,content:C,filePaths:m,project:f,projectInfo:s,resolvedPath:h,tsConfig:a}),x="create",R;g&&(R=await promises.readFile(h,"utf-8"),y(R,I$1)?x="skip":x="overwrite"),r.files.push({path:y$1,action:x,content:I$1,...x==="overwrite"&&{existingContent:R},type:u.type??"registry:ui"});}}async function xa(e,t,r,n){let o=e.css&&Object.keys(e.css).length>0,i=Object.keys(e.cssVars??{}).length>0;if(!t.resolvedPaths.tailwindCss||!o&&!i)return;let s=t.resolvedPaths.tailwindCss,l=existsSync(s),a=T__default.relative(t.resolvedPaths.cwd,s),f=l?await promises.readFile(s,"utf8"):"",m=f;i&&(m=await ct(m,e.cssVars,t,{overwriteCssVars:n.overwriteCssVars})),o&&(m=await Pr(m,e.css));let p=0;if(e.cssVars)for(let u of Object.values(e.cssVars))u&&(p+=Object.keys(u).length);r.css={path:a,content:m,...l&&{existingContent:f},action:l?"update":"create",cssVarsCount:p};}function Sa(e,t,r){if(!e.envVars||Object.keys(e.envVars).length===0)return;let n=T__default.join(t.resolvedPaths.cwd,".env.local"),o=existsSync(n),i=T__default.relative(t.resolvedPaths.cwd,n);r.envVars={path:i,variables:e.envVars,action:o?"update":"create"};}function Ia(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 Ce=5,Ea=dim("\u250C"+"\u2500".repeat(46)),Fa=dim("\u2514"+"\u2500".repeat(46)),ja={create:"+",overwrite:"~",skip:"="},Ta={create:"create",overwrite:"overwrite",skip:"skip (identical)"};function ht(e){return e==="create"?green(e):e==="overwrite"||e==="update"?yellow(e):dim(e)}function yt(e){return `${bold("\u250C")} ${bold(`shadcn add ${e.join(", ")}`)} ${dim("(dry run)")}`}function _o(e,t){return e===t||e.includes(t)||e.endsWith(t)}function Ve(e,t,r=n=>n){e.push(`${dim("\u2502")} ${Ea}`);for(let n of t)e.push(`${dim("\u2502")} ${dim("\u2502")} ${r(n)}`);e.push(`${dim("\u2502")} ${Fa}`);}function Uo(e,t,r={}){return r.diff?typeof r.diff=="string"?Na(e,t,r.diff):Oa(e,t):r.view?typeof r.view=="string"?Da(e,t,r.view):Va(e,t):Aa(e,t)}function Aa(e,t){let r=[];r.push(yt(t)),r.push(dim("\u2502")),La(e,r),Do("Dependencies",e.dependencies,r),Do("Dev Dependencies",e.devDependencies,r),_a(e,r),Ua(e,r),Ma(e,r);let n=e.files.filter(i=>i.action==="overwrite").length;n>0&&(r.push(yellow(`\u26A0 ${n} ${n===1?"file":"files"} will be overwritten.`)),r.push(dim("\u2502")));let o=[];return e.files.length>0&&o.push(`${e.files.length} ${e.files.length===1?"file":"files"}`),e.dependencies.length>0&&o.push(`${e.dependencies.length} ${e.dependencies.length===1?"dep":"deps"}`),e.css?.cssVarsCount&&o.push(`${e.css.cssVarsCount} CSS vars`),o.length>0&&(r.push(`${dim("\u2502")} ${dim(o.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(`
129
- `)}function Na(e,t,r){let n=[];n.push(yt(t)),n.push(dim("\u2502"));let o=Bo(e.files,r),i=e.css&&_o(e.css.path,r);if(o.length===0&&!i)n.push(`${dim("\u2502")} ${yellow(`No file matching "${r}" found.`)}`),n.push(dim("\u2502"));else {for(let s of o)Mo(s,n);if(i&&e.css){if(n.push(`${dim("\u251C")} ${bold(e.css.path)} ${dim("(")}${ht(e.css.action)}${dim(")")}`),e.css.action==="create"||!e.css.existingContent)Ve(n,e.css.content.split(`
130
- `),s=>green(`+${s}`));else {let s=Wo(e.css.existingContent,e.css.content,e.css.path,{fullContext:true});Ve(n,s);}n.push(dim("\u2502"));}}return n.push(`${dim("\u2514")} ${dim("Run without --dry-run to apply.")}`),n.join(`
131
- `)}function Oa(e,t){let r=[];r.push(yt(t)),r.push(dim("\u2502"));let n=e.files.slice(0,Ce);if(n.length===0&&!e.css)r.push(`${dim("\u2502")} ${dim("No changes.")}`),r.push(dim("\u2502"));else {for(let s of n)Mo(s,r);e.files.length>Ce&&r.push(dim("\u2502"));}let o=e.files.length;return o>Ce&&r.push(` ${dim(`Showing ${Ce} of ${o} files. Use --diff <path> to view a specific file.`)}`),r.push(`${dim("\u2514")} ${dim("Run without --dry-run to apply.")}`),r.join(`
132
- `)}function Va(e,t){let r=[];r.push(yt(t)),r.push(dim("\u2502"));let n=e.files.slice(0,Ce);if(n.length===0&&!e.css)r.push(`${dim("\u2502")} ${dim("No files.")}`),r.push(dim("\u2502"));else {for(let s of n){let l=s.content.split(`
123
+ `}]}});var Q={next:Ro,vite:$o,start:Io,"react-router":xo,astro:wo,laravel:bo};function qe(e){if(e){for(let[t,r]of Object.entries(Q))if(r.frameworks.includes(e))return t}}function Fo(e,t){let r=t?.lib??Xt(e,"lib");return {ui:t?.ui??Xt(e,"ui"),lib:r,hooks:t?.hooks??Xt(e,"hooks"),utils:t?.utils??Xt(e,"utils",r)}}function Xt(e,t,r){let n=e||S;if(t==="ui")return `${n}/ui`;if(t==="utils"){let o=r||Eo(n,"lib");return o?`${o}/utils`:T$1}return Eo(n,t)}function Eo(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 Qt(e$1){let t=e$1.template&&e$1.template in Q?e$1.template:"next",r=Te(Q[t],{monorepo:e$1.monorepo}),n=e$1.name??r.defaultProjectName,o=e$1.components?.length===1&&!!e$1.components[0].match(/\/chat\/b\//);if(o&&(t="next"),!e$1.force){let{type:a,name:f}=await ke([{type:e$1.template||o?null:"select",name:"type",message:`The path ${d.info(e$1.cwd)} does not contain a package.json file.
124
+ Would you like to start a new project?`,choices:Object.entries(Q).map(([m,p])=>({title:p.title,value:m,description:p.description})),initial:0},{type:e$1.name?null:"text",name:"name",message:"What is your project named?",initial:n,format:m=>m.trim(),validate:m=>m.length>128?"Name should be less than 128 characters.":true}]);t=a??t,n=f??n;}let i=Te(Q[t],{monorepo:e$1.monorepo}),s=await ja$1(e$1.cwd,{withFallback:true}),l=T__default.join(e$1.cwd,n);try{await L.access(e$1.cwd,L.constants.W_OK);}catch{e.break(),e.error(`The path ${d.info(e$1.cwd)} is not writable.`),e.error(`It is likely you do not have write permissions for this folder or the path ${d.info(e$1.cwd)} does not exist.`),e.break(),process.exit(1);}return L.existsSync(T__default.resolve(e$1.cwd,n,"package.json"))&&(e.break(),e.error(`A project with the name ${d.info(n)} already exists.`),e.error("Please choose a different name and try again."),e.break(),process.exit(1)),await i.scaffold({projectPath:l,packageManager:s,cwd:e$1.cwd}),{projectPath:l,projectName:n,template:t}}async function ee(e$1=process.cwd()){try{let{config:t}=await import('@dotenvx/dotenvx'),r=[".env.local",".env.development.local",".env.development",".env"];for(let n of r){let o=join(e$1,n);existsSync(o)&&t({path:o,overload:!1,quiet:!0});}}catch(t){e.warn("Failed to load env files:",t);}}var Qe=".bak",Ze=class extends Error{filePath;constructor(t){super(`Could not back up ${t}.`),this.name="FileBackupError",this.filePath=t;}};function dt(e){if(!L.existsSync(e))return null;let t=`${e}${Qe}`;try{return L.renameSync(e,t),t}catch{return null}}function Xe(e){let t=`${e}${Qe}`;if(!L.existsSync(t))return false;try{return L.renameSync(t,e),!0}catch(r){return console.error(`Warning: Could not restore backup file ${t}: ${r}`),false}}function gt(e){let t=`${e}${Qe}`;if(!L.existsSync(t))return false;try{return L.unlinkSync(t),!0}catch{return false}}async function To(e,t){if(!L.existsSync(e))return t();if(!dt(e))throw new Ze(e);let n=()=>Xe(e);process.on("exit",n);try{let o=await t();return process.removeListener("exit",n),gt(e),o}catch(o){throw process.removeListener("exit",n),Xe(e),o}}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(["radix","base"]).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 Ao=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. (radix, base)").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$1,t)=>{let r$1,n=[],o=()=>{r$1&&Xe(r$1.replace(Qe,""));};process.on("exit",o);try{let i=ya.parse({...t,reinstall:t.reinstall,cwd:T__default.resolve(t.cwd)}),s=new Map(Object.entries(Z)),l;if(i.defaults&&(i.template=i.template||"next",i.base=i.base||"base",i.reinstall=i.reinstall??!1),i.template&&!(i.template in Q)&&(e.error(`Invalid template: ${d.info(i.template)}. Available templates: ${Object.keys(Q).map(u=>d.info(u)).join(", ")}.`),e.break(),process.exit(1)),typeof i.preset=="string"&&!Q$1(i.preset)&&!r(i.preset)){let u=Array.from(s.keys());s.has(i.preset)||(e.error(`Invalid preset: ${d.info(i.preset)}. Available presets: ${u.join(", ")}`),e.break(),process.exit(1));}let a$1=i.cwd,f$1=L.existsSync(T__default.resolve(a$1,"components.json"));if(!i.monorepo&&!f$1&&await f(a$1)){let u=await Da$1(a$1);if(!u||u.framework.name==="manual"){let h$1=await g(a$1);h$1.length>0&&(h("init",h$1),process.exit(1));}}if(f$1&&!i.force){let{overwrite:u}=await ke({type:"confirm",name:"overwrite",message:`A ${d.info("components.json")} file already exists. Would you like to overwrite it?`,initial:!1});u||(e.info(` To start over, remove the ${d.info("components.json")} file and run ${d.info("init")} again.`),e.break(),process.exit(1)),i.force=!0;}let m;if(f$1){try{m=await L.readJson(T__default.resolve(a$1,"components.json"));}catch{}m&&(i.existingConfig=m);let u=i.reinstall;if(u===void 0){let{reinstall:h}=await ke({type:"confirm",name:"reinstall",message:"Would you like to re-install existing UI components?",initial:!1});u=h;}if(u&&(n=await Ga$1(a$1),n.length)){e.break(),e.log(" The following components will be re-installed and overwritten:");for(let h=0;h<n.length;h+=8)e.log(` - ${n.slice(h,h+8).join(", ")}`);e.break();}}if(i.preset===void 0&&e$1.length===0&&!i.defaults){let u=L.existsSync(T__default.resolve(a$1,"package.json"));if(!i.template&&!u){let{template:h}=await ke({type:"select",name:"template",message:"Select a template",choices:Object.entries(Q).map(([g,y])=>({title:y.title,value:g,description:y.description,disabled:i.monorepo&&g==="laravel"}))});h||process.exit(1),i.template=h;}if(!i.template&&u){let h=await Da$1(a$1),g=qe(h?.framework.name);g&&(i.template=g);}if(i.template==="laravel"&&!u&&(e.break(),e.log(` Please create a new app with ${d.info("laravel new --react")} first then run ${d.info("shadcn init")}.`),e.log(` See ${d.info(`${a}/docs/installation/laravel`)} for more information.`),e.break(),process.exit(0)),i.monorepo===void 0&&!u&&i.template&&Q[i.template]?.monorepo){let{monorepo:h}=await ke({type:"confirm",name:"monorepo",message:"Would you like to set up a monorepo?",initial:!1});i.monorepo=h;}i.base||(i.base=await Ke()),i.preset=!0;}if(i.preset!==void 0){let u=i.preset===!0?!0:i.preset;if(u===!0){let h=await lt({rtl:i.rtl??!1,template:i.template,base:i.base,pointer:i.pointer});e$1=[h.url,...e$1],l=h.base;}if(typeof u=="string"){let h;if(Q$1(u)){let g=new URL(u);wa(g,i),g.pathname==="/init"&&u.startsWith(a)&&g.searchParams.set("track","1"),h=g.toString(),l=g.searchParams.get("base")??void 0;}else if(r(u)){let g=q(u);g||(e.error(`Invalid preset code: ${d.info(u)}`),e.break(),process.exit(1)),h=de({...g,base:"radix",rtl:i.rtl??!1},{template:i.template,preset:u,pointer:i.pointer}),l=void 0;}else {let g=s.get(u);if(!g)throw new Error(`Unknown preset: ${u}`);h=de({...g,base:i.base??"radix",rtl:i.rtl??g.rtl},{template:i.template,pointer:i.pointer}),l=void 0;}e$1=[h,...e$1];}}let p=i.base??l??(m?.style?m.style.startsWith("base-")?"base":"radix":"");if(!p)if(e$1.length>0)p="radix";else {let u=await Ke();p=u,i.base=u;}if(i.defaults&&!e$1.some(Q$1)&&(e$1=[de({...Z.nova,base:p,rtl:i.rtl??!1},{template:i.template,pointer:i.pointer}),...e$1]),e$1.length>0&&Q$1(e$1[0])){let u=new URL(e$1[0]);u.searchParams.set("base",p),e$1[0]=u.toString();}if(m?.style){let u=await Ca(m.style,p);if(u!==p&&(p=u,e$1.length>0&&Q$1(e$1[0]))){let h=new URL(e$1[0]);h.searchParams.set("base",u),e$1[0]=h.toString();}}if(n.length&&(e$1=[...e$1,...n]),i.components=e$1,await ee(i.cwd),e$1.length>0){let u=T__default.resolve(a$1,"components.json");f$1&&(r$1=dt(u)??void 0,r$1||e.warn(`Could not back up ${d.info("components.json")}.`));let{registryBaseConfig:h,installStyleIndex:g,url:y}=await Fe(e$1[0],a$1,{registries:m?.registries});e$1[0]=y,g||(i.installStyleIndex=!1),h&&(i.registryBaseConfig=h);}await et(i),e.break(),e.log(`Project initialization completed.
125
+ You may now add components.`),process.removeListener("exit",o),gt(T__default.resolve(a$1,"components.json")),e.break();}catch(i){process.removeListener("exit",o),o(),e.break(),ma(i);}finally{da();}});async function et(e){let t,r,n,o=e.template,i=o?Te(Q[o],{monorepo:e.monorepo}):void 0;if(e.monorepo&&i?.init&&L.existsSync(T__default.resolve(e.cwd,"package.json")))t=await Da$1(e.cwd);else if(e.skipPreflight)t=await Da$1(e.cwd);else {let R=await eo(e);if(R.errors["1"]){let{projectPath:$,template:U}=await Qt(e);$||process.exit(1),e.cwd=$,e.isNewProject=true,n=U,t=await Da$1(e.cwd);}else t=R.projectInfo;}r=await Ea(e.cwd,t);let l=n??o,a=l?Te(Q[l],{monorepo:e.monorepo}):void 0,f=[...e.installStyleIndex?["index"]:[],...e.components??[],...a?["button"]:[]],m=n?a?.postInit:void 0;if(a?.init){let R=await a.init({projectPath:e.cwd,components:f,registryBaseConfig:e.registryBaseConfig,rtl:e.rtl??false,menuColor:e.menuColor,menuAccent:e.menuAccent,iconLibrary:e.iconLibrary,silent:e.silent});return m&&await m({projectPath:e.cwd}),R}let p=r?await ka(r,e):await ba(await X$1(e.cwd));if(!e.yes){let{proceed:R}=await ke({type:"confirm",name:"proceed",message:`Write configuration to ${d.info("components.json")}. Proceed?`,initial:true});R||process.exit(1);}let u=await Y(e.cwd,p),{config:h}=await B(f,u,{silent:true});h.registries&&(p.registries=h.registries);let g=E("Writing components.json.").start(),y=T__default.resolve(e.cwd,"components.json"),b$1=`${y}${Qe}`,C=(R,$)=>{let{registries:U,...Y}=ho(R,$);return {...Y,registries:U}};if(L.existsSync(b$1)){let R=await L.readJson(b$1);e.force?R.registries&&(p.registries={...R.registries,...p.registries||{}}):p=C(R,p);}e.registryBaseConfig&&(p=C(p,e.registryBaseConfig)),e.rtl!==void 0&&(p.rtl=e.rtl),p.registries=Object.fromEntries(Object.entries(p.registries||{}).filter(([R])=>!Object.keys(b).includes(R))),await promises.writeFile(y,`${JSON.stringify(p,null,2)}
126
+ `,"utf8"),g.succeed();let I=await Y(e.cwd,p),x=await Z$1(I);if(x){let R={};if(p.menuColor&&(R.menuColor=p.menuColor),p.menuAccent&&(R.menuAccent=p.menuAccent),p.rtl!==void 0&&(R.rtl=p.rtl),p.iconLibrary&&(R.iconLibrary=p.iconLibrary),Object.keys(R).length>0)for(let $ of Object.keys(x)){let U=x[$];if(U.resolvedPaths.cwd===I.resolvedPaths.cwd)continue;let Y=T__default.resolve(U.resolvedPaths.cwd,"components.json");if(L.existsSync(Y)){let Ie=await L.readJson(Y);await L.writeJson(Y,{...Ie,...R},{spaces:2});}}}return W.clearCaches(),await fe(f,I,{overwrite:true,overwriteCssVars:e.reinstall||void 0,silent:e.silent,isNewProject:e.isNewProject||t?.framework.name==="next-app"}),m&&await m({projectPath:e.cwd}),I}async function ba(e$1=null){let[t,r]=await Promise.all([sa$1(),ua()]);e.info("");let n=await ke([{type:"toggle",name:"typescript",message:`Would you like to use ${d.info("TypeScript")} (recommended)?`,initial:e$1?.tsx??true,active:"yes",inactive:"no"},{type:"select",name:"style",message:`Which ${d.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 ${d.info("base color")}?`,choices:r.map(s=>({title:s.label,value:s.name}))},{type:"text",name:"tailwindCss",message:`Where is your ${d.info("global CSS")} file?`,initial:e$1?.tailwind.css??U},{type:"toggle",name:"tailwindCssVariables",message:`Would you like to use ${d.info("CSS variables")} for theming?`,initial:e$1?.tailwind.cssVariables??true,active:"yes",inactive:"no"},{type:"text",name:"tailwindPrefix",message:`Are you using a custom ${d.info("tailwind prefix eg. tw-")}? (Leave blank if not)`,initial:""},{type:"text",name:"tailwindConfig",message:`Where is your ${d.info("tailwind.config.js")} located?`,initial:e$1?.tailwind.config??V},{type:"text",name:"components",message:`Configure the import alias for ${d.info("components")}:`,initial:e$1?.aliases.components??S},{type:"toggle",name:"rsc",message:`Are you using ${d.info("React Server Components")}?`,initial:e$1?.rsc??true,active:"yes",inactive:"no"}]);n.style||process.exit(1);let o=e$1&&e$1.aliases.components===n.components?e$1.aliases:void 0,i=Fo(n.components,o);return c.parse({$schema:"https://ui.shadcn.com/schema.json",style:n.style,tailwind:{config:n.tailwindConfig,css:n.tailwindCss,baseColor:n.tailwindBaseColor,cssVariables:n.tailwindCssVariables,prefix:n.tailwindPrefix},rsc:n.rsc,tsx:n.typescript,aliases:{components:n.components,ui:i.ui,lib:i.lib,hooks:i.hooks,utils:i.utils}})}async function ka(e,t){let r=e.style,n="neutral",o=e.tailwind.cssVariables,i=e.iconLibrary??"lucide";if(!t.defaults){let[s,l]=await Promise.all([sa$1(),Fa$1(e)]);r=(await ke([{type:l==="v4"||r?null:"select",name:"style",message:`Which ${d.info("style")} would you like to use?`,choices:s.map(f=>({title:f.name==="new-york"?"New York (Recommended)":f.label,value:f.name})),initial:0}])).style??r??"new-york";}return o=t.cssVariables,c.parse({$schema:e?.$schema,style:r,tailwind:{...e?.tailwind,baseColor:n,cssVariables:o},rsc:e?.rsc,tsx:e?.tsx,iconLibrary:i,rtl:t.rtl??e?.rtl??false,aliases:e?.aliases})}async function Ca(e$1,t){let r=e$1.startsWith("base-")?"base":"radix";if(t===r)return t;e.warn(` You are switching from ${d.info(r)} to ${d.info(t)}.`),e.warn(` Components outside the ${d.info("ui")} directory that depend on ${d.info(r)} primitives may need manual updates.`),e.break();let{proceed:n}=await ke({type:"confirm",name:"proceed",message:"Would you like to continue?",initial:false});return n?t:r}async function Oo(e$1){let t={};if(!L.existsSync(e$1.cwd)||!L.existsSync(T__default.resolve(e$1.cwd,"package.json")))return t["1"]=true,{errors:t,config:null};if(!L.existsSync(T__default.resolve(e$1.cwd,"components.json"))){if(await f(e$1.cwd)){let r=await g(e$1.cwd);r.length>0&&(h("add [component]",r),process.exit(1));}return t["3"]=true,{errors:t,config:null}}try{let r=await X$1(e$1.cwd);return {errors:t,config:r}}catch{e.break(),e.error(`An invalid ${d.info("components.json")} file was found at ${d.info(e$1.cwd)}.
127
+ Before you can add components, you must create a valid ${d.info("components.json")} file by running the ${d.info("init")} command.`),e.error(`Learn more at ${d.info(`${a}/docs/components-json`)}.`),e.break(),process.exit(1);}}async function Do(e,t,r={}){let n={files:[],dependencies:[],devDependencies:[],css:null,envVars:null,fonts:[],docs:null};if(!e.length)return n;let o=await ia$1(e,ca$1(t));if(!o)throw new Error("Failed to fetch components from registry.");r.skipFonts||(o=await pt(o,t));let i=Ae([o]);return n.dependencies=Array.from(new Set(o.dependencies??[])),n.devDependencies=Array.from(new Set(o.devDependencies??[])),n.docs=o.docs??null,await xa(o,t,n,r,i),await Sa(o,t,n,r),Ia(o,t,n),r.skipFonts||Pa(o,n),n}async function xa(e,t,r,n,o){let i=e.files;if(!i?.length)return;let[s,l]=await Promise.all([Da$1(t.resolvedPaths.cwd),t.tailwind.baseColor?va(t.tailwind.baseColor):Promise.resolve(void 0)]),a;try{a=loadConfig(t.resolvedPaths.cwd);}catch{a={resultType:"failed"};}let f=new Project({compilerOptions:{}}),m=O(i,t,{isSrcDir:s?.isSrcDir,framework:s?.framework.name});for(let p=0;p<i.length;p++){let u=i[p];if(!u.content)continue;let h=M(u,t,{isSrcDir:s?.isSrcDir,framework:s?.framework.name,commonRoot:N$1(i.map($=>$.path),u.path),fileIndex:p});if(!h)continue;t.tsx||(h=h.replace(/\.tsx?$/,$=>$===".tsx"?".jsx":".js"));let g=existsSync(h),y=T__default.relative(t.resolvedPaths.cwd,h),b=u.type==="registry:file"||u.type==="registry:item",C=A(h)||b?u.content:await J({filename:u.path,raw:u.content,config:t,baseColor:l,transformJsx:!t.tsx,isRemote:false,supportedFontMarkers:o},[F,G,a$1,I,c$2,g$1,K,d$1,f$1,H]),I$1=A(h)||b?C:await P({config:t,content:C,filePaths:m,project:f,projectInfo:s,resolvedPath:h,tsConfig:a}),x="create",R;g&&(R=await promises.readFile(h,"utf-8"),z$1(R,I$1)?x="skip":x="overwrite"),r.files.push({path:y,action:x,content:I$1,...x==="overwrite"&&{existingContent:R},type:u.type??"registry:ui"});}}async function Sa(e,t,r,n){let o=e.css&&Object.keys(e.css).length>0,i=Object.keys(e.cssVars??{}).length>0;if(!t.resolvedPaths.tailwindCss||!o&&!i)return;let s=t.resolvedPaths.tailwindCss,l=existsSync(s),a=T__default.relative(t.resolvedPaths.cwd,s),f=l?await promises.readFile(s,"utf8"):"",m=f;i&&(m=await ct(m,e.cssVars,t,{overwriteCssVars:n.overwriteCssVars})),o&&(m=await Pr(m,e.css));let p=0;if(e.cssVars)for(let u of Object.values(e.cssVars))u&&(p+=Object.keys(u).length);r.css={path:a,content:m,...l&&{existingContent:f},action:l?"update":"create",cssVarsCount:p};}function Ia(e,t,r){if(!e.envVars||Object.keys(e.envVars).length===0)return;let n=T__default.join(t.resolvedPaths.cwd,".env.local"),o=existsSync(n),i=T__default.relative(t.resolvedPaths.cwd,n);r.envVars={path:i,variables:e.envVars,action:o?"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 Ce=5,Fa=dim("\u250C"+"\u2500".repeat(46)),ja=dim("\u2514"+"\u2500".repeat(46)),Ta={create:"+",overwrite:"~",skip:"="},Aa={create:"create",overwrite:"overwrite",skip:"skip (identical)"};function ht(e){return e==="create"?green(e):e==="overwrite"||e==="update"?yellow(e):dim(e)}function yt(e){return `${bold("\u250C")} ${bold(`shadcn add ${e.join(", ")}`)} ${dim("(dry run)")}`}function Uo(e,t){return e===t||e.includes(t)||e.endsWith(t)}function Ve(e,t,r=n=>n){e.push(`${dim("\u2502")} ${Fa}`);for(let n of t)e.push(`${dim("\u2502")} ${dim("\u2502")} ${r(n)}`);e.push(`${dim("\u2502")} ${ja}`);}function Mo(e,t,r={}){return r.diff?typeof r.diff=="string"?Oa(e,t,r.diff):Va(e,t):r.view?typeof r.view=="string"?La(e,t,r.view):Da(e,t):Na(e,t)}function Na(e,t){let r=[];r.push(yt(t)),r.push(dim("\u2502")),_a(e,r),Lo("Dependencies",e.dependencies,r),Lo("Dev Dependencies",e.devDependencies,r),Ua(e,r),Ma(e,r),Wa(e,r);let n=e.files.filter(i=>i.action==="overwrite").length;n>0&&(r.push(yellow(`\u26A0 ${n} ${n===1?"file":"files"} will be overwritten.`)),r.push(dim("\u2502")));let o=[];return e.files.length>0&&o.push(`${e.files.length} ${e.files.length===1?"file":"files"}`),e.dependencies.length>0&&o.push(`${e.dependencies.length} ${e.dependencies.length===1?"dep":"deps"}`),e.css?.cssVarsCount&&o.push(`${e.css.cssVarsCount} CSS vars`),o.length>0&&(r.push(`${dim("\u2502")} ${dim(o.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(`
128
+ `)}function Oa(e,t,r){let n=[];n.push(yt(t)),n.push(dim("\u2502"));let o=Bo(e.files,r),i=e.css&&Uo(e.css.path,r);if(o.length===0&&!i)n.push(`${dim("\u2502")} ${yellow(`No file matching "${r}" found.`)}`),n.push(dim("\u2502"));else {for(let s of o)Wo(s,n);if(i&&e.css){if(n.push(`${dim("\u251C")} ${bold(e.css.path)} ${dim("(")}${ht(e.css.action)}${dim(")")}`),e.css.action==="create"||!e.css.existingContent)Ve(n,e.css.content.split(`
129
+ `),s=>green(`+${s}`));else {let s=zo(e.css.existingContent,e.css.content,e.css.path,{fullContext:true});Ve(n,s);}n.push(dim("\u2502"));}}return n.push(`${dim("\u2514")} ${dim("Run without --dry-run to apply.")}`),n.join(`
130
+ `)}function Va(e,t){let r=[];r.push(yt(t)),r.push(dim("\u2502"));let n=e.files.slice(0,Ce);if(n.length===0&&!e.css)r.push(`${dim("\u2502")} ${dim("No changes.")}`),r.push(dim("\u2502"));else {for(let s of n)Wo(s,r);e.files.length>Ce&&r.push(dim("\u2502"));}let o=e.files.length;return o>Ce&&r.push(` ${dim(`Showing ${Ce} of ${o} files. Use --diff <path> to view a specific file.`)}`),r.push(`${dim("\u2514")} ${dim("Run without --dry-run to apply.")}`),r.join(`
131
+ `)}function Da(e,t){let r=[];r.push(yt(t)),r.push(dim("\u2502"));let n=e.files.slice(0,Ce);if(n.length===0&&!e.css)r.push(`${dim("\u2502")} ${dim("No files.")}`),r.push(dim("\u2502"));else {for(let s of n){let l=s.content.split(`
133
132
  `);r.push(`${dim("\u251C")} ${bold(s.path)} ${dim("(")}${ht(s.action)}${dim(")")} ${dim(`${l.length} lines`)}`),Ve(r,l),r.push(dim("\u2502"));}e.files.length>Ce&&r.push(dim("\u2502"));}let o=e.files.length;return o>Ce&&r.push(` ${dim(`Showing ${Ce} of ${o} files. Use --view <path> to view a specific file.`)}`),r.push(`${dim("\u2514")} ${dim("Run without --dry-run to apply.")}`),r.join(`
134
- `)}function Mo(e,t){if(t.push(`${dim("\u251C")} ${bold(e.path)} ${dim("(")}${ht(e.action)}${dim(")")}`),e.action==="skip")t.push(`${dim("\u2502")} ${dim("No changes.")}`);else if(e.action==="create")Ve(t,e.content.split(`
135
- `),r=>green(`+${r}`));else {let r=Wo(e.existingContent,e.content,e.path);Ve(t,r);}t.push(dim("\u2502"));}function Da(e,t,r){let n=[];n.push(yt(t)),n.push(dim("\u2502"));let o=Bo(e.files,r),i=e.css&&_o(e.css.path,r);if(o.length===0&&!i)n.push(`${dim("\u2502")} ${yellow(`No file matching "${r}" found.`)}`),n.push(dim("\u2502"));else {for(let s of o){let l=s.content.split(`
133
+ `)}function Wo(e,t){if(t.push(`${dim("\u251C")} ${bold(e.path)} ${dim("(")}${ht(e.action)}${dim(")")}`),e.action==="skip")t.push(`${dim("\u2502")} ${dim("No changes.")}`);else if(e.action==="create")Ve(t,e.content.split(`
134
+ `),r=>green(`+${r}`));else {let r=zo(e.existingContent,e.content,e.path);Ve(t,r);}t.push(dim("\u2502"));}function La(e,t,r){let n=[];n.push(yt(t)),n.push(dim("\u2502"));let o=Bo(e.files,r),i=e.css&&Uo(e.css.path,r);if(o.length===0&&!i)n.push(`${dim("\u2502")} ${yellow(`No file matching "${r}" found.`)}`),n.push(dim("\u2502"));else {for(let s of o){let l=s.content.split(`
136
135
  `);n.push(`${dim("\u251C")} ${bold(s.path)} ${dim("(")}${ht(s.action)}${dim(")")} ${dim(`${l.length} lines`)}`),Ve(n,l),n.push(dim("\u2502"));}if(i&&e.css){let s=e.css.content.split(`
137
136
  `);n.push(`${dim("\u251C")} ${bold(e.css.path)} ${dim("(")}${ht(e.css.action)}${dim(")")} ${dim(`${s.length} lines`)}`),Ve(n,s),n.push(dim("\u2502"));}}return n.push(`${dim("\u2514")} ${dim("Run without --dry-run to apply.")}`),n.join(`
138
- `)}function La(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 n=[];r.create>0&&n.push(green(`+${r.create} new`)),r.overwrite>0&&n.push(yellow(`~${r.overwrite} overwrite`)),r.skip>0&&n.push(dim(`=${r.skip} skip`));let o=n.length>0?` ${n.join(dim(", "))}`:"";t.push(`${dim("\u251C")} ${bold("Files")} ${dim(`(${e.files.length})`)}${o}`);let i=Math.max(...e.files.map(s=>s.path.length));for(let s of e.files){let l=ja[s.action],a=Ta[s.action],f=" ".repeat(Math.max(1,i-s.path.length+2)),m=s.action==="create"?green:s.action==="overwrite"?yellow:dim,p=s.action==="skip"?dim(s.path):s.path;t.push(`${dim("\u2502")} ${m(l)} ${p}${f}${m(a)}`);}t.push(dim("\u2502"));}function Do(e,t,r){if(t.length){r.push(`${dim("\u251C")} ${bold(e)} ${dim(`(${t.length})`)}`);for(let n of t)r.push(`${dim("\u2502")} ${green("+")} ${n}`);r.push(dim("\u2502"));}}function _a(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 Ua(e,t){if(!e.envVars)return;let r=Object.keys(e.envVars.variables);t.push(`${dim("\u251C")} ${bold("Environment Variables")}`);for(let n of r)t.push(`${dim("\u2502")} ${green("+")} ${n}`);t.push(dim("\u2502"));}function Ma(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 Bo(e,t){let r=e.filter(n=>n.path===t);return r.length>0?r:e.filter(n=>n.path.includes(t)||n.path.replace(/\\/g,"/").includes(t))}function Wo(e,t,r,n={}){if(Ha(e,t))return [dim(" Formatting-only changes (spacing, quotes, semicolons).")];let o=Lo(e),i=Lo(t),s=n.fullContext?Math.max(o.split(`
137
+ `)}function _a(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 n=[];r.create>0&&n.push(green(`+${r.create} new`)),r.overwrite>0&&n.push(yellow(`~${r.overwrite} overwrite`)),r.skip>0&&n.push(dim(`=${r.skip} skip`));let o=n.length>0?` ${n.join(dim(", "))}`:"";t.push(`${dim("\u251C")} ${bold("Files")} ${dim(`(${e.files.length})`)}${o}`);let i=Math.max(...e.files.map(s=>s.path.length));for(let s of e.files){let l=Ta[s.action],a=Aa[s.action],f=" ".repeat(Math.max(1,i-s.path.length+2)),m=s.action==="create"?green:s.action==="overwrite"?yellow:dim,p=s.action==="skip"?dim(s.path):s.path;t.push(`${dim("\u2502")} ${m(l)} ${p}${f}${m(a)}`);}t.push(dim("\u2502"));}function Lo(e,t,r){if(t.length){r.push(`${dim("\u251C")} ${bold(e)} ${dim(`(${t.length})`)}`);for(let n of t)r.push(`${dim("\u2502")} ${green("+")} ${n}`);r.push(dim("\u2502"));}}function Ua(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 Ma(e,t){if(!e.envVars)return;let r=Object.keys(e.envVars.variables);t.push(`${dim("\u251C")} ${bold("Environment Variables")}`);for(let n of r)t.push(`${dim("\u2502")} ${green("+")} ${n}`);t.push(dim("\u2502"));}function Wa(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 Bo(e,t){let r=e.filter(n=>n.path===t);return r.length>0?r:e.filter(n=>n.path.includes(t)||n.path.replace(/\\/g,"/").includes(t))}function zo(e,t,r,n={}){if(Ga(e,t))return [dim(" Formatting-only changes (spacing, quotes, semicolons).")];let o=_o(e),i=_o(t),s=n.fullContext?Math.max(o.split(`
139
138
  `).length,i.split(`
140
139
  `).length):3,l=structuredPatch(`a/${r}`,`b/${r}`,o,i,"","",{context:s});if(!l.hunks.length)return [dim(" No changes.")];let a=[dim(`--- a/${r}`),dim(`+++ b/${r}`)],f=t.split(`
141
- `);for(let m of l.hunks){let{entries:p}=Ba(m,f);if(!p.some(b=>b.kind!=="context"))continue;let h=p.filter(b=>b.kind==="context").length,g=p.filter(b=>b.kind==="removed").length,y=p.filter(b=>b.kind==="added").length;a.push(cyan(`@@ -${m.oldStart},${h+g} +${m.newStart},${h+y} @@`));for(let b of p)a.push(b.formatted);}return a}function Ba(e,t){let r=[],n=e.newStart-1,o=0;for(;o<e.lines.length;){let i=e.lines[o];if(i.startsWith("-")){let s=[];for(;o<e.lines.length&&e.lines[o].startsWith("-");)s.push(e.lines[o].slice(1)),o++;for(;o<e.lines.length&&e.lines[o].startsWith("\\");)o++;let l=[];for(;o<e.lines.length&&e.lines[o].startsWith("+");)l.push(e.lines[o].slice(1)),o++;for(;o<e.lines.length&&e.lines[o].startsWith("\\");)o++;n=Wa(s,l,t,n,r);}else if(i.startsWith("+")){let s=t[n]??i.slice(1);r.push({kind:"added",formatted:green(`+${s}`)}),n++,o++;}else if(i.startsWith("\\"))o++;else {let s=t[n]??i.slice(1);r.push({kind:"context",formatted:dim(` ${s}`)}),n++,o++;}}return {entries:r,newLineIndex:n}}function Wa(e,t,r,n,o){if(Ga(e,t)){for(let a=0;a<t.length;a++){let f=r[n]??t[a];o.push({kind:"context",formatted:dim(` ${f}`)}),n++;}return n}let i=za(e),s=i.map(tr),l=new Set;for(let a=0;a<t.length;a++){let f=r[n]??t[a],m=tr(t[a]),p=s.findIndex((u,h)=>!l.has(h)&&u===m);if(p!==-1)l.add(p),o.push({kind:"context",formatted:dim(` ${f}`)});else {let u=s.findIndex((h,g)=>!l.has(g));if(u!==-1){l.add(u);let{oldHighlighted:h,newHighlighted:g}=Ja(i[u],f);o.push({kind:"removed",formatted:h}),o.push({kind:"added",formatted:g});}else o.push({kind:"added",formatted:green(`+${f}`)});}n++;}for(let a=0;a<i.length;a++)l.has(a)||o.push({kind:"removed",formatted:red(`-${i[a]}`)});return n}function Lo(e){return e.split(`
140
+ `);for(let m of l.hunks){let{entries:p}=Ba(m,f);if(!p.some(b=>b.kind!=="context"))continue;let h=p.filter(b=>b.kind==="context").length,g=p.filter(b=>b.kind==="removed").length,y=p.filter(b=>b.kind==="added").length;a.push(cyan(`@@ -${m.oldStart},${h+g} +${m.newStart},${h+y} @@`));for(let b of p)a.push(b.formatted);}return a}function Ba(e,t){let r=[],n=e.newStart-1,o=0;for(;o<e.lines.length;){let i=e.lines[o];if(i.startsWith("-")){let s=[];for(;o<e.lines.length&&e.lines[o].startsWith("-");)s.push(e.lines[o].slice(1)),o++;for(;o<e.lines.length&&e.lines[o].startsWith("\\");)o++;let l=[];for(;o<e.lines.length&&e.lines[o].startsWith("+");)l.push(e.lines[o].slice(1)),o++;for(;o<e.lines.length&&e.lines[o].startsWith("\\");)o++;n=za(s,l,t,n,r);}else if(i.startsWith("+")){let s=t[n]??i.slice(1);r.push({kind:"added",formatted:green(`+${s}`)}),n++,o++;}else if(i.startsWith("\\"))o++;else {let s=t[n]??i.slice(1);r.push({kind:"context",formatted:dim(` ${s}`)}),n++,o++;}}return {entries:r,newLineIndex:n}}function za(e,t,r,n,o){if(Ka(e,t)){for(let a=0;a<t.length;a++){let f=r[n]??t[a];o.push({kind:"context",formatted:dim(` ${f}`)}),n++;}return n}let i=Ja(e),s=i.map(tr),l=new Set;for(let a=0;a<t.length;a++){let f=r[n]??t[a],m=tr(t[a]),p=s.findIndex((u,h)=>!l.has(h)&&u===m);if(p!==-1)l.add(p),o.push({kind:"context",formatted:dim(` ${f}`)});else {let u=s.findIndex((h,g)=>!l.has(g));if(u!==-1){l.add(u);let{oldHighlighted:h,newHighlighted:g}=Ha(i[u],f);o.push({kind:"removed",formatted:h}),o.push({kind:"added",formatted:g});}else o.push({kind:"added",formatted:green(`+${f}`)});}n++;}for(let a=0;a<i.length;a++)l.has(a)||o.push({kind:"removed",formatted:red(`-${i[a]}`)});return n}function _o(e){return e.split(`
142
141
  `).map(t=>{let r=t.match(/^(\s*)/)?.[1]??"",n=t.slice(r.length);return r+n.replace(/['"]/g,'"').replace(/;$/g,"")}).join(`
143
- `)}function za(e){let t=[];for(let r=0;r<e.length;r++){let n=e[r];for(;r+1<e.length&&n.trimEnd().endsWith(":");)r++,n=n.trimEnd()+" "+e[r].trim();t.push(n);}return t}function Ja(e,t){let r=diffWords(e,t),n="-",o="+";for(let i of r)i.added?o+=bold(green(i.value)):i.removed?n+=bold(red(i.value)):(n+=red(i.value),o+=green(i.value));return {oldHighlighted:n,newHighlighted:o}}function tr(e){return e.replace(/\s+/g," ").trim().replace(/['"]/g,"'").replace(/;/g,"").replace(/,$/,"")}function Ha(e,t){let r=n=>n.split(`
144
- `).map(tr).filter(o=>o.length>0).join(" ");return r(e)===r(t)}function Ga(e,t){let r=n=>n.map(tr).filter(o=>o.length>0).join(" ");return r(e)===r(t)}async function Jo(e,t){let r=T__default.join(t.resolvedPaths.cwd,"app/page.tsx");if(!(await wt__default.stat(r)).isFile())return;let[n]=await na$1([e],{config:t});if(!n?.meta?.importSpecifier||!n?.meta?.moduleSpecifier)return;let o=`import { ${n?.meta?.importSpecifier} } from "${n.meta.moduleSpecifier}"
142
+ `)}function Ja(e){let t=[];for(let r=0;r<e.length;r++){let n=e[r];for(;r+1<e.length&&n.trimEnd().endsWith(":");)r++,n=n.trimEnd()+" "+e[r].trim();t.push(n);}return t}function Ha(e,t){let r=diffWords(e,t),n="-",o="+";for(let i of r)i.added?o+=bold(green(i.value)):i.removed?n+=bold(red(i.value)):(n+=red(i.value),o+=green(i.value));return {oldHighlighted:n,newHighlighted:o}}function tr(e){return e.replace(/\s+/g," ").trim().replace(/['"]/g,"'").replace(/;/g,"").replace(/,$/,"")}function Ga(e,t){let r=n=>n.split(`
143
+ `).map(tr).filter(o=>o.length>0).join(" ");return r(e)===r(t)}function Ka(e,t){let r=n=>n.map(tr).filter(o=>o.length>0).join(" ");return r(e)===r(t)}async function Ho(e,t){let r=T__default.join(t.resolvedPaths.cwd,"app/page.tsx");if(!(await wt__default.stat(r)).isFile())return;let[n]=await oa$1([e],{config:t});if(!n?.meta?.importSpecifier||!n?.meta?.moduleSpecifier)return;let o=`import { ${n?.meta?.importSpecifier} } from "${n.meta.moduleSpecifier}"
145
144
 
146
145
  export default function Page() {
147
146
  return <${n?.meta?.importSpecifier} />
148
- }`;await wt__default.writeFile(r,o,"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()}),Ho=new Command().name("add").description("add a component to your project").argument("[components...]","names, url or local path to component").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$1,t)=>{try{let r=Za.parse({components:e$1,...t,cwd:T__default.resolve(t.cwd)});await ee(r.cwd);let n=r.dryRun||r.diff||r.view,o=await W$1(r.cwd);o||(o=aa({style:"new-york",resolvedPaths:{cwd:r.cwd}}));let i=!1;if(e$1.length>0){let{config:g,newRegistries:y}=await W(e$1,o,{silent:r.silent,writeFile:!1});o=g,i=y.length>0;}let s,l=!0;if(e$1.length>0){let[g]=await na$1([e$1[0]],{config:o});if(s=g?.type,l=s!=="registry:theme"&&s!=="registry:style"&&s!=="registry:base",Q$1(g)&&!n){await fe(e$1,o,r);return}if(!r.yes&&!n&&(s==="registry:style"||s==="registry:theme")){e.break();let{confirm:y}=await ke({type:"confirm",name:"confirm",message:d.warn(`You are about to install a new ${s.replace("registry:","")}.
149
- Existing CSS variables and components will be overwritten. Continue?`)});y||(e.break(),e.log("Installation cancelled."),e.break(),process.exit(1));}}r.components?.length||(r.components=await Xa(r));let a=await Ca(r.cwd);if(a?.tailwindVersion==="v4"){let g=c$1.filter(y=>r.components?.includes(y.name));g?.length&&(e.break(),g.forEach(y=>{e.warn(d.warn(y.message));}),e.break(),process.exit(1));}let{errors:f,config:m}=await No(r),p=!1;if(f["3"]){let{proceed:g}=await ke({type:"confirm",name:"proceed",message:`You need to create a ${d.info("components.json")} file to add components. Proceed?`,initial:!0});g||(e.break(),process.exit(1));let y=qe(a?.framework.name),b=await Ke(),{url:C}=await lt({rtl:!1,base:b,template:y}),{registryBaseConfig:I,installStyleIndex:x,url:R}=await Fe(C,r.cwd);m=await et({cwd:r.cwd,yes:!0,force:!0,defaults:!1,skipPreflight:!1,silent:r.silent&&!i,isNewProject:!1,cssVariables:!0,rtl:!1,installStyleIndex:x,components:[R,...r.components??[]],registryBaseConfig:I}),p=!0;}let u=!1;if(f["1"]){let{projectPath:g,template:y}=await Qt({cwd:r.cwd,force:r.overwrite,components:r.components});g||(e.break(),process.exit(1)),r.cwd=g;let b=await Ke(),{url:C}=await lt({rtl:!1,base:b,template:y}),{registryBaseConfig:I,installStyleIndex:x,url:R}=await Fe(C,r.cwd);m=await et({cwd:r.cwd,yes:!0,force:!0,defaults:!1,skipPreflight:!0,silent:!i&&r.silent,isNewProject:!0,cssVariables:!0,rtl:!1,installStyleIndex:x,components:[R,...r.components??[]],registryBaseConfig:I}),p=!0,u=r.components?.length===1&&!!r.components[0].match(/\/chat\/b\//);}if(!m)throw new Error(`Failed to read config at ${d.info(r.cwd)}.`);let{config:h}=await W(r.components,m,{silent:r.silent||i,writeFile:!n});if(m=h,n){let g=D("Resolving items.",{silent:r.silent}).start(),y=await Vo(r.components,m,{overwrite:r.overwrite});g.stop(),e.log(Uo(y,r.components,{diff:r.diff,view:r.view}));return}p||await fe(r.components,m,r),u&&await Jo(r.components[0],m);}catch(r){e.break(),la$1(r);}finally{ca$1();}});async function Xa(e$1){let t=await qa();if(!t)return e.break(),la$1(new Error("Failed to fetch registry index.")),[];if(e$1.all)return t.map(o=>o.name).filter(o=>!c$1.some(i=>i.name===o));if(e$1.components?.length)return e$1.components;let{components:r}=await ke({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:t.filter(o=>o.type==="registry:ui"&&!c$1.some(i=>i.name===o.name)).map(o=>({title:o.name,value:o.name,selected:e$1.all?true:e$1.components?.includes(o.name)}))});r?.length||(e.warn("No components selected. Exiting."),e.info(""),process.exit(1));let n=z.array(z.string()).safeParse(r);return n.success?n.data:(e.error(""),la$1(new Error("Something went wrong. Please try again.")),[])}async function Go(e$1){let t={};if(!L.existsSync(e$1.cwd)||!L.existsSync(T__default.resolve(e$1.cwd,"package.json")))return t["1"]=true,{errors:t,config:null};if(!L.existsSync(T__default.resolve(e$1.cwd,"components.json"))){if(await f(e$1.cwd)){let r=await g(e$1.cwd),n=[];for(let o of r){let i=await Ca(T__default.resolve(e$1.cwd,o.name));i?.framework&&i.framework.name!=="manual"&&n.push(o);}n.length>0&&(h("apply --preset <preset>",n,{cwdFlag:"-c"}),process.exit(1));}return t["3"]=true,{errors:t,config:null}}try{let r=await W$1(e$1.cwd);return {errors:t,config:r}}catch{e.break(),e.error(`An invalid ${d.info("components.json")} file was found at ${d.info(e$1.cwd)}.
150
- Before you can apply a preset, you must create a valid ${d.info("components.json")} file by running the ${d.info("init")} command.`),e.error(`Learn more at ${d.info(`${a}/docs/components-json`)}.`),e.break(),process.exit(1);}}var tl=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()}),qo=["theme","font"],rt=class extends Error{constructor(t){super(t),this.name="ApplyOnlyError";}},rr=class extends Error{constructor(t){super(t),this.name="ApplyWorkspaceSyncError";}},Zo=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$1,t)=>{try{let r=tl.parse({...t,cwd:T__default.resolve(t.cwd),positionalPreset:e$1}),n=rl(r),o=Ko(r.only);il({preset:n,only:o});let i=await Go(r);i.errors["1"]&&(e.break(),e.error(`The ${d.info("apply")} command only works in an existing project.`),e.error(`Run ${d.info(Yo(n))} first.`),e.break(),process.exit(1)),i.errors["3"]&&(e.break(),e.error(`No ${d.info("components.json")} found at ${d.info(r.cwd)}.`),e.error(`Run ${d.info(Yo(n))} first.`),e.break(),process.exit(1));let s=i.config;s||process.exit(1);let l=s.rtl??!1,a=await ll(r.cwd);if(!n){let y=Sr({command:"init",template:a,base:$(s.style),rtl:l});await Ir({createUrl:y,followUp:`Then run ${d.info("shadcn apply --preset <preset>")} with the preset code or preset URL from ui.shadcn.com.`,prompt:!r.yes}),process.exit(0);}al(n);let f=o??Ko(nl(n)),m=!f,p=m?await Fa$1(r.cwd):[];if(!r.yes){if(e.break(),f?e.warn(d.warn("Applying the selected preset parts will update your project configuration and styles.")):e.warn(d.warn("Applying a new preset will overwrite existing UI components, fonts, and CSS variables.")),e.warn("Commit or stash your changes before continuing so you can easily go back."),m)if(e.break(),e.log(" The following components will be re-installed:"),p.length)for(let b=0;b<p.length;b+=8)e.log(` - ${p.slice(b,b+8).join(", ")}`);else e.log(" - No installed UI components were detected.");e.break();let{proceed:y}=await ke({type:"confirm",name:"proceed",message:"Would you like to continue?",initial:!1});y||(e.break(),process.exit(1));}await ee(r.cwd);let u=$(s.style),h=ml(n,u,{template:a,rtl:l,only:f?.join(",")}),g=await jo(T__default.resolve(r.cwd,"components.json"),async()=>{let{registryBaseConfig:y,installStyleIndex:b,url:C}=await Fe(h,r.cwd,{registries:s.registries}),I=sl({registryBaseConfig:y,existingConfig:s,only:f});return await et({cwd:r.cwd,yes:!0,force:!1,reinstall:m,defaults:!1,silent:r.silent,isNewProject:!1,cssVariables:!0,installStyleIndex:b,registryBaseConfig:I,existingConfig:s,components:[C,...p]})});await cl(g,{only:f}),e.break(),e.log("Preset applied successfully."),e.break();}catch(r){if(r instanceof rt){for(let n of r.message.split(`
151
- `))e.error(n);e.break(),process.exit(1);}r instanceof Ze&&(e.error(`Could not back up ${d.info("components.json")}. Aborting.`),e.break(),process.exit(1)),r instanceof rr&&(e.error(r.message),e.break(),process.exit(1)),e.break(),la$1(r);}finally{ca$1();}});function rl(e$1){let t=e$1.positionalPreset?.trim(),r=e$1.preset?.trim();return t&&r&&t!==r&&(e.error(`Received two different preset values. Use either the positional preset or ${d.info("--preset")}, or pass the same value to both.`),e.break(),process.exit(1)),r??t}function nl(e){if(!P(e))return;let t=new URL(e);if(t.pathname==="/init")return t.searchParams.get("only")??void 0}function Ko(e){if(!(e===void 0||e===false)){if(e===true)throw new rt(["Missing value for --only.",`Use one or more of: ${qo.join(", ")}.`,"Example: shadcn apply <preset> --only theme,font."].join(`
152
- `));return ol(e)}}function ol(e){let t={theme:"theme",font:"font",fonts:"font"},r=e.split(",").map(o=>o.trim().toLowerCase()).filter(Boolean),n=r.filter(o=>!t[o]);if(!r.length||n.length)throw new rt([`Invalid value for --only: ${e}.`,`Use one or more of: ${qo.join(", ")}.`,"Example: shadcn apply <preset> --only theme,font."].join(`
153
- `));return Array.from(new Set(r.map(o=>t[o])))}function il(e){if(!(!e.only||e.preset))throw new rt(["Missing preset for --only.","Use: shadcn apply <preset> --only theme,font."].join(`
154
- `))}function sl(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:{},n={...e.registryBaseConfig,tailwind:{...t,...r}};return e.existingConfig.menuColor&&(n.menuColor=e.existingConfig.menuColor),e.existingConfig.menuAccent&&(n.menuAccent=e.existingConfig.menuAccent),n}function al(e$1){if(P(e$1)||r(e$1))return;let t=Object.keys(Z);t.includes(e$1)||(e.error(`Invalid preset: ${d.info(e$1)}.
147
+ }`;await wt__default.writeFile(r,o,"utf8");}var Xa=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()}),Go=new Command().name("add").description("add a component to your project").argument("[components...]","names, url or local path to component").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$1,t)=>{try{let r=Xa.parse({components:e$1,...t,cwd:T__default.resolve(t.cwd)});await ee(r.cwd);let n=r.dryRun||r.diff||r.view,o=await X$1(r.cwd);o||(o=ba$1({style:"new-york",resolvedPaths:{cwd:r.cwd}}));let i=!1;if(e$1.length>0){let{config:g,newRegistries:y}=await B(e$1,o,{silent:r.silent,writeFile:!1});o=g,i=y.length>0;}let s,l=!0;if(e$1.length>0){let[g]=await oa$1([e$1[0]],{config:o});if(s=g?.type,l=s!=="registry:theme"&&s!=="registry:style"&&s!=="registry:base",R(g)&&!n){await fe(e$1,o,r);return}if(!r.yes&&!n&&(s==="registry:style"||s==="registry:theme")){e.break();let{confirm:y}=await ke({type:"confirm",name:"confirm",message:d.warn(`You are about to install a new ${s.replace("registry:","")}.
148
+ Existing CSS variables and components will be overwritten. Continue?`)});y||(e.break(),e.log("Installation cancelled."),e.break(),process.exit(1));}}r.components?.length||(r.components=await Qa(r));let a=await Da$1(r.cwd);if(a?.tailwindVersion==="v4"){let g=c$1.filter(y=>r.components?.includes(y.name));g?.length&&(e.break(),g.forEach(y=>{e.warn(d.warn(y.message));}),e.break(),process.exit(1));}let{errors:f,config:m}=await Oo(r),p=!1;if(f["3"]){let{proceed:g}=await ke({type:"confirm",name:"proceed",message:`You need to create a ${d.info("components.json")} file to add components. Proceed?`,initial:!0});g||(e.break(),process.exit(1));let y=qe(a?.framework.name),b=await Ke(),{url:C}=await lt({rtl:!1,base:b,template:y}),{registryBaseConfig:I,installStyleIndex:x,url:R}=await Fe(C,r.cwd);m=await et({cwd:r.cwd,yes:!0,force:!0,defaults:!1,skipPreflight:!1,silent:r.silent&&!i,isNewProject:!1,cssVariables:!0,rtl:!1,installStyleIndex:x,components:[R,...r.components??[]],registryBaseConfig:I}),p=!0;}let u=!1;if(f["1"]){let{projectPath:g,template:y}=await Qt({cwd:r.cwd,force:r.overwrite,components:r.components});g||(e.break(),process.exit(1)),r.cwd=g;let b=await Ke(),{url:C}=await lt({rtl:!1,base:b,template:y}),{registryBaseConfig:I,installStyleIndex:x,url:R}=await Fe(C,r.cwd);m=await et({cwd:r.cwd,yes:!0,force:!0,defaults:!1,skipPreflight:!0,silent:!i&&r.silent,isNewProject:!0,cssVariables:!0,rtl:!1,installStyleIndex:x,components:[R,...r.components??[]],registryBaseConfig:I}),p=!0,u=r.components?.length===1&&!!r.components[0].match(/\/chat\/b\//);}if(!m)throw new Error(`Failed to read config at ${d.info(r.cwd)}.`);let{config:h}=await B(r.components,m,{silent:r.silent||i,writeFile:!n});if(m=h,n){let g=E("Resolving items.",{silent:r.silent}).start(),y=await Do(r.components,m,{overwrite:r.overwrite});g.stop(),e.log(Mo(y,r.components,{diff:r.diff,view:r.view}));return}p||await fe(r.components,m,r),u&&await Ho(r.components[0],m);}catch(r){e.break(),ma(r);}finally{da();}});async function Qa(e$1){let t=await ra$1();if(!t)return e.break(),ma(new Error("Failed to fetch registry index.")),[];if(e$1.all)return t.map(o=>o.name).filter(o=>!c$1.some(i=>i.name===o));if(e$1.components?.length)return e$1.components;let{components:r}=await ke({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:t.filter(o=>o.type==="registry:ui"&&!c$1.some(i=>i.name===o.name)).map(o=>({title:o.name,value:o.name,selected:e$1.all?true:e$1.components?.includes(o.name)}))});r?.length||(e.warn("No components selected. Exiting."),e.info(""),process.exit(1));let n=z.array(z.string()).safeParse(r);return n.success?n.data:(e.error(""),ma(new Error("Something went wrong. Please try again.")),[])}async function Ko(e$1){let t={};if(!L.existsSync(e$1.cwd)||!L.existsSync(T__default.resolve(e$1.cwd,"package.json")))return t["1"]=true,{errors:t,config:null};if(!L.existsSync(T__default.resolve(e$1.cwd,"components.json"))){if(await f(e$1.cwd)){let r=await g(e$1.cwd),n=[];for(let o of r){let i=await Da$1(T__default.resolve(e$1.cwd,o.name));i?.framework&&i.framework.name!=="manual"&&n.push(o);}n.length>0&&(h("apply --preset <preset>",n,{cwdFlag:"-c"}),process.exit(1));}return t["3"]=true,{errors:t,config:null}}try{let r=await X$1(e$1.cwd);return {errors:t,config:r}}catch{e.break(),e.error(`An invalid ${d.info("components.json")} file was found at ${d.info(e$1.cwd)}.
149
+ Before you can apply a preset, you must create a valid ${d.info("components.json")} file by running the ${d.info("init")} command.`),e.error(`Learn more at ${d.info(`${a}/docs/components-json`)}.`),e.break(),process.exit(1);}}var rl=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()}),Zo=["theme","font"],rt=class extends Error{constructor(t){super(t),this.name="ApplyOnlyError";}},rr=class extends Error{constructor(t){super(t),this.name="ApplyWorkspaceSyncError";}},Xo=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$1,t)=>{try{let r=rl.parse({...t,cwd:T__default.resolve(t.cwd),positionalPreset:e$1}),n=nl(r),o=Yo(r.only);sl({preset:n,only:o});let i=await Ko(r);i.errors["1"]&&(e.break(),e.error(`The ${d.info("apply")} command only works in an existing project.`),e.error(`Run ${d.info(qo(n))} first.`),e.break(),process.exit(1)),i.errors["3"]&&(e.break(),e.error(`No ${d.info("components.json")} found at ${d.info(r.cwd)}.`),e.error(`Run ${d.info(qo(n))} first.`),e.break(),process.exit(1));let s=i.config;s||process.exit(1);let l=s.rtl??!1,a=await cl(r.cwd);if(!n){let y=Sr({command:"init",template:a,base:aa$1(s.style),rtl:l});await Ir({createUrl:y,followUp:`Then run ${d.info("shadcn apply --preset <preset>")} with the preset code or preset URL from ui.shadcn.com.`,prompt:!r.yes}),process.exit(0);}ll(n);let f=o??Yo(ol(n)),m=!f,p=m?await Ga$1(r.cwd):[];if(!r.yes){if(e.break(),f?e.warn(d.warn("Applying the selected preset parts will update your project configuration and styles.")):e.warn(d.warn("Applying a new preset will overwrite existing UI components, fonts, and CSS variables.")),e.warn("Commit or stash your changes before continuing so you can easily go back."),m)if(e.break(),e.log(" The following components will be re-installed:"),p.length)for(let b=0;b<p.length;b+=8)e.log(` - ${p.slice(b,b+8).join(", ")}`);else e.log(" - No installed UI components were detected.");e.break();let{proceed:y}=await ke({type:"confirm",name:"proceed",message:"Would you like to continue?",initial:!1});y||(e.break(),process.exit(1));}await ee(r.cwd);let u=aa$1(s.style),h=pl(n,u,{template:a,rtl:l,only:f?.join(",")}),g=await To(T__default.resolve(r.cwd,"components.json"),async()=>{let{registryBaseConfig:y,installStyleIndex:b,url:C}=await Fe(h,r.cwd,{registries:s.registries}),I=al({registryBaseConfig:y,existingConfig:s,only:f});return await et({cwd:r.cwd,yes:!0,force:!1,reinstall:m,defaults:!1,silent:r.silent,isNewProject:!1,cssVariables:!0,installStyleIndex:b,registryBaseConfig:I,existingConfig:s,components:[C,...p]})});await fl(g,{only:f}),e.break(),e.log("Preset applied successfully."),e.break();}catch(r){if(r instanceof rt){for(let n of r.message.split(`
150
+ `))e.error(n);e.break(),process.exit(1);}r instanceof Ze&&(e.error(`Could not back up ${d.info("components.json")}. Aborting.`),e.break(),process.exit(1)),r instanceof rr&&(e.error(r.message),e.break(),process.exit(1)),e.break(),ma(r);}finally{da();}});function nl(e$1){let t=e$1.positionalPreset?.trim(),r=e$1.preset?.trim();return t&&r&&t!==r&&(e.error(`Received two different preset values. Use either the positional preset or ${d.info("--preset")}, or pass the same value to both.`),e.break(),process.exit(1)),r??t}function ol(e){if(!Q$1(e))return;let t=new URL(e);if(t.pathname==="/init")return t.searchParams.get("only")??void 0}function Yo(e){if(!(e===void 0||e===false)){if(e===true)throw new rt(["Missing value for --only.",`Use one or more of: ${Zo.join(", ")}.`,"Example: shadcn apply <preset> --only theme,font."].join(`
151
+ `));return il(e)}}function il(e){let t={theme:"theme",font:"font",fonts:"font"},r=e.split(",").map(o=>o.trim().toLowerCase()).filter(Boolean),n=r.filter(o=>!t[o]);if(!r.length||n.length)throw new rt([`Invalid value for --only: ${e}.`,`Use one or more of: ${Zo.join(", ")}.`,"Example: shadcn apply <preset> --only theme,font."].join(`
152
+ `));return Array.from(new Set(r.map(o=>t[o])))}function sl(e){if(!(!e.only||e.preset))throw new rt(["Missing preset for --only.","Use: shadcn apply <preset> --only theme,font."].join(`
153
+ `))}function al(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:{},n={...e.registryBaseConfig,tailwind:{...t,...r}};return e.existingConfig.menuColor&&(n.menuColor=e.existingConfig.menuColor),e.existingConfig.menuAccent&&(n.menuAccent=e.existingConfig.menuAccent),n}function ll(e$1){if(Q$1(e$1)||r(e$1))return;let t=Object.keys(Z);t.includes(e$1)||(e.error(`Invalid preset: ${d.info(e$1)}.
155
154
  Use one of the available presets: ${t.join(", ")}
156
- or build your own at ${d.info(`${a}/create`)}`),e.break(),process.exit(1));}async function ll(e){let t=await Ca(e);return qe(t?.framework.name)}async function cl(e,t){if(t?.only&&!t.only.includes("theme"))return;let r=await fl(e);if(!r.length)return;let n={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}:{}},o=[];for(let i of r){let s=T__default.resolve(i.resolvedPaths.cwd,"components.json");await L.pathExists(s)&&o.push({configPath:s,existingConfig:await L.readJson(s)});}try{for(let i of o)if(!dt(i.configPath))throw new Ze(i.configPath);for(let i of o)await L.writeJson(i.configPath,{...i.existingConfig,...n,tailwind:{...i.existingConfig.tailwind,...n.tailwind}},{spaces:2});for(let i of o)gt(i.configPath);}catch(i){for(let s of [...o].reverse())Xe(s.configPath);throw new rr(`Failed to sync linked workspace configs.${i instanceof Error?` ${i.message}`:""}`)}}async function fl(e){let t=await Y(e);if(!t)return [];let r=new Map;for(let n of Object.values(t))n.resolvedPaths.cwd!==e.resolvedPaths.cwd&&r.set(n.resolvedPaths.cwd,n);return Array.from(r.values()).sort((n,o)=>n.resolvedPaths.cwd.localeCompare(o.resolvedPaths.cwd))}function ml(e$1,t,r$1={}){if(P(e$1)){let o=new URL(e$1);return o.pathname==="/init"&&e$1.startsWith(a)&&o.searchParams.set("track","1"),o.searchParams.set("base",t),o.searchParams.set("rtl",String(r$1.rtl??false)),r$1.only&&o.searchParams.set("only",r$1.only),o.toString()}if(r(e$1)){let o=q(e$1);return o||(e.error(`Invalid preset code: ${d.info(e$1)}`),e.break(),process.exit(1)),de({...o,base:t,rtl:r$1.rtl??false},{preset:e$1,template:r$1.template,only:r$1.only})}let n=Z[e$1];return de({...n,base:t,rtl:r$1.rtl??n.rtl},{template:r$1.template,only:r$1.only})}function pl(e){return /[^A-Za-z0-9_./:-]/.test(e)?JSON.stringify(e):e}function Yo(e){return e?`shadcn init --preset ${pl(e)}`:"shadcn init"}async function ti(e$1){let t={},r={cwd:e$1.cwd,registryFile:T__default.resolve(e$1.cwd,e$1.registryFile),outputDir:T__default.resolve(e$1.cwd,e$1.outputDir)};return L.existsSync(r.registryFile)||(t["13"]=true),await L.mkdir(r.outputDir,{recursive:true}),Object.keys(t).length>0&&(t["13"]&&(e.break(),e.error(`The path ${d.info(r.registryFile)} does not exist.`)),e.break(),process.exit(1)),{errors:t,resolvePaths:r}}var dl=z.object({cwd:z.string(),registryFile:z.string(),outputDir:z.string()}),ri=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$1,t)=>{try{let r=dl.parse({cwd:T.resolve(t.cwd),registryFile:e$1,outputDir:t.output}),{resolvePaths:n}=await ti(r),o=await Ia$1(n.registryFile,{cwd:n.cwd}),i=o.registry,s=o.usesInclude?T.dirname(n.registryFile):n.cwd,l=Ja$1(o,s,n.cwd),a=D("Building registry...");for(let f of i.items){a.start(`Building ${f.name}...`);let m=await Ka(f,o,s,n.cwd);await wt.writeFile(T.resolve(n.outputDir,`${m.name}.json`),JSON.stringify(m,null,2));}o.usesInclude?await wt.writeFile(T.resolve(n.outputDir,"registry.json"),JSON.stringify(l,null,2)):await wt.copyFile(n.registryFile,T.resolve(n.outputDir,"registry.json")),a.succeed("Building registry.");}catch(r){e.break(),la$1(r);}});var wl=z.object({component:z.string().optional(),yes:z.boolean(),cwd:z.string(),path:z.string().optional()}),oi=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$1,t)=>{try{let r=wl.parse({component:e$1,...t}),n=T__default.resolve(r.cwd);existsSync(n)||(e.error(`The path ${n} does not exist. Please try again.`),process.exit(1));let o=await W$1(n);if(!o){if(await f(n)){let a=await g(n);a.length>0&&(h("diff [component]",a),process.exit(1));}e.warn(`Configuration is missing. Please run ${d.success("init")} to create a components.json file.`),process.exit(1);}let i=await qa();if(i||(la$1(new Error("Failed to fetch registry index.")),process.exit(1)),!r.component){let a=o.resolvedPaths.components,f=i.filter(p=>{for(let u of p.files??[]){let h=T__default.resolve(a,typeof u=="string"?u:u.path);if(existsSync(h))return !0}return !1}),m=[];for(let p of f){let u=await ni(p,o);u.length&&m.push({name:p.name,changes:u});}m.length||(e.info("No updates found."),process.exit(0)),e.info("The following components have updates available:");for(let p of m){e.info(`- ${p.name}`);for(let u of p.changes)e.info(` - ${u.filePath}`);}e.break(),e.info(`Run ${d.success("diff <component>")} to see the changes.`),process.exit(0);}let s=i.find(a=>a.name===r.component);s||(e.error(`The component ${d.success(r.component)} does not exist.`),process.exit(1));let l=await ni(s,o);l.length||(e.info(`No updates found for ${r.component}.`),process.exit(0));for(let a of l)e.info(`- ${a.filePath}`),await bl(a.patch),e.info("");}catch(r){la$1(r);}});async function ni(e,t){let r=await wa$1(t.style,[e]),n=await ua(t.tailwind.baseColor),o=Ae(r);if(!r)return [];let i=[];for(let s of r){let l=await xa$1(t,s);if(l)for(let a of s.files??[]){let f=T__default.resolve(l,typeof a=="string"?a:a.path);if(!existsSync(f))continue;let m=await promises.readFile(f,"utf8");if(typeof a=="string"||!a.content)continue;let p=await I({filename:a.path,raw:a.content,config:t,baseColor:n,supportedFontMarkers:o},[E,F,a$1,H,c$2,g$1,d$1,f$1,G]),u=diffLines(p,m);u.length>1&&i.push({filePath:f,patch:u});}}return i}async function bl(e){e.forEach(t=>{if(t)return t.added?process.stdout.write(d.success(t.value)):t.removed?process.stdout.write(d.error(t.value)):process.stdout.write(t.value)});}var ii="https://ui.shadcn.com",si=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 either 'base' or 'radix'. defaults to project base.").option("--json","output as JSON.",false).action(async(e$1,t)=>{try{let r=T__default.resolve(t.cwd),n=await W$1(r),o=t.base??$(n?.style),i=await qa();i||(e.error("Failed to fetch the registry index."),process.exit(1));let s=[];for(let a of e$1){let f=i.find(p=>p.name===a);f||(e.error(`Component ${d.info(a)} not found in the shadcn registry.`),process.exit(1));let m=f.meta?.links?.[o];if(!m||Object.keys(m).length===0){e.warn(`No documentation links available for ${d.info(a)}.`);continue}s.push({component:a,base:o,links:Rl(m)});}if(t.json){console.log(JSON.stringify({base:o,results:s},null,2));return}let l=Math.max(...s.flatMap(a=>Object.keys(a.links).map(f=>f.length)));for(let{component:a,links:f}of s){e.log(d.info(a));for(let[m,p]of Object.entries(f))e.log(` - ${m.padEnd(l+2)}${p}`);e.break();}}catch(r){la$1(r);}});function Rl(e){return Object.fromEntries(Object.entries(e).map(([t,r])=>[t,r.startsWith(ii)?`${a}${r.slice(ii.length)}`:r]))}var vl=["50","100","200","300","400","500","600","700","800","900","950"],xl=["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"],Sl={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)"}},Il={"220.9 39.3% 11%":"gray","210 20% 98%":"gray","12 76% 61%":"gray","220 70% 50%":"gray"},li=new Map;for(let e of xl)for(let t of vl)li.set(fi(Sl[e][t]),e);function ci(e){let t=fi(e);return t?li.get(t)??Il[t]??null:null}function fi(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(),[n]=r.split(/\s*\/\s*/),o=n.split(/\s+/);if(o.length<3)return t;let i=Br(o[0],{percentage:true}),s=Br(o[1]),l=Br(o[2]);return `oklch(${i} ${s} ${l})`}function Br(e,t={}){return t.percentage&&e.endsWith("%")?ai(Number.parseFloat(e)/100):ai(Number.parseFloat(e))}function ai(e){return Number.isNaN(e)?"":Number(e.toFixed(12)).toString()}var Tl=new Set(c$3),Al=new Set(g$2),Nl=new Set(k),Ol=new Set(l),Vl=new Set(h$1),Dl=new Set(i),Ll=new Set(d$2),_l=new Set(["eb-garamond","instrument-serif","lora","merriweather","playfair-display","noto-serif","roboto-slab"]),Ul=new Set(["jetbrains-mono","geist-mono"]),Ct=["--font-sans","--font-serif","--font-mono"],gi=new Set(Ct),Ml=[...Ct,"--font-heading"],hi=new Set(Ml),mi={appliedBodyVariable:null,variables:{}},Bl={0:"none","0rem":"none","0.45rem":"small","0.625rem":"default","0.875rem":"large"};async function sr(e,t){let r=zl(e.style);if(!r)return {code:null,fallbacks:[],values:null};let n=Z[r],o=await Wl(e.resolvedPaths.tailwindCss),i=or(Tl,e.tailwind.baseColor),s=Gl(o),l=Kl(o),a=or(Al,e.iconLibrary),f=pi(o,mi),m=f??n.font,p$1=ui(o,m,mi);if(!f||!p$1){let I=t;if(t===void 0)try{I=await Ca(e.resolvedPaths.cwd,{configCssFile:e.tailwind.css});}catch{I=null;}let x=await Ql(e,I);f??=pi(o,x),m=f??n.font,p$1??=ui(o,m,x);}let u=ql(p$1??n.fontHeading,m,n.fontHeading),h=Yl(o.rootVars["--radius"]),g=or(Nl,e.menuAccent),y=or(Ol,e.menuColor),b={style:r,baseColor:i??n.baseColor,theme:s??n.theme,chartColor:l??n.chartColor,iconLibrary:a??n.iconLibrary,font:m,fontHeading:u,radius:h??n.radius,menuAccent:g??n.menuAccent,menuColor:y??n.menuColor},C=[!i&&"baseColor",!s&&"theme",!l&&"chartColor",!a&&"iconLibrary",!f&&"font",!p$1&&"fontHeading",!h&&"radius",!g&&"menuAccent",!y&&"menuColor"].filter(Boolean);return {code:p(b),fallbacks:C,values:b}}async function Wl(e){let t={darkVars:{},imports:[],rootVars:{},themeVars:{}};if(!e)return t;try{let r=await promises.readFile(e,"utf8");return Jl(r)}catch{return t}}function zl(e){if(!e)return null;let t=e.replace(/^(base|radix)-/,"");return t in Z?t:null}function Jl(e){let t=P$1.parse(e),r={darkVars:{},imports:[],rootVars:{},themeVars:{}};return t.walkAtRules("import",n=>{let o=Hl(n.params);o&&r.imports.push(o);}),t.walkRules(n=>{let o=n.selector.split(",").map(i=>i.trim()).filter(Boolean);o.includes(":root")&&Wr(n,r.rootVars),o.includes(".dark")&&Wr(n,r.darkVars);}),t.walkAtRules("theme",n=>{n.params.trim()==="inline"&&Wr(n,r.themeVars);}),r}function Wr(e,t){for(let r of e.nodes??[])r.type!=="decl"||!r.prop.startsWith("--")||(t[r.prop]=r.value.trim());}function Hl(e){let t=e.trim();return (t.match(/^url\((['"]?)(.+?)\1\)$/)??t.match(/^(['"])(.+?)\1$/))?.[2]??null}function Gl(e){let t=ir(e.rootVars["--primary"]);if(!t)return null;let r=e.darkVars["--primary"];return r?ir(r)===t?t:null:t}function Kl(e){let t=ir(e.rootVars["--chart-1"]);if(!t)return null;let r=e.darkVars["--chart-1"];return r?ir(r)===t?t:null:t}function ir(e){let t=ci(e);return !t||!Ll.has(t)?null:t}function Yl(e){if(!e)return null;let t=ar(e);return Bl[t]??null}function pi(e,t){for(let r of Ct){let n=wi(e,r);if(n)return n}for(let r of Ct){let n=Zl(e.imports,r);if(n)return n}return Xl(t)}function ui(e,t,r){let n=zr(e,"--font-heading"),o=n?ki(n):null;if(o)return o===t?"inherit":o;let i=r.variables["--font-heading"],s=yi(e,"--font-heading");if(!s)return i&&i!==t?i:null;let l=Jr(s);if(l&&gi.has(l)){let a=wi(e,l),f=r.variables[l],m=a??f??null;return !m||m===t?"inherit":m}return l==="--font-heading"?i?i===t?"inherit":i:null:i&&i!==t?i:null}function ql(e,t,r){let n=e===t?"inherit":e;return Dl.has(n)?n:r}function zr(e,t,r=new Set){if(r.has(t))return null;r.add(t);let n=yi(e,t);if(!n)return null;let o=Jr(n);return o?hi.has(o)?zr(e,o,r):null:n}function yi(e,t){let r=e.themeVars[t];return r&&Jr(r)!==t?r:e.rootVars[t]??r??null}function Jr(e){return ar(e).match(/^var\((--[a-z0-9-]+)\)$/)?.[1]??null}function wi(e,t){let r=zr(e,t),n=r?ki(r):null;return n||null}function Zl(e,t){let r=e.flatMap(n=>{let o=ac(n);return o&&cc(o)===t?[o]:[]});return r.length===1?r[0]:null}function Xl(e){if(e.appliedBodyVariable&&e.variables[e.appliedBodyVariable])return e.variables[e.appliedBodyVariable]??null;let t=Ct.map(r=>e.variables[r]).filter(Boolean).filter((r,n,o)=>o.indexOf(r)===n);return t.length===1?t[0]:null}async function Ql(e,t){let r={appliedBodyVariable:null,variables:{}};if(!t||t.framework.name!=="next-app"&&t.framework.name!=="next-pages")return r;let n=ec(e,t);if(!n)return r;try{let o=await promises.readFile(n,"utf8");return tc(o,t.framework.name)}catch{return r}}function ec(e,t){let r=t.isTsx?"tsx":"jsx",n=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 o of n){let i=T__default.join(e.resolvedPaths.cwd,o);if(existsSync(i))return i}return null}function tc(e,t){let n=new Project({compilerOptions:{}}).createSourceFile("font-source.tsx",e,{overwrite:true,scriptKind:ScriptKind.TSX}),o=new Map;for(let l of n.getImportDeclarations())if(l.getModuleSpecifierValue()==="next/font/google")for(let a of l.getNamedImports()){let f=a.getName(),m=a.getAliasNode()?.getText()??f,p=lc(f);p&&o.set(m,p);}let i={},s=new Map;for(let l of n.getVariableStatements())for(let a of l.getDeclarations()){let f=a.getInitializer();if(!f?.isKind(SyntaxKind.CallExpression))continue;let m=o.get(f.getExpression().getText());if(!m)continue;let p=rc(f);p&&(s.set(a.getName(),p),i[p]=m);}return {appliedBodyVariable:nc(n,s,t),variables:i}}function rc(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 n=r.getInitializer();if(!n)return null;let o=bi(n.getText());return hi.has(o)?o:null}function nc(e,t,r){let n=e.getDescendantsOfKind(SyntaxKind.JsxOpeningElement).filter(i=>r==="next-app"?i.getTagNameNode().getText()==="html":true),o=new Set;for(let i of n){let s=i.getAttribute("className");if(!s||!Node.isJsxAttribute(s))continue;let l=s.getInitializer();if(!l)continue;let a=oc(l,t),f=ic(l);if(f&&a.includes(f))return f;a.length===1&&o.add(a[0]);}return o.size===1?Array.from(o)[0]:null}function oc(e,t){let r=Node.isJsxExpression(e)?[e.getExpression(),...e.getDescendantsOfKind(SyntaxKind.PropertyAccessExpression)].filter(Boolean):[],n=new Set;for(let o of r){if(!o||!Node.isPropertyAccessExpression(o)||o.getName()!=="variable")continue;let i=o.getExpression().getText(),s=t.get(i);s&&gi.has(s)&&n.add(s);}return Array.from(n)}function ic(e){let t=sc(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 sc(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 bi(e){return e.replace(/^['"]|['"]$/g,"")}function ki(e){if(!e)return null;let t=bi(e.split(",")[0]?.trim()??"").replace(/\s+variable$/i,"").trim();return t?Hr(t.replace(/\s+/g,"-")):null}function ac(e){if(!e)return null;let t=ar(e),r="@fontsource-variable/";return t.startsWith(r)?Hr(t.slice(r.length)):null}function lc(e){return e?Hr(e.replace(/_/g,"-")):null}function Hr(e){let t=ar(e);return Vl.has(t)?t:null}function cc(e){return Ul.has(e)?"--font-mono":_l.has(e)?"--font-serif":"--font-sans"}function ar(e){return e?e.trim().replace(/\s+/g," ").replace(/\s*,\s*/g,", ").replace(/"/g,"'").toLowerCase():""}function or(e,t){return t&&e.has(t)?t:null}var Ri=`${a}/code/apps/v4/registry/bases`,vi=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=T__default.resolve(e.cwd);if(!existsSync(T__default.resolve(t,"components.json"))&&await f(t)){let l=await g(t);l.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:l.map(a=>a.name)},null,2)):h("info",l),process.exit(1));}let r=await Ca(t),n=await W$1(t),o=await Fa$1(t),i=$(n?.style),s=await uc(r,n,o,i);if(e.json){console.log(JSON.stringify(s,null,2));return}dc(s);}catch(t){la$1(t);}});function pc(e){if(!e)return {};let t={};for(let[r,n]of Object.entries(e))t[r]=typeof n=="string"?n:n.url;return t}async function uc(e,t,r,n){let o=t?await sr(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:n,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:pc(t.registries)}:null,preset:o,components:r,links:{docs:`${a}/docs`,components:`${a}/docs/components/${n}/[component].md`,ui:`${Ri}/${n}/ui/[component].tsx`,examples:`${Ri}/${n}/examples/[component]-example.tsx`,schema:`${a}/schema.json`}}}function dc(e$1){e.log(d.info("Project")),e$1.project?Re({framework:`${e$1.project.framework} (${e$1.project.frameworkName})`,frameworkVersion:e$1.project.frameworkVersion??"-",srcDirectory:e$1.project.srcDirectory?"Yes":"No",rsc:e$1.project.rsc?"Yes":"No",typescript:e$1.project.typescript?"Yes":"No",tailwindVersion:e$1.project.tailwindVersion??"-",tailwindConfig:e$1.project.tailwindConfig??"-",tailwindCss:e$1.project.tailwindCss??"-",importAlias:e$1.project.importAlias??"-"}):e.log(" No project info detected."),e.break(),e.log(d.info("Configuration")),e$1.config?(Re({style:e$1.config.style,base:e$1.config.base,rsc:e$1.config.rsc?"Yes":"No",typescript:e$1.config.typescript?"Yes":"No",iconLibrary:e$1.config.iconLibrary??"-",rtl:e$1.config.rtl?"Yes":"No",menuColor:e$1.config.menuColor??"-",menuAccent:e$1.config.menuAccent??"-"}),e.break(),lr(e$1.preset),e.break(),e.log(d.info("Aliases")),Re({components:e$1.config.aliases.components,utils:e$1.config.aliases.utils,ui:e$1.config.aliases.ui??"-",lib:e$1.config.aliases.lib??"-",hooks:e$1.config.aliases.hooks??"-"}),e.break(),e.log(d.info("Resolved Paths")),Re({cwd:e$1.config.resolvedPaths.cwd,tailwindConfig:e$1.config.resolvedPaths.tailwindConfig??"-",tailwindCss:e$1.config.resolvedPaths.tailwindCss??"-",utils:e$1.config.resolvedPaths.utils,components:e$1.config.resolvedPaths.components,lib:e$1.config.resolvedPaths.lib,hooks:e$1.config.resolvedPaths.hooks,ui:e$1.config.resolvedPaths.ui}),Object.keys(e$1.config.registries).length>0&&(e.break(),e.log("registries:"),Re(e$1.config.registries))):e.log(" No components.json found."),e.break(),e.log(d.info("Installed Components")),e$1.components.length>0?e.log(` ${e$1.components.join(", ")}`):e.log(" No components installed."),e.break(),e.log(d.info("Links")),Re(e$1.links),e.break();}function lr(e$1,t={}){if(e.log(d.info("Preset")),!e$1?.code)Re({code:"-"});else {let r=e$1.fallbacks??[],n=(o,i)=>{let s=r.includes(o)?"*":"";return `${i??"-"}${s}`};Re({code:e$1.code,version:e$1.code[0],style:e$1.values?.style??"-",baseColor:n("baseColor",e$1.values?.baseColor),theme:n("theme",e$1.values?.theme),chartColor:n("chartColor",e$1.values?.chartColor),iconLibrary:n("iconLibrary",e$1.values?.iconLibrary),font:n("font",e$1.values?.font),fontHeading:n("fontHeading",e$1.values?.fontHeading),radius:n("radius",e$1.values?.radius),menuAccent:n("menuAccent",e$1.values?.menuAccent),menuColor:n("menuColor",e$1.values?.menuColor),url:`${a}/create?preset=${e$1.code}`}),r.length>0&&(e.log(""),e.log(t.fallbackNote??" * Uses preset defaults for values not available as options on shadcn/create."));}}function Re(e$1){let t=Math.max(...Object.keys(e$1).map(r=>r.length));for(let[r,n]of Object.entries(e$1))e.log(` ${r.padEnd(t+2)}${n}`);}var _e="latest",fr=[{name:"claude",label:"Claude Code",configPath:".mcp.json",config:{mcpServers:{shadcn:{command:"npx",args:[`shadcn@${_e}`,"mcp"]}}}},{name:"cursor",label:"Cursor",configPath:".cursor/mcp.json",config:{mcpServers:{shadcn:{command:"npx",args:[`shadcn@${_e}`,"mcp"]}}}},{name:"vscode",label:"VS Code",configPath:".vscode/mcp.json",config:{servers:{shadcn:{command:"npx",args:[`shadcn@${_e}`,"mcp"]}}}},{name:"codex",label:"Codex",configPath:".codex/config.toml",config:`[mcp_servers.shadcn]
155
+ or build your own at ${d.info(`${a}/create`)}`),e.break(),process.exit(1));}async function cl(e){let t=await Da$1(e);return qe(t?.framework.name)}async function fl(e,t){if(t?.only&&!t.only.includes("theme"))return;let r=await ml(e);if(!r.length)return;let n={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}:{}},o=[];for(let i of r){let s=T__default.resolve(i.resolvedPaths.cwd,"components.json");await L.pathExists(s)&&o.push({configPath:s,existingConfig:await L.readJson(s)});}try{for(let i of o)if(!dt(i.configPath))throw new Ze(i.configPath);for(let i of o)await L.writeJson(i.configPath,{...i.existingConfig,...n,tailwind:{...i.existingConfig.tailwind,...n.tailwind}},{spaces:2});for(let i of o)gt(i.configPath);}catch(i){for(let s of [...o].reverse())Xe(s.configPath);throw new rr(`Failed to sync linked workspace configs.${i instanceof Error?` ${i.message}`:""}`)}}async function ml(e){let t=await Z$1(e);if(!t)return [];let r=new Map;for(let n of Object.values(t))n.resolvedPaths.cwd!==e.resolvedPaths.cwd&&r.set(n.resolvedPaths.cwd,n);return Array.from(r.values()).sort((n,o)=>n.resolvedPaths.cwd.localeCompare(o.resolvedPaths.cwd))}function pl(e$1,t,r$1={}){if(Q$1(e$1)){let o=new URL(e$1);return o.pathname==="/init"&&e$1.startsWith(a)&&o.searchParams.set("track","1"),o.searchParams.set("base",t),o.searchParams.set("rtl",String(r$1.rtl??false)),r$1.only&&o.searchParams.set("only",r$1.only),o.toString()}if(r(e$1)){let o=q(e$1);return o||(e.error(`Invalid preset code: ${d.info(e$1)}`),e.break(),process.exit(1)),de({...o,base:t,rtl:r$1.rtl??false},{preset:e$1,template:r$1.template,only:r$1.only})}let n=Z[e$1];return de({...n,base:t,rtl:r$1.rtl??n.rtl},{template:r$1.template,only:r$1.only})}function ul(e){return /[^A-Za-z0-9_./:-]/.test(e)?JSON.stringify(e):e}function qo(e){return e?`shadcn init --preset ${ul(e)}`:"shadcn init"}async function ri(e$1){let t={},r={cwd:e$1.cwd,registryFile:T__default.resolve(e$1.cwd,e$1.registryFile),outputDir:T__default.resolve(e$1.cwd,e$1.outputDir)};return L.existsSync(r.registryFile)||(t["13"]=true),await L.mkdir(r.outputDir,{recursive:true}),Object.keys(t).length>0&&(t["13"]&&(e.break(),e.error(`The path ${d.info(r.registryFile)} does not exist.`)),e.break(),process.exit(1)),{errors:t,resolvePaths:r}}var gl=z.object({cwd:z.string(),registryFile:z.string(),outputDir:z.string()}),ni=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$1,t)=>{try{let r=gl.parse({cwd:T.resolve(t.cwd),registryFile:e$1,outputDir:t.output}),{resolvePaths:n}=await ri(r),o=await Ja$1(n.registryFile,{cwd:n.cwd}),i=o.registry,s=o.usesInclude?T.dirname(n.registryFile):n.cwd,l=Ka$1(o,s,n.cwd),a=E("Building registry...");for(let f of i.items){a.start(`Building ${f.name}...`);let m=await La$1(f,o,s,n.cwd);await wt.writeFile(T.resolve(n.outputDir,`${m.name}.json`),JSON.stringify(m,null,2));}o.usesInclude?await wt.writeFile(T.resolve(n.outputDir,"registry.json"),JSON.stringify(l,null,2)):await wt.copyFile(n.registryFile,T.resolve(n.outputDir,"registry.json")),a.succeed("Building registry.");}catch(r){e.break(),ma(r);}});var bl=z.object({component:z.string().optional(),yes:z.boolean(),cwd:z.string(),path:z.string().optional()}),ii=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$1,t)=>{try{let r=bl.parse({component:e$1,...t}),n=T__default.resolve(r.cwd);existsSync(n)||(e.error(`The path ${n} does not exist. Please try again.`),process.exit(1));let o=await X$1(n);if(!o){if(await f(n)){let a=await g(n);a.length>0&&(h("diff [component]",a),process.exit(1));}e.warn(`Configuration is missing. Please run ${d.success("init")} to create a components.json file.`),process.exit(1);}let i=await ra$1();if(i||(ma(new Error("Failed to fetch registry index.")),process.exit(1)),!r.component){let a=o.resolvedPaths.components,f=i.filter(p=>{for(let u of p.files??[]){let h=T__default.resolve(a,typeof u=="string"?u:u.path);if(existsSync(h))return !0}return !1}),m=[];for(let p of f){let u=await oi(p,o);u.length&&m.push({name:p.name,changes:u});}m.length||(e.info("No updates found."),process.exit(0)),e.info("The following components have updates available:");for(let p of m){e.info(`- ${p.name}`);for(let u of p.changes)e.info(` - ${u.filePath}`);}e.break(),e.info(`Run ${d.success("diff <component>")} to see the changes.`),process.exit(0);}let s=i.find(a=>a.name===r.component);s||(e.error(`The component ${d.success(r.component)} does not exist.`),process.exit(1));let l=await oi(s,o);l.length||(e.info(`No updates found for ${r.component}.`),process.exit(0));for(let a of l)e.info(`- ${a.filePath}`),await kl(a.patch),e.info("");}catch(r){ma(r);}});async function oi(e,t){let r=await xa$1(t.style,[e]),n=await va(t.tailwind.baseColor),o=Ae(r);if(!r)return [];let i=[];for(let s of r){let l=await ya$1(t,s);if(l)for(let a of s.files??[]){let f=T__default.resolve(l,typeof a=="string"?a:a.path);if(!existsSync(f))continue;let m=await promises.readFile(f,"utf8");if(typeof a=="string"||!a.content)continue;let p=await J({filename:a.path,raw:a.content,config:t,baseColor:n,supportedFontMarkers:o},[F,G,a$1,I,c$2,g$1,d$1,f$1,H]),u=diffLines(p,m);u.length>1&&i.push({filePath:f,patch:u});}}return i}async function kl(e){e.forEach(t=>{if(t)return t.added?process.stdout.write(d.success(t.value)):t.removed?process.stdout.write(d.error(t.value)):process.stdout.write(t.value)});}var si="https://ui.shadcn.com",ai=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 either 'base' or 'radix'. defaults to project base.").option("--json","output as JSON.",false).action(async(e$1,t)=>{try{let r=T__default.resolve(t.cwd),n=await X$1(r),o=t.base??aa$1(n?.style),i=await ra$1();i||(e.error("Failed to fetch the registry index."),process.exit(1));let s=[];for(let a of e$1){let f=i.find(p=>p.name===a);f||(e.error(`Component ${d.info(a)} not found in the shadcn registry.`),process.exit(1));let m=f.meta?.links?.[o];if(!m||Object.keys(m).length===0){e.warn(`No documentation links available for ${d.info(a)}.`);continue}s.push({component:a,base:o,links:vl(m)});}if(t.json){console.log(JSON.stringify({base:o,results:s},null,2));return}let l=Math.max(...s.flatMap(a=>Object.keys(a.links).map(f=>f.length)));for(let{component:a,links:f}of s){e.log(d.info(a));for(let[m,p]of Object.entries(f))e.log(` - ${m.padEnd(l+2)}${p}`);e.break();}}catch(r){ma(r);}});function vl(e){return Object.fromEntries(Object.entries(e).map(([t,r])=>[t,r.startsWith(si)?`${a}${r.slice(si.length)}`:r]))}var xl=["50","100","200","300","400","500","600","700","800","900","950"],Sl=["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"],Il={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)"}},Pl={"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 Sl)for(let t of xl)ci.set(mi(Il[e][t]),e);function fi(e){let t=mi(e);return t?ci.get(t)??Pl[t]??null:null}function mi(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(),[n]=r.split(/\s*\/\s*/),o=n.split(/\s+/);if(o.length<3)return t;let i=Wr(o[0],{percentage:true}),s=Wr(o[1]),l=Wr(o[2]);return `oklch(${i} ${s} ${l})`}function Wr(e,t={}){return t.percentage&&e.endsWith("%")?li(Number.parseFloat(e)/100):li(Number.parseFloat(e))}function li(e){return Number.isNaN(e)?"":Number(e.toFixed(12)).toString()}var Al=new Set(c$3),Nl=new Set(g$2),Ol=new Set(k),Vl=new Set(l),Dl=new Set(h$1),Ll=new Set(i),_l=new Set(d$2),Ul=new Set(["eb-garamond","instrument-serif","lora","merriweather","playfair-display","noto-serif","roboto-slab"]),Ml=new Set(["jetbrains-mono","geist-mono"]),Ct=["--font-sans","--font-serif","--font-mono"],hi=new Set(Ct),Wl=[...Ct,"--font-heading"],yi=new Set(Wl),pi={appliedBodyVariable:null,variables:{}},Bl={0:"none","0rem":"none","0.45rem":"small","0.625rem":"default","0.875rem":"large"};async function sr(e,t){let r=Jl(e.style);if(!r)return {code:null,fallbacks:[],values:null};let n=Z[r],o=await zl(e.resolvedPaths.tailwindCss),i=or(Al,e.tailwind.baseColor),s=Kl(o),l=Yl(o),a=or(Nl,e.iconLibrary),f=ui(o,pi),m=f??n.font,p$1=di(o,m,pi);if(!f||!p$1){let I=t;if(t===void 0)try{I=await Da$1(e.resolvedPaths.cwd,{configCssFile:e.tailwind.css});}catch{I=null;}let x=await ec(e,I);f??=ui(o,x),m=f??n.font,p$1??=di(o,m,x);}let u=Zl(p$1??n.fontHeading,m,n.fontHeading),h=ql(o.rootVars["--radius"]),g=or(Ol,e.menuAccent),y=or(Vl,e.menuColor),b={style:r,baseColor:i??n.baseColor,theme:s??n.theme,chartColor:l??n.chartColor,iconLibrary:a??n.iconLibrary,font:m,fontHeading:u,radius:h??n.radius,menuAccent:g??n.menuAccent,menuColor:y??n.menuColor},C=[!i&&"baseColor",!s&&"theme",!l&&"chartColor",!a&&"iconLibrary",!f&&"font",!p$1&&"fontHeading",!h&&"radius",!g&&"menuAccent",!y&&"menuColor"].filter(Boolean);return {code:p(b),fallbacks:C,values:b}}async function zl(e){let t={darkVars:{},imports:[],rootVars:{},themeVars:{}};if(!e)return t;try{let r=await promises.readFile(e,"utf8");return Hl(r)}catch{return t}}function Jl(e){if(!e)return null;let t=e.replace(/^(base|radix)-/,"");return t in Z?t:null}function Hl(e){let t=P$1.parse(e),r={darkVars:{},imports:[],rootVars:{},themeVars:{}};return t.walkAtRules("import",n=>{let o=Gl(n.params);o&&r.imports.push(o);}),t.walkRules(n=>{let o=n.selector.split(",").map(i=>i.trim()).filter(Boolean);o.includes(":root")&&Br(n,r.rootVars),o.includes(".dark")&&Br(n,r.darkVars);}),t.walkAtRules("theme",n=>{n.params.trim()==="inline"&&Br(n,r.themeVars);}),r}function Br(e,t){for(let r of e.nodes??[])r.type!=="decl"||!r.prop.startsWith("--")||(t[r.prop]=r.value.trim());}function Gl(e){let t=e.trim();return (t.match(/^url\((['"]?)(.+?)\1\)$/)??t.match(/^(['"])(.+?)\1$/))?.[2]??null}function Kl(e){let t=ir(e.rootVars["--primary"]);if(!t)return null;let r=e.darkVars["--primary"];return r?ir(r)===t?t:null:t}function Yl(e){let t=ir(e.rootVars["--chart-1"]);if(!t)return null;let r=e.darkVars["--chart-1"];return r?ir(r)===t?t:null:t}function ir(e){let t=fi(e);return !t||!_l.has(t)?null:t}function ql(e){if(!e)return null;let t=ar(e);return Bl[t]??null}function ui(e,t){for(let r of Ct){let n=bi(e,r);if(n)return n}for(let r of Ct){let n=Xl(e.imports,r);if(n)return n}return Ql(t)}function di(e,t,r){let n=zr(e,"--font-heading"),o=n?Ci(n):null;if(o)return o===t?"inherit":o;let i=r.variables["--font-heading"],s=wi(e,"--font-heading");if(!s)return i&&i!==t?i:null;let l=Jr(s);if(l&&hi.has(l)){let a=bi(e,l),f=r.variables[l],m=a??f??null;return !m||m===t?"inherit":m}return l==="--font-heading"?i?i===t?"inherit":i:null:i&&i!==t?i:null}function Zl(e,t,r){let n=e===t?"inherit":e;return Ll.has(n)?n:r}function zr(e,t,r=new Set){if(r.has(t))return null;r.add(t);let n=wi(e,t);if(!n)return null;let o=Jr(n);return o?yi.has(o)?zr(e,o,r):null:n}function wi(e,t){let r=e.themeVars[t];return r&&Jr(r)!==t?r:e.rootVars[t]??r??null}function Jr(e){return ar(e).match(/^var\((--[a-z0-9-]+)\)$/)?.[1]??null}function bi(e,t){let r=zr(e,t),n=r?Ci(r):null;return n||null}function Xl(e,t){let r=e.flatMap(n=>{let o=lc(n);return o&&fc(o)===t?[o]:[]});return r.length===1?r[0]:null}function Ql(e){if(e.appliedBodyVariable&&e.variables[e.appliedBodyVariable])return e.variables[e.appliedBodyVariable]??null;let t=Ct.map(r=>e.variables[r]).filter(Boolean).filter((r,n,o)=>o.indexOf(r)===n);return t.length===1?t[0]:null}async function ec(e,t){let r={appliedBodyVariable:null,variables:{}};if(!t||t.framework.name!=="next-app"&&t.framework.name!=="next-pages")return r;let n=tc(e,t);if(!n)return r;try{let o=await promises.readFile(n,"utf8");return rc(o,t.framework.name)}catch{return r}}function tc(e,t){let r=t.isTsx?"tsx":"jsx",n=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 o of n){let i=T__default.join(e.resolvedPaths.cwd,o);if(existsSync(i))return i}return null}function rc(e,t){let n=new Project({compilerOptions:{}}).createSourceFile("font-source.tsx",e,{overwrite:true,scriptKind:ScriptKind.TSX}),o=new Map;for(let l of n.getImportDeclarations())if(l.getModuleSpecifierValue()==="next/font/google")for(let a of l.getNamedImports()){let f=a.getName(),m=a.getAliasNode()?.getText()??f,p=cc(f);p&&o.set(m,p);}let i={},s=new Map;for(let l of n.getVariableStatements())for(let a of l.getDeclarations()){let f=a.getInitializer();if(!f?.isKind(SyntaxKind.CallExpression))continue;let m=o.get(f.getExpression().getText());if(!m)continue;let p=nc(f);p&&(s.set(a.getName(),p),i[p]=m);}return {appliedBodyVariable:oc(n,s,t),variables:i}}function nc(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 n=r.getInitializer();if(!n)return null;let o=ki(n.getText());return yi.has(o)?o:null}function oc(e,t,r){let n=e.getDescendantsOfKind(SyntaxKind.JsxOpeningElement).filter(i=>r==="next-app"?i.getTagNameNode().getText()==="html":true),o=new Set;for(let i of n){let s=i.getAttribute("className");if(!s||!Node.isJsxAttribute(s))continue;let l=s.getInitializer();if(!l)continue;let a=ic(l,t),f=sc(l);if(f&&a.includes(f))return f;a.length===1&&o.add(a[0]);}return o.size===1?Array.from(o)[0]:null}function ic(e,t){let r=Node.isJsxExpression(e)?[e.getExpression(),...e.getDescendantsOfKind(SyntaxKind.PropertyAccessExpression)].filter(Boolean):[],n=new Set;for(let o of r){if(!o||!Node.isPropertyAccessExpression(o)||o.getName()!=="variable")continue;let i=o.getExpression().getText(),s=t.get(i);s&&hi.has(s)&&n.add(s);}return Array.from(n)}function sc(e){let t=ac(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 ac(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 ki(e){return e.replace(/^['"]|['"]$/g,"")}function Ci(e){if(!e)return null;let t=ki(e.split(",")[0]?.trim()??"").replace(/\s+variable$/i,"").trim();return t?Hr(t.replace(/\s+/g,"-")):null}function lc(e){if(!e)return null;let t=ar(e),r="@fontsource-variable/";return t.startsWith(r)?Hr(t.slice(r.length)):null}function cc(e){return e?Hr(e.replace(/_/g,"-")):null}function Hr(e){let t=ar(e);return Dl.has(t)?t:null}function fc(e){return Ml.has(e)?"--font-mono":Ul.has(e)?"--font-serif":"--font-sans"}function ar(e){return e?e.trim().replace(/\s+/g," ").replace(/\s*,\s*/g,", ").replace(/"/g,"'").toLowerCase():""}function or(e,t){return t&&e.has(t)?t:null}var vi=`${a}/code/apps/v4/registry/bases`,xi=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=T__default.resolve(e.cwd);if(!existsSync(T__default.resolve(t,"components.json"))&&await f(t)){let l=await g(t);l.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:l.map(a=>a.name)},null,2)):h("info",l),process.exit(1));}let r=await Da$1(t),n=await X$1(t),o=await Ga$1(t),i=aa$1(n?.style),s=await dc(r,n,o,i);if(e.json){console.log(JSON.stringify(s,null,2));return}gc(s);}catch(t){ma(t);}});function uc(e){if(!e)return {};let t={};for(let[r,n]of Object.entries(e))t[r]=typeof n=="string"?n:n.url;return t}async function dc(e,t,r,n){let o=t?await sr(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:n,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:uc(t.registries)}:null,preset:o,components:r,links:{docs:`${a}/docs`,components:`${a}/docs/components/${n}/[component].md`,ui:`${vi}/${n}/ui/[component].tsx`,examples:`${vi}/${n}/examples/[component]-example.tsx`,schema:`${a}/schema.json`}}}function gc(e$1){e.log(d.info("Project")),e$1.project?Re({framework:`${e$1.project.framework} (${e$1.project.frameworkName})`,frameworkVersion:e$1.project.frameworkVersion??"-",srcDirectory:e$1.project.srcDirectory?"Yes":"No",rsc:e$1.project.rsc?"Yes":"No",typescript:e$1.project.typescript?"Yes":"No",tailwindVersion:e$1.project.tailwindVersion??"-",tailwindConfig:e$1.project.tailwindConfig??"-",tailwindCss:e$1.project.tailwindCss??"-",importAlias:e$1.project.importAlias??"-"}):e.log(" No project info detected."),e.break(),e.log(d.info("Configuration")),e$1.config?(Re({style:e$1.config.style,base:e$1.config.base,rsc:e$1.config.rsc?"Yes":"No",typescript:e$1.config.typescript?"Yes":"No",iconLibrary:e$1.config.iconLibrary??"-",rtl:e$1.config.rtl?"Yes":"No",menuColor:e$1.config.menuColor??"-",menuAccent:e$1.config.menuAccent??"-"}),e.break(),lr(e$1.preset),e.break(),e.log(d.info("Aliases")),Re({components:e$1.config.aliases.components,utils:e$1.config.aliases.utils,ui:e$1.config.aliases.ui??"-",lib:e$1.config.aliases.lib??"-",hooks:e$1.config.aliases.hooks??"-"}),e.break(),e.log(d.info("Resolved Paths")),Re({cwd:e$1.config.resolvedPaths.cwd,tailwindConfig:e$1.config.resolvedPaths.tailwindConfig??"-",tailwindCss:e$1.config.resolvedPaths.tailwindCss??"-",utils:e$1.config.resolvedPaths.utils,components:e$1.config.resolvedPaths.components,lib:e$1.config.resolvedPaths.lib,hooks:e$1.config.resolvedPaths.hooks,ui:e$1.config.resolvedPaths.ui}),Object.keys(e$1.config.registries).length>0&&(e.break(),e.log("registries:"),Re(e$1.config.registries))):e.log(" No components.json found."),e.break(),e.log(d.info("Installed Components")),e$1.components.length>0?e.log(` ${e$1.components.join(", ")}`):e.log(" No components installed."),e.break(),e.log(d.info("Links")),Re(e$1.links),e.break();}function lr(e$1,t={}){if(e.log(d.info("Preset")),!e$1?.code)Re({code:"-"});else {let r=e$1.fallbacks??[],n=(o,i)=>{let s=r.includes(o)?"*":"";return `${i??"-"}${s}`};Re({code:e$1.code,version:e$1.code[0],style:e$1.values?.style??"-",baseColor:n("baseColor",e$1.values?.baseColor),theme:n("theme",e$1.values?.theme),chartColor:n("chartColor",e$1.values?.chartColor),iconLibrary:n("iconLibrary",e$1.values?.iconLibrary),font:n("font",e$1.values?.font),fontHeading:n("fontHeading",e$1.values?.fontHeading),radius:n("radius",e$1.values?.radius),menuAccent:n("menuAccent",e$1.values?.menuAccent),menuColor:n("menuColor",e$1.values?.menuColor),url:`${a}/create?preset=${e$1.code}`}),r.length>0&&(e.log(""),e.log(t.fallbackNote??" * Uses preset defaults for values not available as options on shadcn/create."));}}function Re(e$1){let t=Math.max(...Object.keys(e$1).map(r=>r.length));for(let[r,n]of Object.entries(e$1))e.log(` ${r.padEnd(t+2)}${n}`);}var _e="latest",fr=[{name:"claude",label:"Claude Code",configPath:".mcp.json",config:{mcpServers:{shadcn:{command:"npx",args:[`shadcn@${_e}`,"mcp"]}}}},{name:"cursor",label:"Cursor",configPath:".cursor/mcp.json",config:{mcpServers:{shadcn:{command:"npx",args:[`shadcn@${_e}`,"mcp"]}}}},{name:"vscode",label:"VS Code",configPath:".vscode/mcp.json",config:{servers:{shadcn:{command:"npx",args:[`shadcn@${_e}`,"mcp"]}}}},{name:"codex",label:"Codex",configPath:".codex/config.toml",config:`[mcp_servers.shadcn]
157
156
  command = "npx"
158
157
  args = ["shadcn@${_e}", "mcp"]
159
- `},{name:"opencode",label:"OpenCode",configPath:"opencode.json",config:{$schema:"https://opencode.ai/config.json",mcp:{shadcn:{type:"local",command:["npx",`shadcn@${_e}`,"mcp"],enabled:true}}}}],cr=[`shadcn@${_e}`],Kr=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$1=>{try{await ee(e$1.cwd);let t=new StdioServerTransport;await a$2.connect(t);}catch(t){e.break(),la$1(t);}}),kc=Gr.object({client:Gr.enum(["claude","cursor","vscode","codex","opencode"]),cwd:Gr.string()});Kr.command("init").description("Initialize MCP configuration for your client").option("--client <client>",`MCP client (${fr.map(e=>e.name).join(", ")})`).action(async(e$1,t)=>{try{let n=(t.parent?.opts()||{}).cwd||process.cwd(),o=e$1.client;if(!o){let f=await ke({type:"select",name:"client",message:"Which MCP client are you using?",choices:fr.map(m=>({title:m.label,value:m.name}))});f.client||(e.break(),process.exit(1)),o=f.client;}let i=kc.parse({client:o,cwd:n}),s=await W$1(i.cwd);if(i.client==="codex"){if(s)await _([],cr,s,{silent:!1});else {let f=await ia$1(i.cwd),m=f==="npm"?"install":"add",p=f==="npm"?"--save-dev":"-D",u=D("Installing dependencies...").start();await execa(f,[m,p,...cr],{cwd:i.cwd}),u.succeed("Installing dependencies.");}e.break(),e.log("To configure the shadcn MCP server in Codex:"),e.break(),e.log(`1. Open or create the file ${d.info("~/.codex/config.toml")}`),e.log("2. Add the following configuration:"),e.log(),e.info(`[mcp_servers.shadcn]
158
+ `},{name:"opencode",label:"OpenCode",configPath:"opencode.json",config:{$schema:"https://opencode.ai/config.json",mcp:{shadcn:{type:"local",command:["npx",`shadcn@${_e}`,"mcp"],enabled:true}}}}],cr=[`shadcn@${_e}`],Kr=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$1=>{try{await ee(e$1.cwd);let t=new StdioServerTransport;await a$2.connect(t);}catch(t){e.break(),ma(t);}}),Cc=Gr.object({client:Gr.enum(["claude","cursor","vscode","codex","opencode"]),cwd:Gr.string()});Kr.command("init").description("Initialize MCP configuration for your client").option("--client <client>",`MCP client (${fr.map(e=>e.name).join(", ")})`).action(async(e$1,t)=>{try{let n=(t.parent?.opts()||{}).cwd||process.cwd(),o=e$1.client;if(!o){let f=await ke({type:"select",name:"client",message:"Which MCP client are you using?",choices:fr.map(m=>({title:m.label,value:m.name}))});f.client||(e.break(),process.exit(1)),o=f.client;}let i=Cc.parse({client:o,cwd:n}),s=await X$1(i.cwd);if(i.client==="codex"){if(s)await _([],cr,s,{silent:!1});else {let f=await ja$1(i.cwd),m=f==="npm"?"install":"add",p=f==="npm"?"--save-dev":"-D",u=E("Installing dependencies...").start();await execa(f,[m,p,...cr],{cwd:i.cwd}),u.succeed("Installing dependencies.");}e.break(),e.log("To configure the shadcn MCP server in Codex:"),e.break(),e.log(`1. Open or create the file ${d.info("~/.codex/config.toml")}`),e.log("2. Add the following configuration:"),e.log(),e.info(`[mcp_servers.shadcn]
160
159
  command = "npx"
161
- args = ["shadcn@${_e}", "mcp"]`),e.break(),e.info("3. Restart Codex to load the MCP server"),e.break(),process.exit(0);}let l=D("Configuring MCP server...").start(),a=await Rc(i);if(l.succeed("Configuring MCP server."),s)await _([],cr,s,{silent:!1});else {let f=await ia$1(i.cwd),m=f==="npm"?"install":"add",p=f==="npm"?"--save-dev":"-D",u=D("Installing dependencies...").start();await execa(f,[m,p,...cr],{cwd:i.cwd}),u.succeed("Installing dependencies.");}e.break(),e.success(`Configuration saved to ${a}.`),e.break();}catch(r){la$1(r);}});var Cc=(e,t)=>t;async function Rc(e){let{client:t,cwd:r}=e,n=fr.find(a=>a.name===t);if(!n)throw new Error(`Unknown client: ${t}. Available clients: ${fr.map(a=>a.name).join(", ")}`);let o=T__default.join(r,n.configPath),i=T__default.dirname(o);await L.ensureDir(i);let s={};try{let a=await promises.readFile(o,"utf-8");s=JSON.parse(a);}catch{}let l=go(s,n.config,{arrayMerge:Cc});return await promises.writeFile(o,JSON.stringify(l,null,2)+`
162
- `,"utf-8"),n.configPath}var ve={lucide:{name:"lucide-react",package:"lucide-react",import:"lucide-react"},radix:{name:"@radix-ui/react-icons",package:"@radix-ui/react-icons",import:"@radix-ui/react-icons"}};async function $i(e$1){if(!e$1.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.");let t=e$1.resolvedPaths.ui,[r,n]=await Promise.all([qr("**/*.{js,ts,jsx,tsx}",{cwd:t}),sa$1()]);if(Object.keys(n).length===0)throw new Error("Something went wrong fetching the registry icons.");let o=Object.entries(ve).map(([m,p])=>({title:p.name,value:m})),i=await ke([{type:"select",name:"sourceLibrary",message:`Which icon library would you like to ${d.info("migrate from")}?`,choices:o},{type:"select",name:"targetLibrary",message:`Which icon library would you like to ${d.info("migrate to")}?`,choices:o}]);if(i.sourceLibrary===i.targetLibrary)throw new Error("You cannot migrate to the same icon library. Please choose a different icon library.");if(!(i.sourceLibrary in ve&&i.targetLibrary in ve))throw new Error("Invalid icon library. Please choose a valid icon library.");let s=ve[i.sourceLibrary],l=ve[i.targetLibrary],{confirm:a}=await ke({type:"confirm",name:"confirm",initial:true,message:`We will migrate ${d.info(r.length)} files in ${d.info(`./${T__default.relative(e$1.resolvedPaths.cwd,t)}`)} from ${d.info(s.name)} to ${d.info(l.name)}. Continue?`});a||(e.info("Migration cancelled."),process.exit(0)),l.package&&await _([l.package],[],e$1,{silent:false});let f=D("Migrating icons...")?.start();await Promise.all(r.map(async m=>{f.text=`Migrating ${m}...`;let p=T__default.join(t,m),u=await promises.readFile(p,"utf-8"),h=await Ec(u,i.sourceLibrary,i.targetLibrary,n);await promises.writeFile(p,h);})),f.succeed("Migration complete.");}async function Ec(e,t,r,n){let o=ve[t]?.import,i=ve[r]?.import,s=await promises.mkdtemp(T__default.join(tmpdir(),"shadcn-")),l=new Project({compilerOptions:{}}),a=T__default.join(s,`shadcn-icons-${randomBytes(4).toString("hex")}.tsx`),f=l.createSourceFile(a,e,{scriptKind:ScriptKind.TSX}),m=[];for(let p of f.getImportDeclarations()??[])if(p.getModuleSpecifier()?.getText()===`"${o}"`){for(let u of p.getNamedImports()??[]){let h=u.getName(),g=Object.values(n).find(y=>y[t]===h)?.[r];!g||m.includes(g)||(m.push(g),u.remove(),f.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement).filter(y=>y.getTagNameNode()?.getText()===h).forEach(y=>y.getTagNameNode()?.replaceWithText(g)));}p.getNamedImports()?.length===0&&p.remove();}return m.length>0&&f.addImportDeclaration({moduleSpecifier:i,namedImports:m.map(p=>({name:p}))}),await f.getText()}function jc(e){return e.split("-").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}function Tc(e,t,r,n){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 l=s.match(/^type\s+(\w+)(?:\s+as\s+(\w+))?$/),a=s.match(/^(\w+)\s+as\s+(\w+)$/);if(l){let f=l[1],m=l[2];n==="slot"&&f==="Slot"&&!m?r.push({name:"Slot",alias:"SlotPrimitive",isType:true}):r.push({name:f,alias:m,isType:true});}else if(a){let f=a[1],m=a[2];n==="slot"&&f==="Slot"&&m==="Slot"?r.push({name:"Slot",alias:"SlotPrimitive",isType:t}):r.push({name:f,alias:m,isType:t});}else n==="slot"&&s==="Slot"?r.push({name:"Slot",alias:"SlotPrimitive",isType:t}):r.push({name:s,isType:t});}}async function Ei(e$1,t={}){let r,n;if(t.path){if(n=e$1.resolvedPaths.cwd,t.path.includes("*"))r=await qr(t.path,{cwd:n,onlyFiles:true,ignore:["**/node_modules/**"]});else {let a=T__default.resolve(n,t.path),f=await promises.stat(a).catch(()=>null);if(!f)throw new Error(`File not found: ${t.path}`);if(f.isDirectory())n=a,r=await qr("**/*.{js,ts,jsx,tsx}",{cwd:n,onlyFiles:true,ignore:["**/node_modules/**"]});else if(f.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$1.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.");n=e$1.resolvedPaths.ui,r=await qr("**/*.{js,ts,jsx,tsx}",{cwd:n,onlyFiles:true});}if(!t.yes){let l=t.path?t.path:`./${T__default.relative(e$1.resolvedPaths.cwd,n)}`,{confirm:a}=await ke({type:"confirm",name:"confirm",initial:true,message:`We will migrate ${d.info(r.length)} file(s) in ${d.info(l)} to ${d.info("radix-ui")}. Continue?`});a||(e.info("Migration cancelled."),process.exit(0));}let o=D("Migrating imports...")?.start(),i=new Set;await Promise.all(r.map(async l=>{o.text=`Migrating ${l}...`;let a=T__default.join(n,l),f=await promises.readFile(a,"utf-8"),{content:m,replacedPackages:p}=await Ac(f);p.forEach(u=>i.add(u)),await promises.writeFile(a,m);})),o.succeed("Migrating imports.");let s=D("Updating package.json...")?.start();try{let l=x(e$1.resolvedPaths.cwd,!1);if(!l){s.fail("Could not read package.json"),e.warn("Could not update package.json. You may need to manually replace @radix-ui/react-* packages with radix-ui");return}let a=Array.from(i);if(a.length>0){if(l.dependencies||(l.dependencies={}),l.dependencies?.["radix-ui"]||l.devDependencies?.["radix-ui"])s.succeed("radix-ui already in package.json.");else {l.dependencies["radix-ui"]="latest";let m=T__default.join(e$1.resolvedPaths.cwd,"package.json");await promises.writeFile(m,JSON.stringify(l,null,2)+`
163
- `),s.succeed("Updated package.json."),await _(["radix-ui"],[],e$1,{silent:!1});}e.info(""),e.info("Migration complete. The following packages may be removed if no longer in use:"),e.info(d.info(a.join(", "))),e.info("Please review your codebase before removing.");}else s.succeed("No packages found in source files.");}catch{s.fail("Failed to update package.json"),e.warn("You may need to manually replace @radix-ui/react-* packages with radix-ui");}}async function Ac(e){let t=/import\s+(?:(type)\s+)?(?:\*\s+as\s+(\w+)|{([^}]+)})\s+from\s+(["'])@radix-ui\/react-([^"']+)\4(;?)/g,r=[],n=[],o=[],i='"',s=false,l=e,a;for(;(a=t.exec(e))!==null;){let[g,y,b,C,I,x,R]=a;if(x==="icons"||x.startsWith("icons/"))continue;n.push(g),n.length===1&&(i=I,s=R===";"),o.push(`@radix-ui/react-${x}`);let $=!!y;if(b){let U=jc(x);r.push({name:U,alias:b,isType:$});}else C&&Tc(C,$,r,x);}if(r.length===0)return {content:e,replacedPackages:[]};let f=r.filter((g,y,b)=>y===b.findIndex(C=>C.name===g.name&&C.alias===g.alias&&C.isType===g.isType)),p=`import { ${f.map(g=>{let y=g.isType?"type ":"";return g.alias?`${y}${g.name} as ${g.alias}`:`${y}${g.name}`}).join(", ")} } from ${i}radix-ui${i}${s?";":""}`;l=n.reduce((g,y,b)=>g.replace(y,b===0?p:""),l),l=l.replace(/\n\s*\n\s*\n/g,`
160
+ args = ["shadcn@${_e}", "mcp"]`),e.break(),e.info("3. Restart Codex to load the MCP server"),e.break(),process.exit(0);}let l=E("Configuring MCP server...").start(),a=await vc(i);if(l.succeed("Configuring MCP server."),s)await _([],cr,s,{silent:!1});else {let f=await ja$1(i.cwd),m=f==="npm"?"install":"add",p=f==="npm"?"--save-dev":"-D",u=E("Installing dependencies...").start();await execa(f,[m,p,...cr],{cwd:i.cwd}),u.succeed("Installing dependencies.");}e.break(),e.success(`Configuration saved to ${a}.`),e.break();}catch(r){ma(r);}});var Rc=(e,t)=>t;async function vc(e){let{client:t,cwd:r}=e,n=fr.find(a=>a.name===t);if(!n)throw new Error(`Unknown client: ${t}. Available clients: ${fr.map(a=>a.name).join(", ")}`);let o=T__default.join(r,n.configPath),i=T__default.dirname(o);await L.ensureDir(i);let s={};try{let a=await promises.readFile(o,"utf-8");s=JSON.parse(a);}catch{}let l=ho(s,n.config,{arrayMerge:Rc});return await promises.writeFile(o,JSON.stringify(l,null,2)+`
161
+ `,"utf-8"),n.configPath}var ve={lucide:{name:"lucide-react",package:"lucide-react",import:"lucide-react"},radix:{name:"@radix-ui/react-icons",package:"@radix-ui/react-icons",import:"@radix-ui/react-icons"}};async function Ei(e$1){if(!e$1.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.");let t=e$1.resolvedPaths.ui,[r,n]=await Promise.all([qr("**/*.{js,ts,jsx,tsx}",{cwd:t}),ta$1()]);if(Object.keys(n).length===0)throw new Error("Something went wrong fetching the registry icons.");let o=Object.entries(ve).map(([m,p])=>({title:p.name,value:m})),i=await ke([{type:"select",name:"sourceLibrary",message:`Which icon library would you like to ${d.info("migrate from")}?`,choices:o},{type:"select",name:"targetLibrary",message:`Which icon library would you like to ${d.info("migrate to")}?`,choices:o}]);if(i.sourceLibrary===i.targetLibrary)throw new Error("You cannot migrate to the same icon library. Please choose a different icon library.");if(!(i.sourceLibrary in ve&&i.targetLibrary in ve))throw new Error("Invalid icon library. Please choose a valid icon library.");let s=ve[i.sourceLibrary],l=ve[i.targetLibrary],{confirm:a}=await ke({type:"confirm",name:"confirm",initial:true,message:`We will migrate ${d.info(r.length)} files in ${d.info(`./${T__default.relative(e$1.resolvedPaths.cwd,t)}`)} from ${d.info(s.name)} to ${d.info(l.name)}. Continue?`});a||(e.info("Migration cancelled."),process.exit(0)),l.package&&await _([l.package],[],e$1,{silent:false});let f=E("Migrating icons...")?.start();await Promise.all(r.map(async m=>{f.text=`Migrating ${m}...`;let p=T__default.join(t,m),u=await promises.readFile(p,"utf-8"),h=await Fc(u,i.sourceLibrary,i.targetLibrary,n);await promises.writeFile(p,h);})),f.succeed("Migration complete.");}async function Fc(e,t,r,n){let o=ve[t]?.import,i=ve[r]?.import,s=await promises.mkdtemp(T__default.join(tmpdir(),"shadcn-")),l=new Project({compilerOptions:{}}),a=T__default.join(s,`shadcn-icons-${randomBytes(4).toString("hex")}.tsx`),f=l.createSourceFile(a,e,{scriptKind:ScriptKind.TSX}),m=[];for(let p of f.getImportDeclarations()??[])if(p.getModuleSpecifier()?.getText()===`"${o}"`){for(let u of p.getNamedImports()??[]){let h=u.getName(),g=Object.values(n).find(y=>y[t]===h)?.[r];!g||m.includes(g)||(m.push(g),u.remove(),f.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement).filter(y=>y.getTagNameNode()?.getText()===h).forEach(y=>y.getTagNameNode()?.replaceWithText(g)));}p.getNamedImports()?.length===0&&p.remove();}return m.length>0&&f.addImportDeclaration({moduleSpecifier:i,namedImports:m.map(p=>({name:p}))}),await f.getText()}function Tc(e){return e.split("-").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}function Ac(e,t,r,n){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 l=s.match(/^type\s+(\w+)(?:\s+as\s+(\w+))?$/),a=s.match(/^(\w+)\s+as\s+(\w+)$/);if(l){let f=l[1],m=l[2];n==="slot"&&f==="Slot"&&!m?r.push({name:"Slot",alias:"SlotPrimitive",isType:true}):r.push({name:f,alias:m,isType:true});}else if(a){let f=a[1],m=a[2];n==="slot"&&f==="Slot"&&m==="Slot"?r.push({name:"Slot",alias:"SlotPrimitive",isType:t}):r.push({name:f,alias:m,isType:t});}else n==="slot"&&s==="Slot"?r.push({name:"Slot",alias:"SlotPrimitive",isType:t}):r.push({name:s,isType:t});}}async function Fi(e$1,t={}){let r,n;if(t.path){if(n=e$1.resolvedPaths.cwd,t.path.includes("*"))r=await qr(t.path,{cwd:n,onlyFiles:true,ignore:["**/node_modules/**"]});else {let a=T__default.resolve(n,t.path),f=await promises.stat(a).catch(()=>null);if(!f)throw new Error(`File not found: ${t.path}`);if(f.isDirectory())n=a,r=await qr("**/*.{js,ts,jsx,tsx}",{cwd:n,onlyFiles:true,ignore:["**/node_modules/**"]});else if(f.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$1.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.");n=e$1.resolvedPaths.ui,r=await qr("**/*.{js,ts,jsx,tsx}",{cwd:n,onlyFiles:true});}if(!t.yes){let l=t.path?t.path:`./${T__default.relative(e$1.resolvedPaths.cwd,n)}`,{confirm:a}=await ke({type:"confirm",name:"confirm",initial:true,message:`We will migrate ${d.info(r.length)} file(s) in ${d.info(l)} to ${d.info("radix-ui")}. Continue?`});a||(e.info("Migration cancelled."),process.exit(0));}let o=E("Migrating imports...")?.start(),i=new Set;await Promise.all(r.map(async l=>{o.text=`Migrating ${l}...`;let a=T__default.join(n,l),f=await promises.readFile(a,"utf-8"),{content:m,replacedPackages:p}=await Nc(f);p.forEach(u=>i.add(u)),await promises.writeFile(a,m);})),o.succeed("Migrating imports.");let s=E("Updating package.json...")?.start();try{let l=y(e$1.resolvedPaths.cwd,!1);if(!l){s.fail("Could not read package.json"),e.warn("Could not update package.json. You may need to manually replace @radix-ui/react-* packages with radix-ui");return}let a=Array.from(i);if(a.length>0){if(l.dependencies||(l.dependencies={}),l.dependencies?.["radix-ui"]||l.devDependencies?.["radix-ui"])s.succeed("radix-ui already in package.json.");else {l.dependencies["radix-ui"]="latest";let m=T__default.join(e$1.resolvedPaths.cwd,"package.json");await promises.writeFile(m,JSON.stringify(l,null,2)+`
162
+ `),s.succeed("Updated package.json."),await _(["radix-ui"],[],e$1,{silent:!1});}e.info(""),e.info("Migration complete. The following packages may be removed if no longer in use:"),e.info(d.info(a.join(", "))),e.info("Please review your codebase before removing.");}else s.succeed("No packages found in source files.");}catch{s.fail("Failed to update package.json"),e.warn("You may need to manually replace @radix-ui/react-* packages with radix-ui");}}async function Nc(e){let t=/import\s+(?:(type)\s+)?(?:\*\s+as\s+(\w+)|{([^}]+)})\s+from\s+(["'])@radix-ui\/react-([^"']+)\4(;?)/g,r=[],n=[],o=[],i='"',s=false,l=e,a;for(;(a=t.exec(e))!==null;){let[g,y,b,C,I,x,R]=a;if(x==="icons"||x.startsWith("icons/"))continue;n.push(g),n.length===1&&(i=I,s=R===";"),o.push(`@radix-ui/react-${x}`);let $=!!y;if(b){let U=Tc(x);r.push({name:U,alias:b,isType:$});}else C&&Ac(C,$,r,x);}if(r.length===0)return {content:e,replacedPackages:[]};let f=r.filter((g,y,b)=>y===b.findIndex(C=>C.name===g.name&&C.alias===g.alias&&C.isType===g.isType)),p=`import { ${f.map(g=>{let y=g.isType?"type ":"";return g.alias?`${y}${g.name} as ${g.alias}`:`${y}${g.name}`}).join(", ")} } from ${i}radix-ui${i}${s?";":""}`;l=n.reduce((g,y,b)=>g.replace(y,b===0?p:""),l),l=l.replace(/\n\s*\n\s*\n/g,`
164
163
 
165
164
  `),f.some(g=>g.name==="Slot"&&g.alias==="SlotPrimitive")&&(l=l.split(`
166
165
  `).map(b=>{if(b.trim().startsWith("import "))return b;let C=b;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,(I,x,R)=>{let $=R.substring(0,x),U=($.match(/"/g)||[]).length,Y=($.match(/'/g)||[]).length;return U%2!==0||Y%2!==0?I:"__SLOT_PLACEHOLDER__"}),C=C.replace(/__SLOT_PLACEHOLDER__/g,"SlotPrimitive.Slot"),C}).join(`
167
- `));let h=Array.from(new Set(o));return {content:l,replacedPackages:h}}var Oc=["sidebar.tsx","pagination.tsx","calendar.tsx"],Vc=`${a}/docs/rtl#manual-migration-optional`;async function Fi(e$2,t={}){let r,n;if(t.path){if(n=e$2.resolvedPaths.cwd,t.path.includes("*"))r=await qr(t.path,{cwd:n,onlyFiles:true,ignore:["**/node_modules/**"]});else {let f=T__default.resolve(n,t.path),m=await promises.stat(f).catch(()=>null);if(!m)throw new Error(`File not found: ${t.path}`);if(m.isDirectory())n=f,r=await qr("**/*.{js,ts,jsx,tsx}",{cwd:n,onlyFiles:true,ignore:["**/node_modules/**"]});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$2.resolvedPaths.ui)throw new Error("Could not find a valid `ui` path in your `components.json`. Please provide a path or glob pattern.");n=e$2.resolvedPaths.ui,r=await qr("**/*.{js,ts,jsx,tsx}",{cwd:n,onlyFiles:true});}if(!t.yes){let a=t.path?t.path:`./${T__default.relative(e$2.resolvedPaths.cwd,n)}`,{confirm:f}=await ke({type:"confirm",name:"confirm",initial:true,message:`We will migrate ${d.info(r.length)} file(s) in ${d.info(a)} to RTL. Continue?`});f||(e.info("Migration cancelled."),process.exit(0));}let o=D("Updating components.json...").start();try{let a=T__default.resolve(e$2.resolvedPaths.cwd,"components.json"),f=JSON.parse(await promises.readFile(a,"utf-8"));f.rtl=!0,await promises.writeFile(a,JSON.stringify(f,null,2)+`
168
- `),o.succeed("Updated components.json.");}catch{throw o.fail("Failed to update components.json."),new Error("Could not update components.json. Please manually set `rtl: true`.")}let i=D("Migrating files to RTL...").start(),s=0,l=[];if(await Promise.all(r.map(async a=>{i.text=`Migrating ${a}...`;let f=T__default.join(n,a),m=await promises.readFile(f,"utf-8"),p=await e$1(m,true);p!==m&&(await promises.writeFile(f,p),s++);let u=T__default.basename(a);Oc.includes(u)&&l.push(a);})),i.succeed(`Migration complete. ${s} file(s) transformed.`),l.length>0){e.break(),e.warn("The following components may need manual RTL adjustments:");for(let a of l)e.info(` - ${a}`);e.break(),e.info(`See ${d.info(Vc)} for more information.`);}}async function Ti(e$1){let t={};if(!L.existsSync(e$1.cwd)||!L.existsSync(T__default.resolve(e$1.cwd,"package.json")))return t["1"]=true,{errors:t,config:null};if(!L.existsSync(T__default.resolve(e$1.cwd,"components.json")))return t["3"]=true,{errors:t,config:null};try{let r=await W$1(e$1.cwd);return {errors:t,config:r}}catch{e.break(),e.error(`An invalid ${d.info("components.json")} file was found at ${d.info(e$1.cwd)}.
169
- Before you can run a migration, you must create a valid ${d.info("components.json")} file by running the ${d.info("init")} command.`),e.error(`Learn more at ${d.info(`${a}/docs/components-json`)}.`),e.break(),process.exit(1);}}var Ai=[{name:"icons",description:"migrate your ui components to a different icon library."},{name:"radix",description:"migrate to radix-ui."},{name:"rtl",description:"migrate your components to support RTL (right-to-left)."}],_c=z.object({cwd:z.string(),list:z.boolean(),yes:z.boolean(),migration:z.string().refine(e=>e&&Ai.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()}),Ni=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).action(async(e$1,t,r)=>{try{let n=_c.parse({cwd:T__default.resolve(r.cwd),migration:e$1,path:t,list:r.list,yes:r.yes});if(n.list||!n.migration){e.info("Available migrations:");for(let s of Ai)e.info(`- ${s.name}: ${s.description}`);return}if(!n.migration)throw new Error("You must specify a migration. Run `shadcn migrate --list` to see available migrations.");let{errors:o,config:i}=await Ti(n);if(o["1"]||o["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.");n.migration==="icons"&&await $i(i),n.migration==="radix"&&await Ei(i,{yes:n.yes,path:n.path}),n.migration==="rtl"&&await Fi(i,{yes:n.yes,path:n.path});}catch(n){e.break(),la$1(n);}});function Bc(e){return `${a}/create?preset=${e}`}function Qr(e){let t=q(e);if(!t)throw new Error(`Invalid preset code: ${e}`);let r=[],n=t.chartColor??f$3[t.theme]??t.theme;return t.chartColor||r.push("chartColor"),{code:e,version:e[0],values:{...t,chartColor:n},derived:r,url:Bc(e)}}function Wc(e){lr({code:e.code,fallbacks:e.derived,values:e.values},{fallbackNote:" * Compatibility value for older preset versions."});}var zc=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=Qr(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}Wc(r);}catch(r){dr(r);}}),Jc=new Command().name("url").description("get the create URL for a preset code").argument("<code>","the preset code").action(e$1=>{try{e.log(Qr(e$1).url);}catch(t){dr(t);}}),Hc=new Command().name("open").description("open a preset code in the browser").argument("<code>","the preset code").action(async e$1=>{let t;try{t=Qr(e$1).url;}catch(r){dr(r);return}e.break(),e.log(` Opening ${t} in your browser.`),e.break();try{await ss(t);}catch(r){let n=r instanceof Error?r.message:String(r);dr(new Error(`Failed to open preset URL: ${n}`));}}),Gc=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$1=>{try{let t=T__default.resolve(e$1.cwd);if(!existsSync(T__default.resolve(t,"components.json"))&&await f(t)){let i=await g(t);i.length>0&&(e$1.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.map(s=>s.name)},null,2)):h("preset resolve",i),process.exit(1));}let r=await W$1(t);if(!r){if(e$1.json){console.log(JSON.stringify(null,null,2));return}e.log("No components.json found.");return}let n=await Ca(t),o=await sr(r,n);if(e$1.json){console.log(JSON.stringify(o.code?o:null,null,2));return}lr(o);}catch(t){la$1(t);}}),en=new Command().name("preset").description("manage presets").addCommand(zc).addCommand(Gc).addCommand(Jc).addCommand(Hc).action(()=>{en.outputHelp();});function dr(e$1){e$1 instanceof Error&&e.error(e$1.message),process.exit(1);}var qc=z.object({cwd:z.string(),silent:z.boolean()}),Di=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$1,t)=>{try{let r=qc.parse({cwd:T__default.resolve(t.cwd),silent:t.silent}),n=e$1.length>0?e$1:await Qc({silent:r.silent});await Xc(n,r.cwd,{silent:r.silent});}catch(r){e.break(),la$1(r);}});function Zc(e){let[t,...r]=e.split("="),n=r.length>0?r.join("="):void 0;if(!t.startsWith("@"))throw new Error(`Invalid registry namespace: ${d.info(t)}. Registry names must start with @ (e.g., @acme).`);return {namespace:t,url:n}}function nn(e,t,r){return `${e} ${e===1?t:r}`}async function Xc(e$1,t,r){let n=T__default.resolve(t,"components.json");if(!L.existsSync(n))throw new Error(`No ${d.info("components.json")} found. Run ${d.info("shadcn init")} first.`);let o=e$1.map(Zc),i=o.filter(g=>!g.url),s=[];if(i.length>0){let g=D("Fetching registries.",{silent:r.silent}).start(),y=await ya$1();if(!y)throw g.fail(),new Error("Failed to fetch registries.");g.succeed(),s=y;}let l={};for(let{namespace:g,url:y}of o){if(g in b){e.warn(`${d.info(g)} is a built-in registry and cannot be added.`);continue}if(y){if(!y.includes("{name}"))throw new Error(`Invalid registry URL for ${d.info(g)}. URL must include {name} placeholder. Example: ${d.info(`${g}=https://example.com/r/{name}.json`)}`);l[g]=y;}else {let b=s.find(C=>C.name===g);if(!b)throw new Error(`Registry ${d.info(g)} not found. Provide a URL: ${d.info(`${g}=https://.../{name}.json`)}`);l[g]=b.url;}}if(Object.keys(l).length===0)return {addedRegistries:[]};let a=await L.readJson(n),f=a.registries||{},m={},p=[];for(let[g,y]of Object.entries(l))f[g]?p.push(g):m[g]=y;if(Object.keys(m).length===0){if(p.length>0&&!r.silent){D(`Skipped ${nn(p.length,"registry","registries")}: (already configured)`,{silent:r.silent})?.info();for(let g of p)e.log(` - ${g}`);}else r.silent||e.info("No new registries to add.");return}let u={...a,registries:{...f,...m}},h=D("Updating components.json.",{silent:r.silent}).start();if(await L.writeJson(n,u,{spaces:2}),h.succeed(),!r.silent){let g=Object.keys(m);D(`Added ${nn(g.length,"registry","registries")}:`,{silent:r.silent})?.succeed();for(let y of g)e.log(` - ${y}`);if(p.length>0){D(`Skipped ${nn(p.length,"registry","registries")}: (already configured)`,{silent:r.silent})?.info();for(let y of p)e.log(` - ${y}`);}}}async function Qc(e$1){let t=D("Fetching registries.",{silent:e$1.silent}).start(),r=await ya$1();if(!r)throw t.fail(),new Error("Failed to fetch registries.");t.succeed();let n=[...r].sort((i,s)=>i.name.localeCompare(s.name)),{selected:o}=await ke({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:n.map(i=>({title:i.name,description:i.description,value:i.name}))});return o?.length||(e.warn("No registries selected. Exiting."),e.info(""),process.exit(1)),o}var Li=32,ef=f$2.options.filter(e=>e!=="registry:example"&&e!=="registry:internal"),tf=z.record(z.string(),z.unknown()),rf=z.array(z.string()),nf=z.array(z.unknown());async function Ui(e){let t=T.resolve(e.cwd),r=T.resolve(t,e.registryFile),n={cwd:t,rootFile:r,usesInclude:false,diagnostics:[],registryFiles:new Set,checkedRegistryFiles:new Set,itemsChecked:0,itemSourcesByItem:new Map,firstIncludedFrom:new Map};if(T.basename(r)!=="registry.json"&&N(n,{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."}),!ln(r,t))return N(n,{registryFile:r,message:`Root registry file must stay inside ${ot(t,t)}.`,suggestion:"Run the command from the registry root or pass a registry.json file inside --cwd."}),sn(n);let o=await Bi(r,n);if(!o)return sn(n);n.usesInclude=!!o.include?.length,of(o,r,n);let i=await Mi(r,o,n,[]);return af(i,n),await lf(i,n),sn(n)}async function Mi(e,t,r,n){if(n.length>=Li)return N(r,{registryFile:e,message:`Registry include tree is too deep. The maximum include depth is ${Li}.`,suggestion:"Flatten part of the registry include tree or reduce nested include depth."}),[];if(n.includes(e))return N(r,{registryFile:e,message:`Registry include cycle detected: ${gf([...n,e])}.`,suggestion:"Remove one include so the registry graph is acyclic."}),[];let o=n.at(-1)??e,i=r.firstIncludedFrom.get(e);if(i)return N(r,{registryFile:e,message:`Registry file included more than once. First included from ${ot(i,r.cwd)}, then included from ${ot(o,r.cwd)}.`,suggestion:"Remove one include or move shared items into a single included registry.json."}),[];r.registryFiles.add(e),r.firstIncludedFrom.set(e,o);let s=T.dirname(e),l=[...n,e],a=[];for(let m of t.include??[]){let p=sf(m,e,s,r);if(!p)continue;let u=await Bi(p,r);if(!u)continue;let h=await Mi(p,u,r,l);a.push(...h);}let f=!r.usesInclude&&e===r.rootFile?r.cwd:s;return t.items.forEach((m,p)=>{r.itemSourcesByItem.set(m,{registryFile:e,registryDir:f,itemIndex:p});}),[...a,...t.items]}async function Bi(e,t){t.checkedRegistryFiles.add(e);let r;try{r=await wt.readFile(e,"utf-8");}catch{return N(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 n;try{n=JSON.parse(r);}catch{return N(t,{registryFile:e,message:"Registry file contains invalid JSON.",suggestion:"Fix the JSON syntax in the registry.json file."}),null}return mf(n,e,t)}function of(e,t,r){!e.name&&!e.hasName&&N(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&&N(r,{registryFile:t,message:'Root registry.json must define "homepage".',suggestion:'Add a top-level "homepage" field to the root registry.json.'});}function sf(e,t,r,n){if(P(e))return N(n,{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(T.isAbsolute(e))return N(n,{registryFile:t,includePath:e,message:`Include "${e}" must be relative.`,suggestion:'Use a path like "components/ui/registry.json".'}),null;if(Wi(e))return N(n,{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(T.basename(e)!=="registry.json")return N(n,{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 o=T.resolve(r,e);return ln(o,n.cwd)?o:(N(n,{registryFile:t,includePath:e,message:`Include "${e}" must stay inside ${ot(n.cwd,n.cwd)}.`,suggestion:"Keep included registry.json files inside the registry root."}),null)}function af(e,t){let r=new Map;for(let n of e){let o=r.get(n.name);if(!o){r.set(n.name,n);continue}let i=t.itemSourcesByItem.get(o),s=t.itemSourcesByItem.get(n);N(t,{registryFile:s?.registryFile??t.rootFile,itemName:n.name,itemIndex:s?.itemIndex,message:`Duplicate registry item name "${n.name}". First defined at ${hf(i,t.cwd)}.`,suggestion:"Rename one of these items so each name is unique across the resolved registry."});}}async function lf(e,t){let r=df(t);for(let n$1 of e){let o=t.itemSourcesByItem.get(n$1),i={...ff(n$1,t,r),$schema:"https://ui.shadcn.com/schema/registry-item.json"};for(let l=0;l<(n$1.files?.length??0);l++){let a=n$1.files?.[l];if(!a||!o)continue;let f=cf(n$1,a.path,o,t);if(f)try{await wt.readFile(f,"utf-8");}catch{N(t,{registryFile:o.registryFile,itemName:n$1.name,itemIndex:o.itemIndex,filePath:a.path,message:`File "${a.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.safeParse(i);s.success||St(s.error,o?.registryFile??t.rootFile,t,{itemName:n$1.name,itemIndex:o?.itemIndex,suggestion:"Update the registry item so the built item matches the registry item schema."});}}function cf(e,t,r,n){if(P(t))return N(n,{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(T.isAbsolute(t))return N(n,{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(Wi(t))return N(n,{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 o=T.resolve(r.registryDir,t);return ln(o,r.registryDir)?o:(N(n,{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 ff(e,t,r){let n=t.itemSourcesByItem.get(e);return {...e,files:e.files?.map(o=>{let i=T.resolve(n?.registryDir??t.cwd,o.path);return {...o,path:T.relative(r,i).split(T.sep).join("/")}})}}function mf(e,t,r){let n=tf.safeParse(e);if(!n.success)return St(n.error,t,r,{suggestion:"Update the registry.json file so it matches the schema."}),null;let o=n.data,i={$schema:on(o,"$schema",t,r),name:on(o,"name",t,r),homepage:on(o,"homepage",t,r),hasName:o.name!==void 0,hasHomepage:o.homepage!==void 0,items:[]};if(o.include!==void 0){let s=rf.safeParse(o.include);s.success?i.include=s.data:St(s.error,t,r,{pathPrefix:["include"],suggestion:"Update include so it is an array of registry.json paths."});}if(o.items!==void 0){let s=nf.safeParse(o.items);s.success?(r.itemsChecked+=s.data.length,i.items=pf(s.data,t,r)):St(s.error,t,r,{pathPrefix:["items"],suggestion:"Update items so it is an array of registry items."});}return o.items===void 0&&o.include===void 0&&N(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 pf(e,t,r){let n$1=[];return e.forEach((o,i)=>{let s=n.safeParse(o);if(!s.success){St(s.error,t,r,{itemName:uf(o),itemIndex:i,suggestion:"Update the registry item so it matches the registry item schema."});return}n$1.push(s.data);}),n$1}function on(e,t,r,n){let o=e[t];if(o!==void 0){if(typeof o=="string")return o;N(n,{registryFile:r,message:`${t}: Expected string, received ${typeof o}.`,suggestion:`Update "${t}" so it is a string.`});}}function uf(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e.name;return typeof t=="string"?t:void 0}function St(e,t,r,n){for(let o of e.errors)N(r,{registryFile:t,itemName:n.itemName,itemIndex:n.itemIndex,message:yf(o,n.pathPrefix),suggestion:n.suggestion});}function N(e,t){e.diagnostics.push(t);}function sn(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 df(e){return e.usesInclude?T.dirname(e.rootFile):e.cwd}function Wi(e){return e.split(/[\\/]+/).includes("..")}function ln(e,t){let r=T.relative(t,e);return !!r&&!r.startsWith("..")&&!T.isAbsolute(r)}function gf(e){return e.map(t=>ot(t,T.dirname(e[0]))).join(" -> ")}function hf(e,t){return e?`${ot(e.registryFile,t)} items[${e.itemIndex}]`:"unknown source"}function _i(e){return e.length?e.join("."):"(root)"}function yf(e,t=[]){let r=[...t,...e.path];return e.code===z.ZodIssueCode.invalid_union_discriminator&&e.path.at(-1)==="type"?`${_i(r)}: Invalid registry item type. Expected ${ef.map(n=>`"${n}"`).join(" | ")}.`:`${_i(r)}: ${e.message}`}function ot(e,t){let r=T.relative(t,e);return r&&!r.startsWith("..")&&!T.isAbsolute(r)?r.split(T.sep).join("/"):r?e:"."}var bf=z.object({cwd:z.string(),registryFile:z.string()}),Hi=new Command().name("validate").description("validate a shadcn registry").argument("[registry]","path to registry.json file","./registry.json").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e$1,t)=>{let r;try{let n=bf.parse({cwd:T.resolve(t.cwd),registryFile:e$1});r=D("Validating registry.").start();let o=await Ui(n);kf(o,r),o.valid||(process.exitCode=1);}catch(n){r?.fail("Registry validation failed."),e.break(),la$1(n);}});function kf(e$1,t){if(e$1.valid){t.succeed("Registry is valid."),zi(e$1,{success:true});return}t.fail("Registry validation failed."),zi(e$1),e.break();for(let[r,n]of Array.from(Cf(e$1))){e.log(d.info(Gi(r,e$1.cwd)));for(let o of n)e.error(` - ${Rf(o)}`),o.suggestion&&e.log(` ${o.suggestion}`);e.break();}}function zi(e$1,t={}){let r=`Checked ${Ji(e$1.registryFiles,"registry file","registry files")} and ${Ji(e$1.items,"item","items")}.`;t.success?vf(r):e.log(` ${r}`);for(let n of e$1.registryFilePaths)e.log(` - ${Gi(n,e$1.cwd)}`);}function Cf(e){let t=new Map;for(let r of e.diagnostics){let n=t.get(r.registryFile)??[];n.push(r),t.set(r.registryFile,n);}return t}function Rf(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 Gi(e,t){let r=T.relative(t,e);return r&&!r.startsWith("..")&&!T.isAbsolute(r)?r.split(T.sep).join("/"):r?e:"."}function vf(e){D(e).succeed();}function Ji(e,t,r){return `${e} ${e===1?t:r}`}var Ki=new Command().name("registry").description("manage registries").addCommand(Di).addCommand(Hi);var If=z.object({cwd:z.string(),query:z.string().optional(),limit:z.number().optional(),offset:z.number().optional()}),Zi=new Command().name("search").alias("list").description("search items from registries").argument("<registries...>","the registry names or urls to search items from. Names must be prefixed with @.").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-q, --query <query>","query string").option("-l, --limit <number>","maximum number of items to display per registry","100").option("-o, --offset <number>","number of items to skip","0").action(async(e,t)=>{try{let r=If.parse({cwd:T__default.resolve(t.cwd),query:t.query,limit:t.limit?parseInt(t.limit,10):void 0,offset:t.offset?parseInt(t.offset,10):void 0});await ee(r.cwd);let n=aa({style:"new-york",resolvedPaths:{cwd:r.cwd}}),o=ba$1(n),i=T__default.resolve(r.cwd,"components.json");if(L.existsSync(i)){let m=await L.readJson(i),p=c.partial().parse(m);o=ba$1({...n,...p});}let s=o;try{let m=await W$1(r.cwd);m&&(s=ba$1(m));}catch{}let{config:l,newRegistries:a}=await W(e.map(m=>`${m}/registry`),s,{silent:!0,writeFile:!1});a.length>0&&(s.registries=l.registries),da(e,s);let f=await La$1(e,{query:r.query,limit:r.limit,offset:r.offset,config:s});console.log(JSON.stringify(f,null,2)),process.exit(0);}catch(r){la$1(r);}finally{ca$1();}});var $f=z.object({cwd:z.string()}),ts=new Command().name("view").description("view items from the registry").argument("<items...>","the item names or URLs to view").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{try{let r=$f.parse({cwd:T__default.resolve(t.cwd)});await ee(r.cwd);let n=ba$1({}),o=T__default.resolve(r.cwd,"components.json");if(L.existsSync(o)){let f=await L.readJson(o),m=c.partial().parse(f);n=ba$1(m);}let i=n;try{let f=await W$1(r.cwd);f&&(i=ba$1(f));}catch{}let{config:s,newRegistries:l}=await W(e,i,{silent:!0,writeFile:!1});l.length>0&&(i.registries=s.registries),da(e,i);let a=await na$1(e,{config:i});console.log(JSON.stringify(a,null,2)),process.exit(0);}catch(r){la$1(r);}finally{ca$1();}});process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function Ff(){let e=new Command().name("shadcn").description("build your component library").version(ka$1.version||"1.0.0","-v, --version","display the version number");e.addCommand(To).addCommand(Zo).addCommand(Ho).addCommand(oi).addCommand(si).addCommand(ts).addCommand(Zi).addCommand(Ni).addCommand(vi).addCommand(ri).addCommand(Kr).addCommand(en).addCommand(Ki),e.parse();}Ff();
166
+ `));let h=Array.from(new Set(o));return {content:l,replacedPackages:h}}var Vc=["sidebar.tsx","pagination.tsx","calendar.tsx"],Dc=`${a}/docs/rtl#manual-migration-optional`;async function ji(e$2,t={}){let r,n;if(t.path){if(n=e$2.resolvedPaths.cwd,t.path.includes("*"))r=await qr(t.path,{cwd:n,onlyFiles:true,ignore:["**/node_modules/**"]});else {let f=T__default.resolve(n,t.path),m=await promises.stat(f).catch(()=>null);if(!m)throw new Error(`File not found: ${t.path}`);if(m.isDirectory())n=f,r=await qr("**/*.{js,ts,jsx,tsx}",{cwd:n,onlyFiles:true,ignore:["**/node_modules/**"]});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$2.resolvedPaths.ui)throw new Error("Could not find a valid `ui` path in your `components.json`. Please provide a path or glob pattern.");n=e$2.resolvedPaths.ui,r=await qr("**/*.{js,ts,jsx,tsx}",{cwd:n,onlyFiles:true});}if(!t.yes){let a=t.path?t.path:`./${T__default.relative(e$2.resolvedPaths.cwd,n)}`,{confirm:f}=await ke({type:"confirm",name:"confirm",initial:true,message:`We will migrate ${d.info(r.length)} file(s) in ${d.info(a)} to RTL. Continue?`});f||(e.info("Migration cancelled."),process.exit(0));}let o=E("Updating components.json...").start();try{let a=T__default.resolve(e$2.resolvedPaths.cwd,"components.json"),f=JSON.parse(await promises.readFile(a,"utf-8"));f.rtl=!0,await promises.writeFile(a,JSON.stringify(f,null,2)+`
167
+ `),o.succeed("Updated components.json.");}catch{throw o.fail("Failed to update components.json."),new Error("Could not update components.json. Please manually set `rtl: true`.")}let i=E("Migrating files to RTL...").start(),s=0,l=[];if(await Promise.all(r.map(async a=>{i.text=`Migrating ${a}...`;let f=T__default.join(n,a),m=await promises.readFile(f,"utf-8"),p=await e$1(m,true);p!==m&&(await promises.writeFile(f,p),s++);let u=T__default.basename(a);Vc.includes(u)&&l.push(a);})),i.succeed(`Migration complete. ${s} file(s) transformed.`),l.length>0){e.break(),e.warn("The following components may need manual RTL adjustments:");for(let a of l)e.info(` - ${a}`);e.break(),e.info(`See ${d.info(Dc)} for more information.`);}}async function Ai(e$1){let t={};if(!L.existsSync(e$1.cwd)||!L.existsSync(T__default.resolve(e$1.cwd,"package.json")))return t["1"]=true,{errors:t,config:null};if(!L.existsSync(T__default.resolve(e$1.cwd,"components.json")))return t["3"]=true,{errors:t,config:null};try{let r=await X$1(e$1.cwd);return {errors:t,config:r}}catch{e.break(),e.error(`An invalid ${d.info("components.json")} file was found at ${d.info(e$1.cwd)}.
168
+ Before you can run a migration, you must create a valid ${d.info("components.json")} file by running the ${d.info("init")} command.`),e.error(`Learn more at ${d.info(`${a}/docs/components-json`)}.`),e.break(),process.exit(1);}}var Ni=[{name:"icons",description:"migrate your ui components to a different icon library."},{name:"radix",description:"migrate to radix-ui."},{name:"rtl",description:"migrate your components to support RTL (right-to-left)."}],Uc=z.object({cwd:z.string(),list:z.boolean(),yes:z.boolean(),migration:z.string().refine(e=>e&&Ni.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()}),Oi=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).action(async(e$1,t,r)=>{try{let n=Uc.parse({cwd:T__default.resolve(r.cwd),migration:e$1,path:t,list:r.list,yes:r.yes});if(n.list||!n.migration){e.info("Available migrations:");for(let s of Ni)e.info(`- ${s.name}: ${s.description}`);return}if(!n.migration)throw new Error("You must specify a migration. Run `shadcn migrate --list` to see available migrations.");let{errors:o,config:i}=await Ai(n);if(o["1"]||o["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.");n.migration==="icons"&&await Ei(i),n.migration==="radix"&&await Fi(i,{yes:n.yes,path:n.path}),n.migration==="rtl"&&await ji(i,{yes:n.yes,path:n.path});}catch(n){e.break(),ma(n);}});function Bc(e){return `${a}/create?preset=${e}`}function Qr(e){let t=q(e);if(!t)throw new Error(`Invalid preset code: ${e}`);let r=[],n=t.chartColor??f$3[t.theme]??t.theme;return t.chartColor||r.push("chartColor"),{code:e,version:e[0],values:{...t,chartColor:n},derived:r,url:Bc(e)}}function zc(e){lr({code:e.code,fallbacks:e.derived,values:e.values},{fallbackNote:" * Compatibility value for older preset versions."});}var Jc=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=Qr(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}zc(r);}catch(r){dr(r);}}),Hc=new Command().name("url").description("get the create URL for a preset code").argument("<code>","the preset code").action(e$1=>{try{e.log(Qr(e$1).url);}catch(t){dr(t);}}),Gc=new Command().name("open").description("open a preset code in the browser").argument("<code>","the preset code").action(async e$1=>{let t;try{t=Qr(e$1).url;}catch(r){dr(r);return}e.break(),e.log(` Opening ${t} in your browser.`),e.break();try{await as(t);}catch(r){let n=r instanceof Error?r.message:String(r);dr(new Error(`Failed to open preset URL: ${n}`));}}),Kc=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$1=>{try{let t=T__default.resolve(e$1.cwd);if(!existsSync(T__default.resolve(t,"components.json"))&&await f(t)){let i=await g(t);i.length>0&&(e$1.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.map(s=>s.name)},null,2)):h("preset resolve",i),process.exit(1));}let r=await X$1(t);if(!r){if(e$1.json){console.log(JSON.stringify(null,null,2));return}e.log("No components.json found.");return}let n=await Da$1(t),o=await sr(r,n);if(e$1.json){console.log(JSON.stringify(o.code?o:null,null,2));return}lr(o);}catch(t){ma(t);}}),en=new Command().name("preset").description("manage presets").addCommand(Jc).addCommand(Kc).addCommand(Hc).addCommand(Gc).action(()=>{en.outputHelp();});function dr(e$1){e$1 instanceof Error&&e.error(e$1.message),process.exit(1);}var Zc=z.object({cwd:z.string(),silent:z.boolean()}),Li=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$1,t)=>{try{let r=Zc.parse({cwd:T__default.resolve(t.cwd),silent:t.silent}),n=e$1.length>0?e$1:await ef({silent:r.silent});await Qc(n,r.cwd,{silent:r.silent});}catch(r){e.break(),ma(r);}});function Xc(e){let[t,...r]=e.split("="),n=r.length>0?r.join("="):void 0;if(!t.startsWith("@"))throw new Error(`Invalid registry namespace: ${d.info(t)}. Registry names must start with @ (e.g., @acme).`);return {namespace:t,url:n}}function nn(e,t,r){return `${e} ${e===1?t:r}`}async function Qc(e$1,t,r){let n=T__default.resolve(t,"components.json");if(!L.existsSync(n))throw new Error(`No ${d.info("components.json")} found. Run ${d.info("shadcn init")} first.`);let o=e$1.map(Xc),i=o.filter(g=>!g.url),s=[];if(i.length>0){let g=E("Fetching registries.",{silent:r.silent}).start(),y=await za$1();if(!y)throw g.fail(),new Error("Failed to fetch registries.");g.succeed(),s=y;}let l={};for(let{namespace:g,url:y}of o){if(g in b){e.warn(`${d.info(g)} is a built-in registry and cannot be added.`);continue}if(y){if(!y.includes("{name}"))throw new Error(`Invalid registry URL for ${d.info(g)}. URL must include {name} placeholder. Example: ${d.info(`${g}=https://example.com/r/{name}.json`)}`);l[g]=y;}else {let b=s.find(C=>C.name===g);if(!b)throw new Error(`Registry ${d.info(g)} not found. Provide a URL: ${d.info(`${g}=https://.../{name}.json`)}`);l[g]=b.url;}}if(Object.keys(l).length===0)return {addedRegistries:[]};let a=await L.readJson(n),f=a.registries||{},m={},p=[];for(let[g,y]of Object.entries(l))f[g]?p.push(g):m[g]=y;if(Object.keys(m).length===0){if(p.length>0&&!r.silent){E(`Skipped ${nn(p.length,"registry","registries")}: (already configured)`,{silent:r.silent})?.info();for(let g of p)e.log(` - ${g}`);}else r.silent||e.info("No new registries to add.");return}let u={...a,registries:{...f,...m}},h=E("Updating components.json.",{silent:r.silent}).start();if(await L.writeJson(n,u,{spaces:2}),h.succeed(),!r.silent){let g=Object.keys(m);E(`Added ${nn(g.length,"registry","registries")}:`,{silent:r.silent})?.succeed();for(let y of g)e.log(` - ${y}`);if(p.length>0){E(`Skipped ${nn(p.length,"registry","registries")}: (already configured)`,{silent:r.silent})?.info();for(let y of p)e.log(` - ${y}`);}}}async function ef(e$1){let t=E("Fetching registries.",{silent:e$1.silent}).start(),r=await za$1();if(!r)throw t.fail(),new Error("Failed to fetch registries.");t.succeed();let n=[...r].sort((i,s)=>i.name.localeCompare(s.name)),{selected:o}=await ke({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:n.map(i=>({title:i.name,description:i.description,value:i.name}))});return o?.length||(e.warn("No registries selected. Exiting."),e.info(""),process.exit(1)),o}var _i=32,tf=f$2.options.filter(e=>e!=="registry:example"&&e!=="registry:internal"),rf=z.record(z.string(),z.unknown()),nf=z.array(z.string()),of=z.array(z.unknown());async function Mi(e){let t=T.resolve(e.cwd),r=T.resolve(t,e.registryFile),n={cwd:t,rootFile:r,usesInclude:false,diagnostics:[],registryFiles:new Set,checkedRegistryFiles:new Set,itemsChecked:0,itemSourcesByItem:new Map,firstIncludedFrom:new Map};if(T.basename(r)!=="registry.json"&&N(n,{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."}),!ln(r,t))return N(n,{registryFile:r,message:`Root registry file must stay inside ${ot(t,t)}.`,suggestion:"Run the command from the registry root or pass a registry.json file inside --cwd."}),sn(n);let o=await Bi(r,n);if(!o)return sn(n);n.usesInclude=!!o.include?.length,sf(o,r,n);let i=await Wi(r,o,n,[]);return lf(i,n),await cf(i,n),sn(n)}async function Wi(e,t,r,n){if(n.length>=_i)return N(r,{registryFile:e,message:`Registry include tree is too deep. The maximum include depth is ${_i}.`,suggestion:"Flatten part of the registry include tree or reduce nested include depth."}),[];if(n.includes(e))return N(r,{registryFile:e,message:`Registry include cycle detected: ${hf([...n,e])}.`,suggestion:"Remove one include so the registry graph is acyclic."}),[];let o=n.at(-1)??e,i=r.firstIncludedFrom.get(e);if(i)return N(r,{registryFile:e,message:`Registry file included more than once. First included from ${ot(i,r.cwd)}, then included from ${ot(o,r.cwd)}.`,suggestion:"Remove one include or move shared items into a single included registry.json."}),[];r.registryFiles.add(e),r.firstIncludedFrom.set(e,o);let s=T.dirname(e),l=[...n,e],a=[];for(let m of t.include??[]){let p=af(m,e,s,r);if(!p)continue;let u=await Bi(p,r);if(!u)continue;let h=await Wi(p,u,r,l);a.push(...h);}let f=!r.usesInclude&&e===r.rootFile?r.cwd:s;return t.items.forEach((m,p)=>{r.itemSourcesByItem.set(m,{registryFile:e,registryDir:f,itemIndex:p});}),[...a,...t.items]}async function Bi(e,t){t.checkedRegistryFiles.add(e);let r;try{r=await wt.readFile(e,"utf-8");}catch{return N(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 n;try{n=JSON.parse(r);}catch{return N(t,{registryFile:e,message:"Registry file contains invalid JSON.",suggestion:"Fix the JSON syntax in the registry.json file."}),null}return pf(n,e,t)}function sf(e,t,r){!e.name&&!e.hasName&&N(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&&N(r,{registryFile:t,message:'Root registry.json must define "homepage".',suggestion:'Add a top-level "homepage" field to the root registry.json.'});}function af(e,t,r,n){if(Q$1(e))return N(n,{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(T.isAbsolute(e))return N(n,{registryFile:t,includePath:e,message:`Include "${e}" must be relative.`,suggestion:'Use a path like "components/ui/registry.json".'}),null;if(zi(e))return N(n,{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(T.basename(e)!=="registry.json")return N(n,{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 o=T.resolve(r,e);return ln(o,n.cwd)?o:(N(n,{registryFile:t,includePath:e,message:`Include "${e}" must stay inside ${ot(n.cwd,n.cwd)}.`,suggestion:"Keep included registry.json files inside the registry root."}),null)}function lf(e,t){let r=new Map;for(let n of e){let o=r.get(n.name);if(!o){r.set(n.name,n);continue}let i=t.itemSourcesByItem.get(o),s=t.itemSourcesByItem.get(n);N(t,{registryFile:s?.registryFile??t.rootFile,itemName:n.name,itemIndex:s?.itemIndex,message:`Duplicate registry item name "${n.name}". First defined at ${yf(i,t.cwd)}.`,suggestion:"Rename one of these items so each name is unique across the resolved registry."});}}async function cf(e,t){let r=gf(t);for(let n$1 of e){let o=t.itemSourcesByItem.get(n$1),i={...mf(n$1,t,r),$schema:"https://ui.shadcn.com/schema/registry-item.json"};for(let l=0;l<(n$1.files?.length??0);l++){let a=n$1.files?.[l];if(!a||!o)continue;let f=ff(n$1,a.path,o,t);if(f)try{await wt.readFile(f,"utf-8");}catch{N(t,{registryFile:o.registryFile,itemName:n$1.name,itemIndex:o.itemIndex,filePath:a.path,message:`File "${a.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.safeParse(i);s.success||St(s.error,o?.registryFile??t.rootFile,t,{itemName:n$1.name,itemIndex:o?.itemIndex,suggestion:"Update the registry item so the built item matches the registry item schema."});}}function ff(e,t,r,n){if(Q$1(t))return N(n,{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(T.isAbsolute(t))return N(n,{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(zi(t))return N(n,{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 o=T.resolve(r.registryDir,t);return ln(o,r.registryDir)?o:(N(n,{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 mf(e,t,r){let n=t.itemSourcesByItem.get(e);return {...e,files:e.files?.map(o=>{let i=T.resolve(n?.registryDir??t.cwd,o.path);return {...o,path:T.relative(r,i).split(T.sep).join("/")}})}}function pf(e,t,r){let n=rf.safeParse(e);if(!n.success)return St(n.error,t,r,{suggestion:"Update the registry.json file so it matches the schema."}),null;let o=n.data,i={$schema:on(o,"$schema",t,r),name:on(o,"name",t,r),homepage:on(o,"homepage",t,r),hasName:o.name!==void 0,hasHomepage:o.homepage!==void 0,items:[]};if(o.include!==void 0){let s=nf.safeParse(o.include);s.success?i.include=s.data:St(s.error,t,r,{pathPrefix:["include"],suggestion:"Update include so it is an array of registry.json paths."});}if(o.items!==void 0){let s=of.safeParse(o.items);s.success?(r.itemsChecked+=s.data.length,i.items=uf(s.data,t,r)):St(s.error,t,r,{pathPrefix:["items"],suggestion:"Update items so it is an array of registry items."});}return o.items===void 0&&o.include===void 0&&N(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 uf(e,t,r){let n$1=[];return e.forEach((o,i)=>{let s=n.safeParse(o);if(!s.success){St(s.error,t,r,{itemName:df(o),itemIndex:i,suggestion:"Update the registry item so it matches the registry item schema."});return}n$1.push(s.data);}),n$1}function on(e,t,r,n){let o=e[t];if(o!==void 0){if(typeof o=="string")return o;N(n,{registryFile:r,message:`${t}: Expected string, received ${typeof o}.`,suggestion:`Update "${t}" so it is a string.`});}}function df(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e.name;return typeof t=="string"?t:void 0}function St(e,t,r,n){for(let o of e.errors)N(r,{registryFile:t,itemName:n.itemName,itemIndex:n.itemIndex,message:wf(o,n.pathPrefix),suggestion:n.suggestion});}function N(e,t){e.diagnostics.push(t);}function sn(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 gf(e){return e.usesInclude?T.dirname(e.rootFile):e.cwd}function zi(e){return e.split(/[\\/]+/).includes("..")}function ln(e,t){let r=T.relative(t,e);return !!r&&!r.startsWith("..")&&!T.isAbsolute(r)}function hf(e){return e.map(t=>ot(t,T.dirname(e[0]))).join(" -> ")}function yf(e,t){return e?`${ot(e.registryFile,t)} items[${e.itemIndex}]`:"unknown source"}function Ui(e){return e.length?e.join("."):"(root)"}function wf(e,t=[]){let r=[...t,...e.path];return e.code===z.ZodIssueCode.invalid_union_discriminator&&e.path.at(-1)==="type"?`${Ui(r)}: Invalid registry item type. Expected ${tf.map(n=>`"${n}"`).join(" | ")}.`:`${Ui(r)}: ${e.message}`}function ot(e,t){let r=T.relative(t,e);return r&&!r.startsWith("..")&&!T.isAbsolute(r)?r.split(T.sep).join("/"):r?e:"."}var kf=z.object({cwd:z.string(),registryFile:z.string()}),Gi=new Command().name("validate").description("validate a shadcn registry").argument("[registry]","path to registry.json file","./registry.json").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e$1,t)=>{let r;try{let n=kf.parse({cwd:T.resolve(t.cwd),registryFile:e$1});r=E("Validating registry.").start();let o=await Mi(n);Cf(o,r),o.valid||(process.exitCode=1);}catch(n){r?.fail("Registry validation failed."),e.break(),ma(n);}});function Cf(e$1,t){if(e$1.valid){t.succeed("Registry is valid."),Ji(e$1,{success:true});return}t.fail("Registry validation failed."),Ji(e$1),e.break();for(let[r,n]of Array.from(Rf(e$1))){e.log(d.info(Ki(r,e$1.cwd)));for(let o of n)e.error(` - ${vf(o)}`),o.suggestion&&e.log(` ${o.suggestion}`);e.break();}}function Ji(e$1,t={}){let r=`Checked ${Hi(e$1.registryFiles,"registry file","registry files")} and ${Hi(e$1.items,"item","items")}.`;t.success?xf(r):e.log(` ${r}`);for(let n of e$1.registryFilePaths)e.log(` - ${Ki(n,e$1.cwd)}`);}function Rf(e){let t=new Map;for(let r of e.diagnostics){let n=t.get(r.registryFile)??[];n.push(r),t.set(r.registryFile,n);}return t}function vf(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 Ki(e,t){let r=T.relative(t,e);return r&&!r.startsWith("..")&&!T.isAbsolute(r)?r.split(T.sep).join("/"):r?e:"."}function xf(e){E(e).succeed();}function Hi(e,t,r){return `${e} ${e===1?t:r}`}var Yi=new Command().name("registry").description("manage registries").addCommand(Li).addCommand(Gi);var Pf=z.object({cwd:z.string(),query:z.string().optional(),limit:z.number().optional(),offset:z.number().optional()}),Xi=new Command().name("search").alias("list").description("search items from registries").argument("<registries...>","the registry names or urls to search items from. Names must be prefixed with @.").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-q, --query <query>","query string").option("-l, --limit <number>","maximum number of items to display per registry","100").option("-o, --offset <number>","number of items to skip","0").action(async(e,t)=>{try{let r=Pf.parse({cwd:T__default.resolve(t.cwd),query:t.query,limit:t.limit?parseInt(t.limit,10):void 0,offset:t.offset?parseInt(t.offset,10):void 0});await ee(r.cwd);let n=ba$1({style:"new-york",resolvedPaths:{cwd:r.cwd}}),o=ca$1(n),i=T__default.resolve(r.cwd,"components.json");if(L.existsSync(i)){let m=await L.readJson(i),p=c.partial().parse(m);o=ca$1({...n,...p});}let s=o;try{let m=await X$1(r.cwd);m&&(s=ca$1(m));}catch{}let{config:l,newRegistries:a}=await B(e.map(m=>`${m}/registry`),s,{silent:!0,writeFile:!1});a.length>0&&(s.registries=l.registries),ea$1(e,s);let f=await Ma$1(e,{query:r.query,limit:r.limit,offset:r.offset,config:s});console.log(JSON.stringify(f,null,2)),process.exit(0);}catch(r){ma(r);}finally{da();}});var Ef=z.object({cwd:z.string()}),rs=new Command().name("view").description("view items from the registry").argument("<items...>","the item names or URLs to view").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{try{let r=Ef.parse({cwd:T__default.resolve(t.cwd)});await ee(r.cwd);let n=ca$1({}),o=T__default.resolve(r.cwd,"components.json");if(L.existsSync(o)){let f=await L.readJson(o),m=c.partial().parse(f);n=ca$1(m);}let i=n;try{let f=await X$1(r.cwd);f&&(i=ca$1(f));}catch{}let{config:s,newRegistries:l}=await B(e,i,{silent:!0,writeFile:!1});l.length>0&&(i.registries=s.registries),ea$1(e,i);let a=await oa$1(e,{config:i});console.log(JSON.stringify(a,null,2)),process.exit(0);}catch(r){ma(r);}finally{da();}});process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function jf(){let e=new Command().name("shadcn").description("build your component library").version(la.version||"1.0.0","-v, --version","display the version number");e.addCommand(Ao).addCommand(Xo).addCommand(Go).addCommand(ii).addCommand(ai).addCommand(rs).addCommand(Xi).addCommand(Oi).addCommand(xi).addCommand(ni).addCommand(Kr).addCommand(en).addCommand(Yi),e.parse();}jf();