shadcn 4.12.0 → 4.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {Qa,Oa,Pa,qa,k,ma,sa,Ra}from'./chunk-
|
|
1
|
+
import {Qa,Oa,Pa,qa,k,ma,sa,Ra}from'./chunk-G7PLOKI6.js';import {Server}from'@modelcontextprotocol/sdk/server/index.js';import {ListToolsRequestSchema,CallToolRequestSchema}from'@modelcontextprotocol/sdk/types.js';import m from'dedent';import {z}from'zod';import {zodToJsonSchema}from'zod-to-json-schema';var R="shadcn@latest";async function u(r){return `${await ma(process.cwd())} ${R} ${r}`}async function d(r=process.cwd()){return {registries:(await sa(r,{useCache:false})).registries}}function _(r,t){let{query:n,registries:i}=t||{},o=r.items.map(c=>{let g=[`- ${c.name}`];return c.type&&g.push(`(${c.type})`),c.description&&g.push(`- ${c.description}`),c.registry&&g.push(`[${c.registry}]`),g.push(`
|
|
2
2
|
Add command: \`${u(`add ${c.addCommandArgument}`)}\``),g.join(" ")}),a=`Found ${r.pagination.total} items`;n&&(a+=` matching "${n}"`),i&&i.length>0&&(a+=` in registries ${i.join(", ")}`),a+=":";let s=`Showing items ${r.pagination.offset+1}-${Math.min(r.pagination.offset+r.pagination.limit,r.pagination.total)} of ${r.pagination.total}:`,p=`${a}
|
|
3
3
|
|
|
4
4
|
${s}
|
|
@@ -17,7 +17,7 @@ ${t.errors.map(i=>` - ${i.path.join(".")}: ${i.message}`).join(`
|
|
|
17
17
|
`)}`;}super(r,{code:N.PARSE_ERROR,cause:t,context:{parseError:t},suggestion:"The registries index may be corrupted or have invalid registry namespace format. Registry names must start with @ (e.g., @shadcn, @example)."}),this.parseError=t,this.name="RegistriesIndexParseError";}};var Ro=/^(@[a-zA-Z0-9](?:[a-zA-Z0-9-_]*[a-zA-Z0-9])?)\/(.+)$/;function ce(e){if(!e.startsWith("@"))return {registry:null,item:e};let t=e.match(Ro);return t?{registry:t[1],item:t[2]}:{registry:null,item:e}}var z={"next-app":{name:"next-app",label:"Next.js",links:{installation:`${F}/docs/installation/next`,tailwind:"https://tailwindcss.com/docs/guides/nextjs"}},"next-pages":{name:"next-pages",label:"Next.js",links:{installation:`${F}/docs/installation/next`,tailwind:"https://tailwindcss.com/docs/guides/nextjs"}},remix:{name:"remix",label:"Remix",links:{installation:`${F}/docs/installation/remix`,tailwind:"https://tailwindcss.com/docs/guides/remix"}},"react-router":{name:"react-router",label:"React Router",links:{installation:`${F}/docs/installation/react-router`,tailwind:"https://tailwindcss.com/docs/installation/framework-guides/react-router"}},vite:{name:"vite",label:"Vite",links:{installation:`${F}/docs/installation/vite`,tailwind:"https://tailwindcss.com/docs/guides/vite"}},astro:{name:"astro",label:"Astro",links:{installation:`${F}/docs/installation/astro`,tailwind:"https://tailwindcss.com/docs/guides/astro"}},laravel:{name:"laravel",label:"Laravel",links:{installation:`${F}/docs/installation/laravel`,tailwind:"https://tailwindcss.com/docs/guides/laravel"}},"tanstack-start":{name:"tanstack-start",label:"TanStack Start",links:{installation:`${F}/docs/installation/tanstack`,tailwind:"https://tailwindcss.com/docs/installation/using-postcss"}},gatsby:{name:"gatsby",label:"Gatsby",links:{installation:`${F}/docs/installation/gatsby`,tailwind:"https://tailwindcss.com/docs/guides/gatsby"}},expo:{name:"expo",label:"Expo",links:{installation:`${F}/docs/installation/expo`,tailwind:"https://www.nativewind.dev/docs/getting-started/installation"}},manual:{name:"manual",label:"Manual",links:{installation:`${F}/docs/installation/manual`,tailwind:"https://tailwindcss.com/docs/installation"}}};var T={error:red,warn:yellow,info:cyan,success:green};function gt(e){let t=[e];for(;t.length;){let r=t.shift();if(typeof r=="string"){if(r.startsWith("./"))return r;continue}if(Array.isArray(r)){t.unshift(...r);continue}r&&typeof r=="object"&&t.unshift(...Object.values(r));}return null}function yt(e){if(!e.includes("*"))return "strip_extension";let t=e.slice(e.indexOf("*")+1);return t&&/^\.[^/]+$/.test(t)?"strip_extension":"preserve_extension"}function wt(e,t){let r=t.find(i=>!i.hasWildcard&&i.key===e);if(r)return {path:R__default.resolve(r.rootDir,r.target),matchedAlias:r.key,matchedTarget:r.target,emitMode:r.emitMode};let s=t.filter(i=>i.hasWildcard).sort((i,n)=>n.key.length-i.key.length);for(let i of s){let n=Bt(e,i.key,{allowBareAliasBase:true});if(n!==null)return {path:R__default.resolve(i.rootDir,$o(i.target,n)),matchedAlias:i.key,matchedTarget:i.target,emitMode:i.emitMode}}return null}function Bt(e,t,r={}){if(!t.includes("*"))return e===t?"":null;let[s,i=""]=t.split("*");return e.startsWith(s)&&e.endsWith(i)?i?e.slice(s.length,-i.length):e.slice(s.length):r.allowBareAliasBase&&i===""&&s.endsWith("/")&&e===s.slice(0,-1)?"":null}function $o(e,t){if(!e.includes("*"))return e;let[r,s=""]=e.split("*");return t?`${r}${t}${s}`:r.replace(/\/$/,"")}function le(e="",t=true){let r=R__default.join(e,"package.json");return K.readJSONSync(r,{throws:t})}var Jt=new Map;function Yt(e){let t=R__default.resolve(e),r=Jt.get(t);if(r)return r;let i=le(e,false)?.imports;if(!i||typeof i!="object"||Array.isArray(i))return Jt.set(t,[]),[];let n=[];for(let[o,c]of Object.entries(i)){if(!o.startsWith("#"))continue;let a=gt(c);a&&n.push({key:o,aliasBase:o==="#*"?"#":o.endsWith("/*")?o.slice(0,-2):o,target:a,emitMode:yt(a),hasWildcard:o.includes("*"),rootDir:t});}return Jt.set(t,n),n}function js(e){let t=Yt(e).map(r=>r.aliasBase);return t.length?jo(t):null}function qe(e,t){return wt(e,Yt(t))}function _s(e){let t=Yt(e),r=t.some(s=>s.key==="#*")?{components:"#components",ui:"#components/ui",lib:"#lib",hooks:"#hooks",utils:"#lib/utils"}:null;return {components:Ke(t,"components")??r?.components,ui:Ke(t,"ui")??r?.ui,lib:Ke(t,"lib")??r?.lib,hooks:Ke(t,"hooks")??r?.hooks,utils:Ke(t,"utils")??r?.utils}}function Ke(e,t){return e.map(s=>({entry:s,score:Ao(s,t)})).filter(s=>s.score>0).sort((s,i)=>i.score-s.score||i.entry.aliasBase.length-s.entry.aliasBase.length)[0]?.entry.aliasBase}function Ao(e,t){let r=e.aliasBase.toLowerCase(),s=Oo(e.target).toLowerCase();switch(t){case "components":return r.endsWith("/ui")||s.includes("/components/ui")?0:xt(r,"components")?4:xt(s,"components")?3:0;case "ui":return r.endsWith("/ui")||r==="#ui"?5:s.includes("/components/ui")?4:s.endsWith("/ui")?3:0;case "lib":return r==="#lib"||r.endsWith("/lib")?5:s.endsWith("/lib")?4:xt(s,"lib")?3:0;case "hooks":return r==="#hooks"||r.endsWith("/hooks")?5:s.endsWith("/hooks")?4:xt(s,"hooks")?3:0;case "utils":return r==="#utils"||r.endsWith("/utils")?5:s.endsWith("/lib/utils")?4:s.endsWith("/utils")?3:0}}function Oo(e){return e.replace(/\/\*$/,"").replace(/\*$/,"").replace(/\/index\.[^/]+$/,"")}function xt(e,t){return e===t||e.includes(`/${t}`)||e.includes(`${t}/`)}function jo(e){let t=e.map(r=>r.slice(1).split("/").filter(Boolean)).reduce((r,s,i)=>i?r.filter((n,o)=>s[o]===n):s,[]);return t.length?`#${t.join("/")}`:"#"}var S={error(...e){console.log(T.error(e.join(" ")));},warn(...e){console.log(T.warn(e.join(" ")));},info(...e){console.log(T.info(e.join(" ")));},success(...e){console.log(T.success(e.join(" ")));},log(...e){console.log(e.join(" "));},break(){console.log("");}};var _o=["next.config.*","vite.config.*","astro.config.*","remix.config.*","nuxt.config.*","svelte.config.*","gatsby-config.*","angular.json"];async function lf(e){if(K.existsSync(R__default.resolve(e,"pnpm-workspace.yaml")))return true;let t=R__default.resolve(e,"package.json");if(K.existsSync(t))try{if((await K.readJson(t)).workspaces)return !0}catch{}return !!(K.existsSync(R__default.resolve(e,"lerna.json"))||K.existsSync(R__default.resolve(e,"nx.json")))}async function uf(e){let t=await vt(e);if(!t.length)return [];let r=await Ct(t,{cwd:e,onlyDirectories:true,ignore:["**/node_modules/**"]}),s=[];for(let i of r){let n=R__default.resolve(e,i);if(!K.existsSync(R__default.resolve(n,"package.json")))continue;let o=K.existsSync(R__default.resolve(n,"components.json")),c=_o.some(a=>Ct.sync(a,{cwd:n,dot:true}).length>0);(o||c)&&s.push({name:i,hasConfig:o});}return s}function hf(e,t,r){let s=r?.cwdFlag??"-c";S.break(),S.log(`It looks like you are running ${T.info(e)} from a monorepo root.`),S.log(`To use shadcn in a specific workspace, use the ${T.info(s)} flag:`),S.break();for(let i of t)S.log(` shadcn ${e} ${s} ${i.name}`);S.break();}async function vt(e){let t=[],r=R__default.resolve(e,"pnpm-workspace.yaml");if(K.existsSync(r)){let i=await K.readFile(r,"utf8");t.push(...No(i));}let s=R__default.resolve(e,"package.json");if(K.existsSync(s))try{let i=await K.readJson(s),n=Array.isArray(i.workspaces)?i.workspaces:i.workspaces?.packages;Array.isArray(n)&&t.push(...n.filter(o=>!o.startsWith("!")));}catch{}return Array.from(new Set(t))}function No(e){let t=[],r=false,s=0;for(let i of e.split(`
|
|
18
18
|
`)){let n=i.trim();if(!n||n.startsWith("#"))continue;let o=i.match(/^(\s*)([A-Za-z0-9_-]+)\s*:/);if(o){s=o[1].length,r=o[2]==="packages";continue}if(!r)continue;let c=i.match(/^(\s*)-\s*(.+?)\s*(?:#.*)?$/);!c||c[1].length<=s||t.push(c[2].trim().replace(/^["']|["']$/g,""));}return t}var Ms=new Map,Zt=new Map,bt=new Map;async function Ls(e,t){let r=Vo(e);if(!r)return null;let s=await Do(t,r.packageName);return s?wt(e,Fo(s)):null}function Fo(e){let t=`${e.packageRoot}:${e.packageName}`,r=Zt.get(t);if(r)return r;let i=le(e.packageRoot,false)?.exports;if(!i||typeof i!="object"||Array.isArray(i))return Zt.set(t,[]),[];let n=[];for(let[o,c]of Object.entries(i)){if(o!=="."&&!o.startsWith("./"))continue;let a=gt(c);if(!a)continue;let h=Go(e.packageName,o);n.push({key:o.includes("*")?`${h}/*`:h,aliasBase:h,target:a,emitMode:yt(a),hasWildcard:o.includes("*"),rootDir:e.packageRoot});}return Zt.set(t,n),n}async function Do(e,t){let r=await Ho(e);if(!r)return null;let s=Ms.get(r);if(s?.has(t))return s.get(t)??null;let i=await Wo(r);return Ms.set(r,i),i.get(t)??null}async function Wo(e){let t=await vt(e),r=new Map;if(!t.length)return r;let s=await Ct(t.map(i=>R__default.posix.join(i.split(R__default.sep).join("/"),"package.json")),{cwd:e,ignore:["**/node_modules/**"]});for(let i of s){let n=R__default.resolve(e,R__default.dirname(i)),c=le(n,false)?.name;c&&r.set(c,{packageName:c,packageRoot:n});}return r}async function Ho(e){let t=R__default.resolve(e),r=bt.get(t);if(r!==void 0)return r;let s=t,i=await zo(t);for(;;){if((await vt(s)).length)return bt.set(t,s),s;if(i&&s===i)return bt.set(t,null),null;let o=R__default.dirname(s);if(o===s)return bt.set(t,null),null;s=o;}}async function zo(e){let t=R__default.resolve(e);for(;;){if(K.existsSync(R__default.resolve(t,".git")))return t;let r=R__default.dirname(t);if(r===t)return null;t=r;}}function Vo(e){if(e.startsWith("#")||e.startsWith(".")||R__default.isAbsolute(e))return null;let t=e.split("/");return e.startsWith("@")?t.length<2?null:{packageName:`${t[0]}/${t[1]}`}:{packageName:t[0]}}function Go(e,t){if(t===".")return e;let r=t.slice(2).replace(/\/\*$/,"");return r?`${e}/${r}`:e}async function Rt(e,t){let r=t.cwd??t.absoluteBaseUrl;if(e.startsWith("#")){let i=qe(e,r);if(i)return {path:i.path,source:"package_imports",matchedAlias:i.matchedAlias,matchedTarget:i.matchedTarget,emitMode:i.emitMode}}let s=await Ls(e,r);return s?{path:s.path,source:"workspace_package_exports",matchedAlias:s.matchedAlias,matchedTarget:s.matchedTarget,emitMode:s.emitMode}:qo(e,t)}function Fs(e,t){return e.startsWith("#")?true:t?e.startsWith(`${t}/`):false}function Ko(e){return /^@[^/]+\/[^/]+(?:\/.*)?$/.test(e)}function qo(e,t){let r=createMatchPath(t.absoluteBaseUrl,t.paths)(e,void 0,()=>true,[".ts",".tsx",".jsx",".js",".css"]);if(!r)return null;let s=Bo(e,t.paths);return !s&&Ko(e)?null:{path:r,source:"tsconfig_paths",matchedAlias:s?.key??e,matchedTarget:s?.target??r,emitMode:"strip_extension"}}function Bo(e,t){for(let[r,s]of Object.entries(t)){let i=Array.isArray(s)?s:[s],n=Bt(e,r);if(n!==null)return {key:r,target:i[0]?.includes("*")&&n!==null?i[0].replace(/\*/g,n):i[0]}}return null}var _f="@/components",Nf="@/lib/utils",Mf="app/globals.css",Lf="tailwind.config.js";var Et=cosmiconfig("components",{searchPlaces:["components.json"]});async function Je(e){let t=await Qo(e);return t?(t.iconLibrary||(t.iconLibrary=t.style==="new-york"?"radix":"lucide"),await It(e,t)):null}async function It(e,t){t.registries={...D,...t.registries||{}};let r=await loadConfig(e);if(r.resultType==="failed")throw new Error(`Failed to load ${t.tsx?"tsconfig":"jsconfig"}.json. ${r.message??""}`.trim());let s=await Be("utils",t.aliases.utils,e,r),i=await Be("components",t.aliases.components,e,r),n=t.aliases.ui?await Be("ui",t.aliases.ui,e,r):R__default.resolve(i??e,"ui"),o=t.aliases.lib?await Be("lib",t.aliases.lib,e,r):R__default.resolve(s??e,".."),c=t.aliases.hooks?await Be("hooks",t.aliases.hooks,e,r):R__default.resolve(i??e,"..","hooks");return Xo(e,{components:i,utils:s,ui:n,lib:o,hooks:c}),d$1.parse({...t,resolvedPaths:{cwd:e,tailwindConfig:t.tailwind.config?R__default.resolve(e,t.tailwind.config):"",tailwindCss:R__default.resolve(e,t.tailwind.css),utils:s,components:i,ui:n,lib:o,hooks:c}})}async function Be(e,t,r,s){let i=await Rt(t,{...s,cwd:r});if(!i?.path||t.startsWith("#")&&i.path===R__default.resolve(r,t))return null;if(e!=="utils"&&(i.source==="package_imports"||i.source==="workspace_package_exports")){if(!i.matchedAlias.includes("*")&&/\/index\.[^/]+$/.test(i.path))return R__default.dirname(i.path);if(i.matchedAlias.includes("*")&&/\.[^/]+$/.test(i.path))return i.path.replace(/\.[^/]+$/,"")}return i.path}function Xo(e,t){let r=["components","ui","lib","hooks","utils"].filter(s=>!t[s]);if(r.length)throw new Error([`Could not resolve the following aliases in ${T.info(e)}: ${T.info(r.join(", "))}.`,`Configure path aliases in ${T.info("tsconfig.json")} or imports in ${T.info("package.json")} for this workspace and try again.`].join(`
|
|
19
19
|
`))}async function Qo(e){try{let t=await Et.search(e);if(!t)return null;let r=c$1.parse(t.config);if(r.registries){for(let s of Object.keys(r.registries))if(s in D)throw new Error(`"${s}" is a built-in registry and cannot be overridden.`)}return r}catch(t){let r=`${e}/components.json`;throw t instanceof Error&&t.message.includes("reserved registry")?t:new Error(`Invalid configuration found in ${T.info(r)}.`)}}async function Ff(e$1){let t={};for(let s of Object.keys(e$1.aliases)){if(!ta(s,e$1))continue;let i=e$1.resolvedPaths[s],n=await ea(e$1.resolvedPaths.cwd,i);if(!n){t[s]=e$1;continue}let o=await Je(n);if(!o)throw new Error([`Could not load the workspace config in ${T.info(n)}.`,`Add ${T.info("components.json")} to this workspace and configure its path aliases or package imports, then try again.`].join(`
|
|
20
|
-
`));t[s]=o;}let r=e.safeParse(t);return r.success?r.data:null}async function ea(e,t){let r=ra(e,t),s=R__default.relative(r,t),n=(await Ct.glob("**/package.json",{cwd:r,deep:3,ignore:["**/node_modules/**","**/dist/**","**/build/**","**/public/**"]})).map(o=>R__default.dirname(o)).find(o=>s.startsWith(o));return n?R__default.join(r,n):null}function ta(e,t){return Object.keys(t.resolvedPaths).filter(r=>r!=="utils").includes(e)}function ra(e,t){let r=e.split(R__default.sep),s=t.split(R__default.sep),i=[];for(let n=0;n<Math.min(r.length,s.length)&&r[n]===s[n];n++)i.push(r[n]);return i.join(R__default.sep)}async function Ds(e,t){return (await re(e))?.tailwindVersion==="v4"?"new-york-v4":t}function Df(e){return e
|
|
20
|
+
`));t[s]=o;}let r=e.safeParse(t);return r.success?r.data:null}async function ea(e,t){let r=ra(e,t),s=R__default.relative(r,t),n=(await Ct.glob("**/package.json",{cwd:r,deep:3,ignore:["**/node_modules/**","**/dist/**","**/build/**","**/public/**"]})).map(o=>R__default.dirname(o)).find(o=>s.startsWith(o));return n?R__default.join(r,n):null}function ta(e,t){return Object.keys(t.resolvedPaths).filter(r=>r!=="utils").includes(e)}function ra(e,t){let r=e.split(R__default.sep),s=t.split(R__default.sep),i=[];for(let n=0;n<Math.min(r.length,s.length)&&r[n]===s[n];n++)i.push(r[n]);return i.join(R__default.sep)}async function Ds(e,t){return (await re(e))?.tailwindVersion==="v4"?"new-york-v4":t}function Df(e){return e===void 0||e.startsWith("base-")?"base":"radix"}function Ws(e){let t={resolvedPaths:{cwd:process.cwd(),tailwindConfig:"",tailwindCss:"",utils:"",components:"",ui:"",lib:"",hooks:""},style:"",tailwind:{config:"",css:"",baseColor:"",cssVariables:false},rsc:false,tsx:true,aliases:{components:"",utils:""},registries:{...D}};return e?{...t,...e,resolvedPaths:{...t.resolvedPaths,...e.resolvedPaths||{}},tailwind:{...t.tailwind,...e.tailwind||{}},aliases:{...t.aliases,...e.aliases||{}},registries:{...t.registries,...e.registries||{}}}:t}var $t=["**/node_modules/**",".next","public","dist","build"],na=z$1.object({compilerOptions:z$1.object({paths:z$1.record(z$1.string().or(z$1.array(z$1.string())))})});async function re(e,t){let[r,s,i,n,o,c,a,h]=await Promise.all([Ct.glob("**/{next,vite,astro,app}.config.*|gatsby-config.*|composer.json|react-router.config.*",{cwd:e,deep:3,ignore:$t}),K.pathExists(R__default.resolve(e,"src")),ua(e),ca(e),aa(e,t?.configCssFile),Hs(e),zs(e),le(e,false)]),l=await K.pathExists(R__default.resolve(e,`${s?"src/":""}app`)),u={framework:z.manual,isSrcDir:s,isRSC:false,isTsx:i,tailwindConfigFile:n,tailwindCssFile:o,tailwindVersion:c,frameworkVersion:null,aliasPrefix:a.prefix};if(r.find(f=>f.startsWith("next.config."))?.length)return u.framework=l?z["next-app"]:z["next-pages"],u.isRSC=l,u.frameworkVersion=await oa(u.framework,h),u;if(r.find(f=>f.startsWith("astro.config."))?.length)return u.framework=z.astro,u;if(r.find(f=>f.startsWith("gatsby-config."))?.length)return u.framework=z.gatsby,u;if(r.find(f=>f.startsWith("composer.json"))?.length)return u.framework=z.laravel,u;if(Object.keys(h?.dependencies??{}).find(f=>f.startsWith("@remix-run/")))return u.framework=z.remix,u;if([...Object.keys(h?.dependencies??{}),...Object.keys(h?.devDependencies??{})].find(f=>f.startsWith("@tanstack/react-start")))return u.framework=z["tanstack-start"],u;if(r.find(f=>f.startsWith("react-router.config."))?.length)return u.framework=z["react-router"],u;if(r.find(f=>f.startsWith("vite.config."))?.length)return u.framework=z.vite,u;let d=r.find(f=>f.startsWith("app.config"));return d?.length&&(await K.readFile(R__default.resolve(e,d),"utf8")).includes("defineConfig")?(u.framework=z.vite,u):(h?.dependencies?.expo&&(u.framework=z.expo),u)}async function oa(e,t){if(!t||!["next-app","next-pages"].includes(e.name))return null;let r=t.dependencies?.next||t.devDependencies?.next;if(!r)return null;let s=r.match(/^[\^~]?(\d+\.\d+\.\d+)/);if(s)return s[1];let i=r.match(/(\d+\.\d+\.\d+)/);return i?i[1]:r}async function Hs(e){let[t,r]=await Promise.all([le(e,false),Je(e)]);return r?.tailwind?.config===""?"v4":!t?.dependencies?.tailwindcss&&!t?.devDependencies?.tailwindcss?null:/^(?:\^|~)?3(?:\.\d+)*(?:-.*)?$/.test(t?.dependencies?.tailwindcss||t?.devDependencies?.tailwindcss||"")?"v3":"v4"}async function aa(e,t){if(t){let n=R__default.resolve(e,t);if(await K.pathExists(n))return t}let[r,s]=await Promise.all([Ct.glob(["**/*.css","**/*.scss"],{cwd:e,deep:5,ignore:$t}),Hs(e)]);if(!r.length)return null;for(let n of r){let o=await K.readFile(R__default.resolve(e,n),"utf8");if(o.includes('@import "tailwindcss"')||o.includes("@import 'tailwindcss'")||o.includes("@tailwind base"))return n}return null}async function ca(e){let t=await Ct.glob("tailwind.config.*",{cwd:e,deep:3,ignore:$t});return t.length?t[0]:null}async function la(e){let t=await loadConfig(e),r=t?.resultType==="success"&&Object.entries(t.paths).length?t.paths:(await ha(e))?.compilerOptions.paths;if(!r||!Object.entries(r).length)return null;for(let[s,i]of Object.entries(r)){let n=Array.isArray(i)?i:[i];if(n.includes("./*")||n.includes("./src/*")||n.includes("./app/*")||n.includes("./resources/js/*"))return s.replace(/\/\*$/,"")??null}return Object.keys(r)?.[0].replace(/\/\*$/,"")??null}async function zs(e){let t=await la(e),r=js(e);return r&&t?.startsWith("#")?{prefix:r,source:"package_imports"}:t?{prefix:t,source:"tsconfig_paths"}:r?{prefix:r,source:"package_imports"}:{prefix:null,source:null}}async function ua(e){return (await Ct.glob("tsconfig.*",{cwd:e,deep:1,ignore:$t})).length>0}async function ha(e){for(let t of ["tsconfig.json","tsconfig.web.json","tsconfig.app.json"]){let r=R__default.resolve(e,t);if(!await K.pathExists(r))continue;let s=await K.readFile(r,"utf8"),i;try{i=JSON.parse(fa(s));}catch{continue}let n=na.safeParse(i);if(!n.error)return n.data}return null}function fa(e){let t="",r=false,s=false;for(let i=0;i<e.length;i++){let n=e[i],o=e[i+1];if(r){if(t+=n,s){s=false;continue}if(n==="\\"){s=true;continue}n==='"'&&(r=false);continue}if(n==='"'){r=true,t+=n;continue}if(n==="/"&&o==="/"){for(;i<e.length&&e[i]!==`
|
|
21
21
|
`;)i++;i<e.length&&(t+=e[i]);continue}if(n==="/"&&o==="*"){for(i+=2;i<e.length;){if(e[i]==="*"&&e[i+1]==="/"){i++;break}e[i]===`
|
|
22
22
|
`&&(t+=`
|
|
23
23
|
`),i++;}continue}if(n===","){let c=i+1;for(;c<e.length;){for(;/\s/.test(e[c]??"");)c++;if(e[c]==="/"&&e[c+1]==="/"){for(c+=2;c<e.length&&e[c]!==`
|
|
@@ -91,7 +91,7 @@ Filtered results for: ${this.inputValue?this.inputValue:e.gray("Enter something
|
|
|
91
91
|
`}renderOption(a,h,l,u){let d=(h.selected?e.green(n.radioOn):n.radioOff)+" "+u+" ",f;return h.disabled?f=a===l?e.gray().underline(h.title):e.strikethrough().gray(h.title):f=a===l?e.cyan().underline(h.title):h.title,d+f}renderDoneOrInstructions(){if(this.done)return this.value.filter(h=>h.selected).map(h=>h.title).join(", ");let a=[e.gray(this.hint),this.renderInstructions(),this.renderCurrentInput()];return this.filteredOptions.length&&this.filteredOptions[this.cursor].disabled&&a.push(e.yellow(this.warn)),a.join(" ")}render(){if(this.closed)return;this.firstRender&&this.out.write(t.hide),super.render();let a=[i.symbol(this.done,this.aborted),e.bold(this.msg),i.delimiter(false),this.renderDoneOrInstructions()].join(" ");this.showMinError&&(a+=e.red(`You must select a minimum of ${this.minSelected} choices.`),this.showMinError=false),a+=this.renderOptions(this.filteredOptions),this.out.write(this.clear+a),this.clear=s(a,this.out.columns);}}return Br=o,Br}var Jr,Mn;function ju(){if(Mn)return Jr;Mn=1;let e=B(),t=we(),{style:r,clear:s}=X(),{erase:i,cursor:n}=J();class o extends t{constructor(a={}){super(a),this.msg=a.message,this.value=a.initial,this.initialValue=!!a.initial,this.yesMsg=a.yes||"yes",this.yesOption=a.yesOption||"(Y/n)",this.noMsg=a.no||"no",this.noOption=a.noOption||"(y/N)",this.render();}reset(){this.value=this.initialValue,this.fire(),this.render();}exit(){this.abort();}abort(){this.done=this.aborted=true,this.fire(),this.render(),this.out.write(`
|
|
92
92
|
`),this.close();}submit(){this.value=this.value||false,this.done=true,this.aborted=false,this.fire(),this.render(),this.out.write(`
|
|
93
93
|
`),this.close();}_(a,h){return a.toLowerCase()==="y"?(this.value=true,this.submit()):a.toLowerCase()==="n"?(this.value=false,this.submit()):this.bell()}render(){this.closed||(this.firstRender?this.out.write(n.hide):this.out.write(s(this.outputText,this.out.columns)),super.render(),this.outputText=[r.symbol(this.done,this.aborted),e.bold(this.msg),r.delimiter(this.done),this.done?this.value?this.yesMsg:this.noMsg:e.gray(this.initialValue?this.yesOption:this.noOption)].join(" "),this.out.write(i.line+n.to(0)+this.outputText));}}return Jr=o,Jr}var Yr,Ln;function _u(){return Ln||(Ln=1,Yr={TextPrompt:yu(),SelectPrompt:wu(),TogglePrompt:xu(),DatePrompt:Tu(),NumberPrompt:Pu(),MultiselectPrompt:eo(),AutocompletePrompt:Au(),AutocompleteMultiselectPrompt:Ou(),ConfirmPrompt:ju()}),Yr}var Fn;function Nu(){return Fn||(Fn=1,(function(e){let t=e,r=_u(),s=o=>o;function i(o,c,a={}){return new Promise((h,l)=>{let u=new r[o](c),d=a.onAbort||s,f=a.onSubmit||s,p=a.onExit||s;u.on("state",c.onState||s),u.on("submit",y=>h(f(y))),u.on("exit",y=>h(p(y))),u.on("abort",y=>l(d(y)));})}t.text=o=>i("TextPrompt",o),t.password=o=>(o.style="password",t.text(o)),t.invisible=o=>(o.style="invisible",t.text(o)),t.number=o=>i("NumberPrompt",o),t.date=o=>i("DatePrompt",o),t.confirm=o=>i("ConfirmPrompt",o),t.list=o=>{let c=o.separator||",";return i("TextPrompt",o,{onSubmit:a=>a.split(c).map(h=>h.trim())})},t.toggle=o=>i("TogglePrompt",o),t.select=o=>i("SelectPrompt",o),t.multiselect=o=>{o.choices=[].concat(o.choices||[]);let c=a=>a.filter(h=>h.selected).map(h=>h.value);return i("MultiselectPrompt",o,{onAbort:c,onSubmit:c})},t.autocompleteMultiselect=o=>{o.choices=[].concat(o.choices||[]);let c=a=>a.filter(h=>h.selected).map(h=>h.value);return i("AutocompleteMultiselectPrompt",o,{onAbort:c,onSubmit:c})};let n=(o,c)=>Promise.resolve(c.filter(a=>a.title.slice(0,o.length).toLowerCase()===o.toLowerCase()));t.autocomplete=o=>(o.suggest=o.suggest||n,o.choices=[].concat(o.choices||[]),i("AutocompletePrompt",o));})(wr)),wr}var Zr,Dn;function Mu(){if(Dn)return Zr;Dn=1;let e=Nu(),t=["suggest","format","onState","validate","onRender","type"],r=()=>{};async function s(c=[],{onSubmit:a=r,onCancel:h=r}={}){let l={},u=s._override||{};c=[].concat(c);let d,f,p,y,m,x,g=async(w,v,b=false)=>{if(!(!b&&w.validate&&w.validate(v)!==true))return w.format?await w.format(v,l):v};for(f of c)if({name:y,type:m}=f,typeof m=="function"&&(m=await m(d,{...l},f),f.type=m),!!m){for(let w in f){if(t.includes(w))continue;let v=f[w];f[w]=typeof v=="function"?await v(d,{...l},x):v;}if(x=f,typeof f.message!="string")throw new Error("prompt message is required");if({name:y,type:m}=f,e[m]===void 0)throw new Error(`prompt type (${m}) is not defined`);if(u[f.name]!==void 0&&(d=await g(f,u[f.name]),d!==void 0)){l[y]=d;continue}try{d=s._injected?i(s._injected,f.initial):await e[m](f),l[y]=d=await g(f,d,!0),p=await a(f,d,l);}catch{p=!await h(f,l);}if(p)return l}return l}function i(c,a){let h=c.shift();if(h instanceof Error)throw h;return h===void 0?a:h}function n(c){s._injected=(s._injected||[]).concat(c);}function o(c){s._override=Object.assign({},c);}return Zr=Object.assign(s,{prompt:s,prompts:e,inject:n,override:o}),Zr}var Xr,Wn;function Lu(){return Wn||(Wn=1,Xr=Mu()),Xr}var Fu=Lu(),Du=is(Fu),os=globalThis.window?.document!==void 0;globalThis.process?.versions?.node;globalThis.process?.versions?.bun;globalThis.Deno?.version?.deno;globalThis.process?.versions?.electron;globalThis.navigator?.userAgent?.includes("jsdom");typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;typeof DedicatedWorkerGlobalScope<"u"&&globalThis instanceof DedicatedWorkerGlobalScope;typeof SharedWorkerGlobalScope<"u"&&globalThis instanceof SharedWorkerGlobalScope;typeof ServiceWorkerGlobalScope<"u"&&globalThis instanceof ServiceWorkerGlobalScope;var Ut=globalThis.navigator?.userAgentData?.platform;Ut==="macOS"||globalThis.navigator?.platform==="MacIntel"||globalThis.navigator?.userAgent?.includes(" Mac ")===true||globalThis.process?.platform;Ut==="Windows"||globalThis.navigator?.platform==="Win32"||globalThis.process?.platform;Ut==="Linux"||globalThis.navigator?.platform?.startsWith("Linux")===true||globalThis.navigator?.userAgent?.includes(" Linux ")===true||globalThis.process?.platform;Ut==="Android"||globalThis.navigator?.platform==="Android"||globalThis.navigator?.userAgent?.includes(" Android ")===true||globalThis.process?.platform;var Hn="\x1B]",zn="\x07",Gt=";";!os&&Z.env.TERM_PROGRAM;!os&&Z.platform;os||Z.cwd;var Wu=(e,t)=>[Hn,"8",Gt,Gt,t,zn,e,Hn,"8",Gt,Gt,zn].join(""),Qr,Vn;function to(){return Vn||(Vn=1,Qr=(e,t=process.argv)=>{let r=e.startsWith("-")?"":e.length===1?"-":"--",s=t.indexOf(r+e),i=t.indexOf("--");return s!==-1&&(i===-1||s<i)}),Qr}var es,Gn;function Hu(){if(Gn)return es;Gn=1;let e=ou,t=au,r=to(),{env:s}=process,i;r("no-color")||r("no-colors")||r("color=false")||r("color=never")?i=0:(r("color")||r("colors")||r("color=true")||r("color=always"))&&(i=1),"FORCE_COLOR"in s&&(s.FORCE_COLOR==="true"?i=1:s.FORCE_COLOR==="false"?i=0:i=s.FORCE_COLOR.length===0?1:Math.min(parseInt(s.FORCE_COLOR,10),3));function n(a){return a===0?false:{level:a,hasBasic:true,has256:a>=2,has16m:a>=3}}function o(a,h){if(i===0)return 0;if(r("color=16m")||r("color=full")||r("color=truecolor"))return 3;if(r("color=256"))return 2;if(a&&!h&&i===void 0)return 0;let l=i||0;if(s.TERM==="dumb")return l;if(process.platform==="win32"){let u=e.release().split(".");return Number(u[0])>=10&&Number(u[2])>=10586?Number(u[2])>=14931?3:2:1}if("CI"in s)return ["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(u=>u in s)||s.CI_NAME==="codeship"?1:l;if("TEAMCITY_VERSION"in s)return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(s.TEAMCITY_VERSION)?1:0;if(s.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in s){let u=parseInt((s.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(s.TERM_PROGRAM){case "iTerm.app":return u>=3?3:2;case "Apple_Terminal":return 2}}return /-256(color)?$/i.test(s.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(s.TERM)||"COLORTERM"in s?1:l}function c(a){let h=o(a,a&&a.isTTY);return n(h)}return es={supportsColor:c,stdout:n(o(true,t.isatty(1))),stderr:n(o(true,t.isatty(2)))},es}var ts,Un;function zu(){if(Un)return ts;Un=1;let e=Hu(),t=to();function r(i){if(/^\d{3,4}$/.test(i)){let o=/(\d{1,2})(\d{2})/.exec(i)||[];return {major:0,minor:parseInt(o[1],10),patch:parseInt(o[2],10)}}let n=(i||"").split(".").map(o=>parseInt(o,10));return {major:n[0],minor:n[1],patch:n[2]}}function s(i){let{CI:n,FORCE_HYPERLINK:o,NETLIFY:c,TEAMCITY_VERSION:a,TERM_PROGRAM:h,TERM_PROGRAM_VERSION:l,VTE_VERSION:u,TERM:d}=process.env;if(o)return !(o.length>0&&parseInt(o,10)===0);if(t("no-hyperlink")||t("no-hyperlinks")||t("hyperlink=false")||t("hyperlink=never"))return false;if(t("hyperlink=true")||t("hyperlink=always")||c)return true;if(!e.supportsColor(i)||i&&!i.isTTY)return false;if("WT_SESSION"in process.env)return true;if(process.platform==="win32"||n||a)return false;if(h){let f=r(l||"");switch(h){case "iTerm.app":return f.major===3?f.minor>=1:f.major>3;case "WezTerm":return f.major>=20200620;case "vscode":return f.major>1||f.major===1&&f.minor>=72;case "ghostty":return true}}if(u){if(u==="0.50.0")return false;let f=r(u);return f.major>0||f.minor>=50}switch(d){case "alacritty":return true}return false}return ts={supportsHyperlink:s,stdout:s(process.stdout),stderr:s(process.stderr)},ts}var Vu=zu(),as=is(Vu);function it(e,t,{target:r="stdout",...s}={}){return as[r]?Wu(e,t):s.fallback===false?e:typeof s.fallback=="function"?s.fallback(e,t):`${e} (\u200B${t}\u200B)`}it.isSupported=as.stdout;it.stderr=(e,t,r={})=>it(e,t,{target:"stderr",...r});it.stderr.isSupported=as.stderr;var q={},Ce={},Kn;function Gu(){if(Kn)return Ce;Kn=1,Object.defineProperty(Ce,"__esModule",{value:true}),Ce.sync=Ce.isexe=void 0;let e=Zn,t=Qi__default,r=async(o,c={})=>{let{ignoreErrors:a=false}=c;try{return i(await(0,t.stat)(o),c)}catch(h){let l=h;if(a||l.code==="EACCES")return false;throw l}};Ce.isexe=r;let s=(o,c={})=>{let{ignoreErrors:a=false}=c;try{return i((0,e.statSync)(o),c)}catch(h){let l=h;if(a||l.code==="EACCES")return false;throw l}};Ce.sync=s;let i=(o,c)=>o.isFile()&&n(o,c),n=(o,c)=>{let a=c.uid??process.getuid?.(),h=c.groups??process.getgroups?.()??[],l=c.gid??process.getgid?.()??h[0];if(a===void 0||l===void 0)throw new Error("cannot get uid or gid");let u=new Set([l,...h]),d=o.mode,f=o.uid,p=o.gid,y=parseInt("100",8),m=parseInt("010",8),x=parseInt("001",8),g=y|m;return !!(d&x||d&m&&u.has(p)||d&y&&f===a||d&g&&a===0)};return Ce}var $e={},qn;function Uu(){if(qn)return $e;qn=1,Object.defineProperty($e,"__esModule",{value:true}),$e.sync=$e.isexe=void 0;let e=Zn,t=Qi__default,r=async(o,c={})=>{let{ignoreErrors:a=false}=c;try{return n(await(0,t.stat)(o),o,c)}catch(h){let l=h;if(a||l.code==="EACCES")return false;throw l}};$e.isexe=r;let s=(o,c={})=>{let{ignoreErrors:a=false}=c;try{return n((0,e.statSync)(o),o,c)}catch(h){let l=h;if(a||l.code==="EACCES")return false;throw l}};$e.sync=s;let i=(o,c)=>{let{pathExt:a=process.env.PATHEXT||""}=c,h=a.split(";");if(h.indexOf("")!==-1)return true;for(let l=0;l<h.length;l++){let u=h[l].toLowerCase(),d=o.substring(o.length-u.length).toLowerCase();if(u&&d===u)return true}return false},n=(o,c,a)=>o.isFile()&&i(c,a);return $e}var rs={},Bn;function Ku(){return Bn||(Bn=1,Object.defineProperty(rs,"__esModule",{value:true})),rs}var Jn;function qu(){return Jn||(Jn=1,(function(e){var t=q&&q.__createBinding||(Object.create?(function(h,l,u,d){d===void 0&&(d=u);var f=Object.getOwnPropertyDescriptor(l,u);(!f||("get"in f?!l.__esModule:f.writable||f.configurable))&&(f={enumerable:true,get:function(){return l[u]}}),Object.defineProperty(h,d,f);}):(function(h,l,u,d){d===void 0&&(d=u),h[d]=l[u];})),r=q&&q.__setModuleDefault||(Object.create?(function(h,l){Object.defineProperty(h,"default",{enumerable:true,value:l});}):function(h,l){h.default=l;}),s=q&&q.__importStar||function(h){if(h&&h.__esModule)return h;var l={};if(h!=null)for(var u in h)u!=="default"&&Object.prototype.hasOwnProperty.call(h,u)&&t(l,h,u);return r(l,h),l},i=q&&q.__exportStar||function(h,l){for(var u in h)u!=="default"&&!Object.prototype.hasOwnProperty.call(l,u)&&t(l,h,u);};Object.defineProperty(e,"__esModule",{value:true}),e.sync=e.isexe=e.posix=e.win32=void 0;let n=s(Gu());e.posix=n;let o=s(Uu());e.win32=o,i(Ku(),e);let a=(process.env._ISEXE_TEST_PLATFORM_||process.platform)==="win32"?o:n;e.isexe=a.isexe,e.sync=a.sync;})(q)),q}var ss,Yn;function Bu(){if(Yn)return ss;Yn=1;let{isexe:e,sync:t}=qu(),{join:r,delimiter:s,sep:i,posix:n}=R__default,o=process.platform==="win32",c=new RegExp(`[${n.sep}${i===n.sep?"":i}]`.replace(/(\\)/g,"\\$1")),a=new RegExp(`^\\.${c.source}`),h=p=>Object.assign(new Error(`not found: ${p}`),{code:"ENOENT"}),l=(p,{path:y=process.env.PATH,pathExt:m=process.env.PATHEXT,delimiter:x=s})=>{let g=p.match(c)?[""]:[...o?[process.cwd()]:[],...(y||"").split(x)];if(o){let w=m||[".EXE",".CMD",".BAT",".COM"].join(x),v=w.split(x).flatMap(b=>[b,b.toLowerCase()]);return p.includes(".")&&v[0]!==""&&v.unshift(""),{pathEnv:g,pathExt:v,pathExtExe:w}}return {pathEnv:g,pathExt:[""]}},u=(p,y)=>{let m=/^".*"$/.test(p)?p.slice(1,-1):p;return (!m&&a.test(y)?y.slice(0,2):"")+r(m,y)},d=async(p,y={})=>{let{pathEnv:m,pathExt:x,pathExtExe:g}=l(p,y),w=[];for(let v of m){let b=u(v,p);for(let E of x){let P=b+E;if(await e(P,{pathExt:g,ignoreErrors:true})){if(!y.all)return P;w.push(P);}}}if(y.all&&w.length)return w;if(y.nothrow)return null;throw h(p)},f=(p,y={})=>{let{pathEnv:m,pathExt:x,pathExtExe:g}=l(p,y),w=[];for(let v of m){let b=u(v,p);for(let E of x){let P=b+E;if(t(P,{pathExt:g,ignoreErrors:true})){if(!y.all)return P;w.push(P);}}}if(y.all&&w.length)return w;if(y.nothrow)return null;throw h(p)};return ss=d,d.sync=f,ss}var Ju=Bu(),Yu=is(Ju);join(ou.tmpdir(),"antfu-ni");function ro(e){return Yu.sync(e,{nothrow:true})!==null}async function cs({autoInstall:e,programmatic:t,cwd:r}={}){let{name:s,agent:i,version:n}=await mr({cwd:r,onUnknown:o=>{t||console.warn("[ni] Unknown packageManager:",o);}})||{};if(s&&!ro(s)&&!t){if(!e){console.warn(`[ni] Detected ${s} but it doesn't seem to be installed.
|
|
94
|
-
`),Z.env.CI&&Z.exit(1);let o=it(s,Zi[s]),{tryInstall:c}=await Du({name:"tryInstall",type:"confirm",message:`Would you like to globally install ${o}?`});c||Z.exit(1);}await gr("npm",["i","-g",`${s}${n?`@${n}`:""}`],{nodeOptions:{stdio:"inherit",cwd:r},throwOnError:true});}return i}Z.env.NI_CONFIG_FILE;var Xu=Z.platform==="win32"?Z.env.USERPROFILE:Z.env.HOME;R__default.join(Xu||"~/",".nirc");async function Qu(e,{withFallback:t}={withFallback:false}){let r=await cs({programmatic:true,cwd:e});return r==="yarn@berry"?"yarn":r==="pnpm@6"?"pnpm":r==="bun"?"bun":r==="deno"?"deno":t?ls()??"npm":r??"npm"}function ls(e=process.env.npm_config_user_agent||""){return e.startsWith("yarn")?"yarn":e.startsWith("pnpm")?"pnpm":e.startsWith("bun")?"bun":e.startsWith("deno")?"deno":e.startsWith("npm")?"npm":null}function us(e){return e==="pnpm"?"pnpm dlx":e==="bun"?"bunx":"npx"}async function Hy(e){let t=await Qu(e);return us(t)}var so={name:"shadcn",version:"4.
|
|
94
|
+
`),Z.env.CI&&Z.exit(1);let o=it(s,Zi[s]),{tryInstall:c}=await Du({name:"tryInstall",type:"confirm",message:`Would you like to globally install ${o}?`});c||Z.exit(1);}await gr("npm",["i","-g",`${s}${n?`@${n}`:""}`],{nodeOptions:{stdio:"inherit",cwd:r},throwOnError:true});}return i}Z.env.NI_CONFIG_FILE;var Xu=Z.platform==="win32"?Z.env.USERPROFILE:Z.env.HOME;R__default.join(Xu||"~/",".nirc");async function Qu(e,{withFallback:t}={withFallback:false}){let r=await cs({programmatic:true,cwd:e});return r==="yarn@berry"?"yarn":r==="pnpm@6"?"pnpm":r==="bun"?"bun":r==="deno"?"deno":t?ls()??"npm":r??"npm"}function ls(e=process.env.npm_config_user_agent||""){return e.startsWith("yarn")?"yarn":e.startsWith("pnpm")?"pnpm":e.startsWith("bun")?"bun":e.startsWith("deno")?"deno":e.startsWith("npm")?"npm":null}function us(e){return e==="pnpm"?"pnpm dlx":e==="bun"?"bunx":"npx"}async function Hy(e){let t=await Qu(e);return us(t)}var so={name:"shadcn",version:"4.13.0",description:"Add components to your apps.",publishConfig:{access:"public"},license:"MIT",author:{name:"shadcn",url:"https://twitter.com/shadcn"},repository:{type:"git",url:"https://github.com/shadcn-ui/ui.git",directory:"packages/shadcn"},files:["dist"],keywords:["components","ui","tailwind","radix-ui","base-ui","shadcn"],type:"module",exports:{".":{types:"./dist/index.d.ts",default:"./dist/index.js"},"./registry":{types:"./dist/registry/index.d.ts",default:"./dist/registry/index.js"},"./schema":{types:"./dist/schema/index.d.ts",default:"./dist/schema/index.js"},"./mcp":{types:"./dist/mcp/index.d.ts",default:"./dist/mcp/index.js"},"./utils":{types:"./dist/utils/index.d.ts",default:"./dist/utils/index.js"},"./icons":{types:"./dist/icons/index.d.ts",default:"./dist/icons/index.js"},"./preset":{types:"./dist/preset/index.d.ts",default:"./dist/preset/index.js"},"./tailwind.css":"./dist/tailwind.css"},sideEffects:["./dist/tailwind.css"],bin:"./dist/index.js",engines:{node:">=20.18.1"},scripts:{dev:"tsup --watch",build:"tsup",typecheck:"tsc --noEmit",clean:"rimraf dist && rimraf components","start:dev":"cross-env REGISTRY_URL=http://localhost:4000/r SHADCN_TEMPLATE_DIR=../../templates node dist/index.js","start:prod":"cross-env REGISTRY_URL=https://ui.shadcn.com/r node dist/index.js",start:"node dist/index.js","format:write":'prettier --write "**/*.{ts,tsx,mdx}" --cache',"format:check":'prettier --check "**/*.{ts,tsx,mdx}" --cache',release:"changeset version","pub:beta":"pnpm build && pnpm publish --no-git-checks --access public --tag beta","pub:rc":"pnpm build && pnpm publish --no-git-checks --access public --tag rc","pub:next":"pnpm build && pnpm publish --no-git-checks --access public --tag next","pub:release":"pnpm build && pnpm publish --access public",test:"vitest run","test:dev":"REGISTRY_URL=http://localhost:4000/r SHADCN_TEMPLATE_DIR=../../templates vitest run","mcp:inspect":"pnpm dlx @modelcontextprotocol/inspector node dist/index.js mcp"},dependencies:{"@babel/core":"^7.28.0","@babel/parser":"^7.28.0","@babel/plugin-transform-typescript":"^7.28.0","@babel/preset-typescript":"^7.27.1","@dotenvx/dotenvx":"^1.48.4","@modelcontextprotocol/sdk":"^1.26.0","@types/validate-npm-package-name":"^4.0.2",browserslist:"^4.26.2",commander:"^14.0.0",cosmiconfig:"^9.0.0",dedent:"^1.6.0",deepmerge:"^4.3.1",diff:"^8.0.2",execa:"^9.6.0","fast-glob":"^3.3.3","fs-extra":"^11.3.1",fuzzysort:"^3.1.0",kleur:"^4.1.5",open:"^11.0.0",ora:"^8.2.0",postcss:"^8.5.6","postcss-selector-parser":"^7.1.0",prompts:"^2.4.2",recast:"^0.23.11","stringify-object":"^5.0.0","tailwind-merge":"^3.0.1","ts-morph":"^26.0.0","tsconfig-paths":"^4.2.0",undici:"^7.27.2","validate-npm-package-name":"^7.0.1",zod:"^3.24.1","zod-to-json-schema":"^3.24.6"},devDependencies:{"@antfu/ni":"^25.0.0","@types/babel__core":"^7.20.5","@types/fs-extra":"^11.0.4","@types/prompts":"^2.4.9","@types/stringify-object":"^4.0.5",msw:"^2.10.4",rimraf:"^6.0.1",tsup:"^8.5.0","type-fest":"^4.41.0",typescript:"^5.9.2"}};function Fe(e){if(S.break(),S.error("Something went wrong. Please check the error below for more details."),S.error("If the problem persists, please open an issue on GitHub."),S.error(""),typeof e=="string"&&(S.error(e),nt()),e instanceof j&&(e.message&&(S.error(e.cause?"Error:":"Message:"),S.error(e.message)),e.cause&&(S.error(`
|
|
95
95
|
Message:`),S.error(e.cause)),e.suggestion&&(S.error(`
|
|
96
96
|
Suggestion:`),S.error(e.suggestion)),nt()),e instanceof z$1.ZodError){S.error("Validation failed:");for(let[t,r]of Object.entries(e.flatten().fieldErrors))S.error(`- ${T.info(t)}: ${r}`);nt();}e instanceof Error&&(S.error(e.message),nt()),nt();}function rh(e){let t=e.match(/^(\d+)\.(\d+)\.\d+/);if(!t)return null;let r=Number.parseInt(t[1],10),s=Number.parseInt(t[2],10);return s===0?null:`${r}.${s-1}.0`}function sh(e=so.version,t=process.argv.slice(2)){let r=rh(e);return r?[...us(ls()).split(" "),`shadcn@${r}`,...t].map(ih).join(" "):null}function nt(){let e=sh();e&&(S.error(""),S.error("You can also try a previous version to see if that works:"),S.error(e)),S.break(),process.exit(1);}function ih(e){return /^[a-zA-Z0-9_./:@%+=,-]+$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}async function hs(e,t){let{config:r,useCache:s}=t||{};if(_(e)){let[a]=await L([e],{useCache:s});return io(e,a)}let i=Ze(e);if(i)return zi(i,{useCache:s});if(!e.startsWith("@"))throw new Ge(e);let n=e;n.endsWith("/registry")||(n=`${n}/registry`);let o=je(n,Oe(r));if(!o?.url)throw new ve(n);o.headers&&Object.keys(o.headers).length>0&&et({[o.url]:o.headers});let[c]=await L([o.url],{useCache:s});return io(n,c)}function io(e,t){try{let r=p.parse(t);if(r.include?.length)throw new C(`Registry catalog "${e}" uses "include", but consumer registry endpoints must serve a resolved registry catalog. Run "npx shadcn build" and serve the built registry.json, or use loadRegistry() in a dynamic route.`,{context:{registry:e,include:r.include},suggestion:"Serve a flattened registry.json for CLI consumers. Source registry.json files with include are supported by shadcn build and loadRegistry()."});return r}catch(r){throw r instanceof C?r:new M(e,r,{subject:"registry catalog",suggestion:"The registry catalog may be corrupted or have an invalid format. Please make sure it returns a valid registry.json object. See https://ui.shadcn.com/schema/registry.json."})}}async function oh(e,t){let{config:r,useCache:s=false}=t||{};return Ie(),me(e,Oe(r),{useCache:s})}async function ah(e,t){let{config:r,useCache:s=false}=t||{};return Ie(),Yi(e,Oe(r),{useCache:s})}async function mw(e,t){let{useCache:r=true}=t||{};r||Et.clearCaches();let s=await Et.search(e);if(!s)return {registries:D};let i=z$1.object({registries:b$1.optional()}).safeParse(s.config);if(!i.success)throw new mt(e,i.error);return {registries:{...D,...i.data.registries||{}}}}async function St(){try{let[e]=await L(["index.json"]);return q$1.parse(e)}catch(e){S.error(`
|
|
97
97
|
`),Fe(e);}}async function gw(){try{let[e]=await L(["styles/index.json"]);return r.parse(e)}catch(e){return S.error(`
|
package/dist/index.js
CHANGED
|
@@ -1,49 +1,49 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
2
|
+
import {r,q as q$1,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 {a as a$2}from'./chunk-AHVD7OOC.js';import {e,d,Q as Q$1,f,Fa as Fa$1,g,h,Ia,a,oa as oa$1,ea,Ga as Ga$1,Y,Z as Z$1,E,b,_ as _$1,X as X$1,ua as ua$1,wa as wa$1,V,W,T,Ha as Ha$1,ca as ca$1,qa as qa$1,R,c as c$1,ta,ba as ba$1,La as La$1,Ma,Na as Na$1,za as za$1,xa,Aa as Aa$1,J,F,G,I,H as H$1,y,la as la$1,Ba as Ba$1,ha as ha$1,S,Ra as Ra$1,Qa as Qa$1,da as da$1,Oa,fa as fa$1,Pa,Sa,ka as ka$1,ga as ga$1,Ca,va as va$1,na as na$1,x,ja,p as p$1,aa as aa$1,ia as ia$1,$,L as L$1,U,O,M,N as N$1,A as A$1,K,P,z as z$1,i as i$1,B,D,C}from'./chunk-G7PLOKI6.js';export{za as fetchTree,Aa as getItemTargetPath,Ea as getPreset,Da as getPresets,Ba as getRegistries,sa as getRegistriesConfig,Ca as getRegistriesIndex,pa as getRegistry,xa as getRegistryBaseColor,wa as getRegistryBaseColors,va as getRegistryIcons,qa as getRegistryItems,ua as getRegistryStyles,ta as getShadcnRegistryIndex,ra as resolveRegistryItems,ya as resolveTree}from'./chunk-G7PLOKI6.js';import {c,f as f$2,n}from'./chunk-MTWZIHEW.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 A from'path';import A__default,{join}from'path';import {promises,existsSync}from'fs';import L from'fs-extra';import bs from'open';import Ce from'prompts';import $o from'dedent';import Cs,{tmpdir}from'os';import {execa}from'execa';import $$1 from'postcss';import js from'postcss/lib/at-rule';import Zr,{z}from'zod';import {twMerge}from'tailwind-merge';import {Project,ScriptKind,SyntaxKind,VariableDeclarationKind,Node}from'ts-morph';import Po 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 bt from'fs/promises';import bt__default from'fs/promises';import {StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import {randomBytes}from'crypto';import en from'fast-glob';async function lo(e$1){let t={};if(!L.existsSync(e$1.cwd)||!L.existsSync(A__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(A__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
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 Fa$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=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 fo(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 ja([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 H(e,t,r={}){r={silent:false,writeFile:true,...r};let o=(await fo(e,t)).filter(f=>!t.registries?.[f]&&!Object.keys(b).includes(f));if(o.length===0)return {config:t,newRegistries:[]};let i=await Ca({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(),
|
|
6
|
-
`,"utf-8"),p.succeed();}return {config:a,newRegistries:Object.keys(s)}}var q={nova:{title:"Nova",description:"Lucide / Geist",style:"nova",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"lucide",font:"geist",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},vega:{title:"Vega",description:"Lucide / Inter",style:"vega",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"lucide",font:"inter",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},maia:{title:"Maia",description:"Hugeicons / Figtree",style:"maia",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"hugeicons",font:"figtree",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},lyra:{title:"Lyra",description:"Phosphor / JetBrains Mono",style:"lyra",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"phosphor",font:"jetbrains-mono",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},mira:{title:"Mira",description:"Hugeicons / Inter",style:"mira",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"hugeicons",font:"inter",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},luma:{title:"Luma",description:"Lucide / Inter",style:"luma",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"lucide",font:"inter",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},sera:{title:"Sera",description:"Lucide / Noto Sans + Playfair Display",style:"sera",baseColor:"taupe",theme:"taupe",chartColor:"taupe",iconLibrary:"lucide",font:"noto-sans",fontHeading:"playfair-display",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},rhea:{title:"Rhea",description:"Lucide / Inter",style:"rhea",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"lucide",font:"inter",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false}};function Ir(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 jr(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 Ce({type:"confirm",name:"proceed",message:"Open in browser?",initial:true});t&&await bs(e$1.createUrl);}function ge(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 Ye(){let{base:e}=await Ce({type:"select",name:"base",message:`Select a ${d.info("component library")}`,choices:[{title:"
|
|
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 fo(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 ja([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 H(e,t,r={}){r={silent:false,writeFile:true,...r};let o=(await fo(e,t)).filter(f=>!t.registries?.[f]&&!Object.keys(b).includes(f));if(o.length===0)return {config:t,newRegistries:[]};let i=await Ca({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(),h=c.parse(m);await L.writeFile(A__default.resolve(t.resolvedPaths.cwd,"components.json"),JSON.stringify(h,null,2)+`
|
|
6
|
+
`,"utf-8"),p.succeed();}return {config:a,newRegistries:Object.keys(s)}}var q={nova:{title:"Nova",description:"Lucide / Geist",style:"nova",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"lucide",font:"geist",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},vega:{title:"Vega",description:"Lucide / Inter",style:"vega",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"lucide",font:"inter",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},maia:{title:"Maia",description:"Hugeicons / Figtree",style:"maia",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"hugeicons",font:"figtree",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},lyra:{title:"Lyra",description:"Phosphor / JetBrains Mono",style:"lyra",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"phosphor",font:"jetbrains-mono",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},mira:{title:"Mira",description:"Hugeicons / Inter",style:"mira",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"hugeicons",font:"inter",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},luma:{title:"Luma",description:"Lucide / Inter",style:"luma",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"lucide",font:"inter",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},sera:{title:"Sera",description:"Lucide / Noto Sans + Playfair Display",style:"sera",baseColor:"taupe",theme:"taupe",chartColor:"taupe",iconLibrary:"lucide",font:"noto-sans",fontHeading:"playfair-display",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false},rhea:{title:"Rhea",description:"Lucide / Inter",style:"rhea",baseColor:"neutral",theme:"neutral",chartColor:"neutral",iconLibrary:"lucide",font:"inter",fontHeading:"inherit",menuAccent:"subtle",menuColor:"default",radius:"default",rtl:false}};function Ir(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 jr(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 Ce({type:"confirm",name:"proceed",message:"Open in browser?",initial:true});t&&await bs(e$1.createUrl);}function ge(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 Ye(){let{base:e}=await Ce({type:"select",name:"base",message:`Select a ${d.info("component library")}`,choices:[{title:"Base (Recommended)",value:"base"},{title:"Radix",value:"radix"}]});return e||process.exit(1),e}async function ct(e){let t=Object.entries(q),{selectedPreset:r}=await Ce({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=Ir({command:"init",rtl:e.rtl,pointer:e.pointer,base:e.base,...e.template&&{template:e.template}});await jr({createUrl:o,followUp:`Then ${d.info("copy and run the command")} from ui.shadcn.com.`}),process.exit(0);}let n=q[r];return n||process.exit(1),{url:ge({...n,base:e.base,rtl:e.rtl},{template:e.template,pointer:e.pointer}),base:e.base}}async function Fe(e,t,r){let n=da$1(ca$1({resolvedPaths:{cwd:t},...r?.registries&&{registries:r.registries}})),{config:o}=await H([e],n,{silent:true,writeFile:false});n=o,ga$1(e,n);let[i]=await qa$1([e],{config:n,useCache:true}),s=i?.type==="registry:base"&&i.config?i.config:void 0,l=e;if(ks(e)){let a=new URL(e);a.searchParams.delete("track"),l=a.toString();}return {registryBaseConfig:s,installStyleIndex:i?.extends!=="none",url:l}}function ks(e){try{return new URL(e).pathname==="/init"&&e.startsWith(a)}catch{return false}}var Rs=process.env.SHADCN_GITHUB_URL??"https://github.com/shadcn-ui/ui.git";function Z(e){return {...e,frameworks:e.frameworks??[],scaffold:e.scaffold??po({title:e.title,templateDir:e.templateDir}),postInit:e.postInit??Ps}}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=po({title:e.title,templateDir:r.templateDir}),n}function vs(e){switch(e){case "pnpm":return ["--no-frozen-lockfile"];case "yarn":return ["--no-immutable"];default:return []}}async function xs(e,t){if(t==="pnpm")return;let r=A__default.join(e,"pnpm-workspace.yaml"),n=A__default.join(e,"package.json"),o=A__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 Ss(t):delete f.packageManager,l&&(f.workspaces=s),await L.writeFile(n,JSON.stringify(f,null,2)+`
|
|
7
7
|
`);}i&&await L.remove(r),l&&t==="npm"&&await mo(e);}async function Ss(e){try{let{stdout:t}=await execa(e,["--version"]);return `${e}@${t.trim()}`}catch{return `${e}@*`}}async function mo(e){let t=await L.readdir(e,{withFileTypes:true});for(let r of t){if(r.name==="node_modules")continue;let n=A__default.join(e,r.name);if(r.isDirectory())await mo(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 po({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=A__default.resolve(i,t);await L.copy(f,r,{filter:m=>!m.includes("node_modules")});}else {let f=A__default.join(Cs.tmpdir(),`shadcn-template-${Date.now()}`);await execa("git",["clone","--depth","1","--filter=blob:none","--sparse",
|
|
9
|
-
`);}o?.succeed(`Creating a new ${e} project.`);}catch(i){o?.fail(`Something went wrong creating a new ${e} project.`),oa$1(i);}}}async function Ps({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 uo={"--font-heading":"cn-font-heading"};function $s(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=uo[o];i&&t.add(i);}for(let n of Object.values(r.cssVars??{}))for(let o of Object.keys(n??{})){let i=uo[$s(o)];i&&t.add(i);}}return Array.from(t)}function go(e,t){if(e.includes("\0"))return false;let r;try{r=e;let
|
|
8
|
+
`);}}}function po({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=A__default.resolve(i,t);await L.copy(f,r,{filter:m=>!m.includes("node_modules")});}else {let f=A__default.join(Cs.tmpdir(),`shadcn-template-${Date.now()}`);await execa("git",["clone","--depth","1","--filter=blob:none","--sparse",Rs,f]),await execa("git",["-C",f,"sparse-checkout","set",`templates/${t}`]);let m=A__default.resolve(f,"templates",t);await L.move(m,r),await L.remove(f);}await xs(r,n);let l=["install",...vs(n)];await execa(n,l,{cwd:r});let a=A__default.join(r,"package.json");if(L.existsSync(a)){let f=await L.readFile(a,"utf8"),m=JSON.parse(f);m.name=A__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.`),oa$1(i);}}}async function Ps({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 uo={"--font-heading":"cn-font-heading"};function $s(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=uo[o];i&&t.add(i);}for(let n of Object.values(r.cssVars??{}))for(let o of Object.keys(n??{})){let i=uo[$s(o)];i&&t.add(i);}}return Array.from(t)}function go(e,t){if(e.includes("\0"))return false;let r;try{r=e;let h="";for(;r!==h&&r.includes("%");)h=r,r=decodeURIComponent(r);}catch{return false}let n=A__default.normalize(r.replace(/\\/g,"/")),o=A__default.normalize(t),i=h=>h.replace(/\[\.\.\..*?\]/g,"").includes("..");if(i(n)||i(r)||i(e))return false;let s=h=>h.replace(/\[\.\.\..*?\]/g,""),l=s(e),a=s(r);if([/\.\.[\/\\]/,/[\/\\]\.\./,/\.\./,/\.\.%/,/\x00/,/[\x01-\x1f]/].some(h=>h.test(l)||h.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(A__default.isAbsolute(n))return n.startsWith(o+A__default.sep);let p=A__default.resolve(o,n);return p.startsWith(o+A__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=A__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 lt(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 lt(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=[Fs(t)];n.cleanupDefaultNextStyles&&o.push(wo()),n.tailwindVersion==="v4"&&(o=[],o.push(Ns({params:"dark (&:is(.dark *))"})),n.cleanupDefaultNextStyles&&o.push(wo()),o.push(Ts(t,{overwriteCssVars:n.overwriteCssVars})),o.push(As(t)),n.tailwindConfig&&(o.push(Os(n.tailwindConfig)),o.push(Ds(n.tailwindConfig)),o.push(Vs(n.tailwindConfig))));let s=(await $$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
10
|
|
|
11
11
|
`)),s}function Fs(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 js||(r=$$1.atRule({name:"layer",params:"base",nodes:[],raws:{semicolon:true,before:`
|
|
12
12
|
`,between:" "}}),t.append(r),t.insertBefore(r,$$1.comment({text:"---break---"}))),r!==void 0&&Object.entries(e).forEach(([n,o])=>{let i=n==="light"?":root":`.${n}`;Es(r,i,o);});}}}function yo(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 wo(){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()),yo(e);let r=e.nodes.find(n=>n.type==="atrule"&&n.params==="(prefers-color-scheme: dark)");r&&(yo(r),r.nodes.length===0&&r.remove());}}}function Es(e,t,r){let n=e.nodes?.find(o=>o.type==="rule"&&o.selector===t);n||Object.keys(r).length>0&&(n=$$1.rule({selector:t,raws:{between:" ",before:`
|
|
13
|
-
`}}),e.append(n)),Object.entries(r).forEach(([o,i])=>{let s=`--${o.replace(/^--/,"")}`,l=$$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 Ts(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=Ht(r);Object.entries(o).forEach(([a,f])=>{let m=`--${a.replace(/^--/,"")}`,p=$$1.decl({prop:m,value:f,raws:{semicolon:true}}),
|
|
14
|
-
`}}),r.append(s),r.insertBefore(s,$$1.comment({text:"---break---"}))),Object.entries(o).forEach(([l,a])=>{let f=`--${l.replace(/^--/,"")}`;f==="--sidebar-background"&&(f="--sidebar"),bo(a)&&(a=`hsl(${a})`);let m=$$1.decl({prop:f,value:a,raws:{semicolon:true}}),p=s?.nodes.find(
|
|
13
|
+
`}}),e.append(n)),Object.entries(r).forEach(([o,i])=>{let s=`--${o.replace(/^--/,"")}`,l=$$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 Ts(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=Ht(r);Object.entries(o).forEach(([a,f])=>{let m=`--${a.replace(/^--/,"")}`,p=$$1.decl({prop:m,value:f,raws:{semicolon:true}}),h=l?.nodes?.find(g=>g.type==="decl"&&g.prop===m);t.overwriteCssVars?h?h.replaceWith(p):l?.append(p):h||l?.append(p);});return}let s=r.nodes?.find(l=>l.type==="rule"&&l.selector===i);!s&&Object.keys(o).length>0&&(s=$$1.rule({selector:i,nodes:[],raws:{semicolon:true,between:" ",before:`
|
|
14
|
+
`}}),r.append(s),r.insertBefore(s,$$1.comment({text:"---break---"}))),Object.entries(o).forEach(([l,a])=>{let f=`--${l.replace(/^--/,"")}`;f==="--sidebar-background"&&(f="--sidebar"),bo(a)&&(a=`hsl(${a})`);let m=$$1.decl({prop:f,value:a,raws:{semicolon:true}}),p=s?.nodes.find(h=>h.type==="decl"&&h.prop===f);t.overwriteCssVars?p?p.replaceWith(m):s?.append(m):p||s?.append(m);});});}}}function As(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=Ht(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[h,g]of Object.entries(p)){let d=$$1.decl({prop:`--radius-${h}`,value:g,raws:{semicolon:true}});n?.nodes?.find(y=>y.type==="decl"&&y.prop===d.prop)||n?.append(d);}continue}let l=bo(s)||_s(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=$$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 Ht(e){let t=e.nodes.find(r=>r.type==="atrule"&&r.name==="theme"&&r.params==="inline");return t||(t=$$1.atRule({name:"theme",params:"inline",nodes:[],raws:{semicolon:true,between:" ",before:`
|
|
15
15
|
`}}),e.append(t),e.insertBefore(t,$$1.comment({text:"---break---"}))),t}function Ns({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=$$1.atRule({name:"custom-variant",params:e,raws:{semicolon:true,before:`
|
|
16
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,$$1.comment({text:"---break---"}));}}}}function Os(e){return {postcssPlugin:"update-tailwind-config",Once(t){if(!e?.plugins)return;let n=Ls(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=$$1.atRule({name:"plugin",params:`${n}${l}${n}`,raws:{semicolon:true,before:`
|
|
17
17
|
`}});t.insertAfter(i,a),t.insertBefore(a,$$1.comment({text:"---break---"}));}}}}function Vs(e){return {postcssPlugin:"update-tailwind-config-keyframes",Once(t){if(!e?.theme?.extend?.keyframes)return;let r=Ht(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=$$1.atRule({name:"keyframes",params:i,nodes:[],raws:{semicolon:true,between:" ",before:`
|
|
18
|
-
`}});for(let[f,m]of Object.entries(l.data)){let p=$$1.rule({selector:f,nodes:Object.entries(m).map(([
|
|
18
|
+
`}});for(let[f,m]of Object.entries(l.data)){let p=$$1.rule({selector:f,nodes:Object.entries(m).map(([h,g])=>$$1.decl({prop:h,value:g,raws:{semicolon:true,before:`
|
|
19
19
|
`,between:": "}})),raws:{semicolon:true,between:" ",before:`
|
|
20
20
|
`}});a.append(p);}r.append(a),r.insertBefore(a,$$1.comment({text:"---break---"}));}}}}function Ds(e){return {postcssPlugin:"update-tailwind-config-animation",Once(t){if(!e?.theme?.extend?.animation)return;let r=Ht(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=$$1.decl({prop:l,value:s,raws:{semicolon:true,between:": ",before:`
|
|
21
21
|
`}});r.append(a);}}}}function Ls(e){return e.nodes[0].toString().includes("'")?"single":"double"}function bo(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 _s(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=A__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 lt(a,r.cssVars,t,{cleanupDefaultNextStyles:r.cleanupDefaultNextStyles,tailwindVersion:r.tailwindVersion,tailwindConfig:r.tailwindConfig,overwriteCssVars:r.overwriteCssVars})),n&&(a=await Fr(a,e)),await promises.writeFile(i,a,"utf8"),l.succeed();}async function Fr(e,t){let r=[Ws(t)],n=await $$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,`
|
|
22
22
|
|
|
23
23
|
`),o=o.trimEnd(),o}function Ws(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=$$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=`
|
|
24
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=$$1.atRule({name:"plugin",params:l,raws:{semicolon:true,before:`
|
|
25
|
-
`}}),p=t.nodes?.filter(
|
|
25
|
+
`}}),p=t.nodes?.filter(g=>g.type==="atrule"&&g.name==="import"),h=t.nodes?.filter(g=>g.type==="atrule"&&g.name==="plugin");if(h&&h.length>0){let g=h[h.length-1];t.insertAfter(g,m);}else if(p&&p.length>0){let g=p[p.length-1];t.insertAfter(g,m),t.insertBefore(m,$$1.comment({text:"---break---"})),t.insertAfter(m,$$1.comment({text:"---break---"}));}else t.prepend(m),t.insertBefore(m,$$1.comment({text:"---break---"})),t.insertAfter(m,$$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=$$1.atRule({name:i,params:s,raws:{semicolon:true}});t.append(a),t.insertBefore(a,$$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=$$1.atRule({name:"theme",params:"inline",raws:{semicolon:true,between:" ",before:`
|
|
26
26
|
`}}),t.append(l),t.insertBefore(l,$$1.comment({text:"---break---"})));let a=l.nodes?.find(m=>m.type==="atrule"&&m.name==="keyframes"&&m.params===s),f;if(a?(f=$$1.atRule({name:"keyframes",params:s,raws:{semicolon:true,between:" ",before:`
|
|
27
27
|
`}}),a.replaceWith(f)):(f=$$1.atRule({name:"keyframes",params:s,raws:{semicolon:true,between:" ",before:`
|
|
28
|
-
`}}),l.append(f)),typeof n=="object")for(let[m,p]of Object.entries(n))Ne(f,m,p);}else if(i==="utility"){let l=t.nodes?.find(a=>a.type==="atrule"&&a.name===i&&a.params===s);if(l){if(typeof n=="object")for(let[a,f]of Object.entries(n))if(typeof f=="string"){let m=l.nodes?.find(
|
|
29
|
-
`}});m?m.replaceWith(p):l.append(p);}else if(a.startsWith("@")&&typeof f=="object"&&f!==null&&Object.keys(f).length===0){let m=a.match(/@([a-zA-Z-]+)\s*(.*)/);if(m){let[,p,
|
|
30
|
-
`}});l.append(
|
|
28
|
+
`}}),l.append(f)),typeof n=="object")for(let[m,p]of Object.entries(n))Ne(f,m,p);}else if(i==="utility"){let l=t.nodes?.find(a=>a.type==="atrule"&&a.name===i&&a.params===s);if(l){if(typeof n=="object")for(let[a,f]of Object.entries(n))if(typeof f=="string"){let m=l.nodes?.find(h=>h.type==="decl"&&h.prop===a),p=$$1.decl({prop:a,value:f,raws:{semicolon:true,before:`
|
|
29
|
+
`}});m?m.replaceWith(p):l.append(p);}else if(a.startsWith("@")&&typeof f=="object"&&f!==null&&Object.keys(f).length===0){let m=a.match(/@([a-zA-Z-]+)\s*(.*)/);if(m){let[,p,h]=m;if(!l.nodes?.find(d=>d.type==="atrule"&&d.name===p&&d.params===h)){let d=$$1.atRule({name:p,params:h,raws:{semicolon:true,before:`
|
|
30
|
+
`}});l.append(d);}}}else typeof f=="object"&&Ne(l,a,f);}else {let a=$$1.atRule({name:i,params:s,raws:{semicolon:true,between:" ",before:`
|
|
31
31
|
`}});if(t.append(a),t.insertBefore(a,$$1.comment({text:"---break---"})),typeof n=="object")for(let[f,m]of Object.entries(n))if(typeof m=="string"){let p=$$1.decl({prop:f,value:m,raws:{semicolon:true,before:`
|
|
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[,
|
|
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[,h,g]=p;if(!a.nodes?.find(y=>y.type==="atrule"&&y.name===h&&y.params===g)){let y=$$1.atRule({name:h,params:g,raws:{semicolon:true,before:`
|
|
33
33
|
`}});a.append(y);}}}else typeof m=="object"&&Ne(a,f,m);}}else i==="property"?Ne(t,r,n):Co(t,i,s,n);}else Ne(t,r,n);}}}function Co(e,t,r,n){let o=e.nodes?.find(i=>i.type==="atrule"&&i.name===t&&i.params===r);if(o||(o=$$1.atRule({name:t,params:r,raws:{semicolon:true,between:" ",before:`
|
|
34
34
|
`}}),e.append(o),e.insertBefore(o,$$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;Co(o,a,f,s);}}else Ne(o,i,s);else if(typeof n=="string")try{let s=$$1.parse(`.temp{${n}}`).first;if(s&&s.nodes){let l=$$1.rule({selector:"temp",raws:{semicolon:!0,between:" ",before:`
|
|
35
35
|
`}});s.nodes.forEach(a=>{if(a.type==="decl"){let f=a.clone();f.raws.before=`
|
|
36
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=$$1.rule({selector:t,raws:{semicolon:true,between:" ",before:`
|
|
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(
|
|
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(h=>h.type==="atrule"&&h.name==="apply");if(p){p.params=twMerge(p.params,a);continue}}let m=$$1.atRule({name:l,params:a,raws:{semicolon:true,before:`
|
|
38
38
|
`}});n.append(m);}}}else if(typeof i=="string"){let s=$$1.decl({prop:o,value:i,raws:{semicolon:true,before:`
|
|
39
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=$$1.parse(`.temp{${r}}`).first;i&&i.nodes&&i.nodes.forEach(s=>{if(s.type==="decl"){let l=s.clone();l.raws.before=`
|
|
40
|
-
`,n?.append(l);}});}catch(o){throw console.error("Error parsing rule content:",t,r,o),o}}async function _(e$1,t,r,n){let o=y(r.resolvedPaths.cwd,false),i=await Js(r),s=i!=="expo";if(e$1=
|
|
40
|
+
`,n?.append(l);}});}catch(o){throw console.error("Error parsing rule content:",t,r,o),o}}async function _(e$1,t,r,n){let o=y(r.resolvedPaths.cwd,false),i=await Js(r),s=i!=="expo";if(e$1=Ro(e$1,o,{skipInstalled:s}),t=Ro(t,o,{skipInstalled:s}),!e$1?.length&&!t?.length)return;n={silent:false,...n};let l=E("Installing dependencies.",{silent:n.silent})?.start(),a$1="";if(Hs(r)&&i==="npm")if(n.silent)a$1="force";else {l.stopAndPersist(),e.warn(`
|
|
41
41
|
It looks like you are using React 19.
|
|
42
42
|
Some packages may fail to install due to peer dependency issues in npm (see ${a}/react-19).
|
|
43
|
-
`);let f=await Ce([{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"}]}]);f&&(a$1=f.flag);}l?.start(),await Gs(i,e$1,t,r.resolvedPaths.cwd,a$1),l?.succeed();}function
|
|
44
|
-
`),m=[],p=null,
|
|
45
|
-
`,"utf-8"),
|
|
46
|
-
`);}s.push(P),la(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&&ha(o,s,m,r),o.getFullText()}function aa(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 na.has(e)}function ca(e){return Gt(e)?"html":null}function la(e){return !e.font.selector&&Gt(e.font.variable)}function fa(e,t){let r=ma(e);return Gt(t)?r:`${r}${pa(t.replace(/^--font-/,""))}`}function ma(e){return e.split("_").map((t,r)=>r===0?t.toLowerCase():t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}function pa(e){return e.split("-").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}function ua(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 da(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 ga(e){let t=e.getImportDeclarations();return t.length>0?t[t.length-1].getChildIndex()+1:0}function ha(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 k=a.every(I=>y.includes(I)),C=r.every(I=>y.includes(`"${I}"`)),P=["font-sans","font-serif","font-mono"].filter(I=>!r.includes(I)).some(I=>y.includes(`"${I}"`));if(k&&C&&!P)continue;let x=wa(y,a);x=ba(x);let v=ka(x,f);h.replaceWithText(`{${v}}`);}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 k=ya(y);mt(e,n);let C=new Set(f),P=new Set(["font-sans","font-serif","font-mono"].map(v=>`"${v}"`)),x=k.filter(v=>!C.has(v)&&!P.has(v));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 ya(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 wa(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 ba(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 ka(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 _$1(t);return n&&n.ui&&n.ui.resolvedPaths.cwd!==t.resolvedPaths.cwd?await Ra(e,t,n,{...r,isRemote:e?.length===1&&!!e[0].match(/\/chat\/b\//)}):await va(e,t,{...r,skipFonts:r.skipFonts})}async function va(e$1,t,r){if(!e$1.length)return;let n=E("Checking registry.",{silent:r.silent})?.start(),o=await ka$1(e$1,da$1(t));if(!o)return n?.fail(),oa$1(new Error("Failed to fetch components from registry."));try{So(o.files??[],t.resolvedPaths.cwd);}catch(a){return n?.fail(),oa$1(a)}n?.succeed();let i=await Ha$1(t);r.skipFonts||(o=await pt(o,t));let s=Ae([o]);await _(o.dependencies,o.devDependencies,t,{silent:r.silent}),await ia$1(o.tailwind?.config,t,{silent:r.silent,tailwindVersion:i}),await Tr(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 xo(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 Ra(e$1,t,r,n){if(!e$1.length)return;let o=E("Checking registry.",{silent:n.silent})?.start(),i=await ka$1(e$1,da$1(t));if(!i)return o?.fail(),oa$1(new Error("Failed to fetch components from registry."));try{So(i.files??[],t.resolvedPaths.cwd);}catch(j){return o?.fail(),oa$1(j)}o?.succeed();let s=[],l=[],a=[],f=E("Installing components.")?.start(),m=r.ui,p=await Ha$1(m),u=aa$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 ia$1(i.tailwind?.config,m,{silent:true,tailwindVersion:p}),l.push(A__default.relative(u,m.resolvedPaths.tailwindConfig))),i.envVars&&await Tr(i.envVars,m,{silent:true}),await ut(i.fonts,t,{silent:true});let g=["components","ui","lib","hooks"],y=new Map,k={"registry:ui":"ui","registry:hook":"hooks","registry:lib":"lib"},C=j=>g.includes(j),P=j=>{let ie=j?.match(/^@([^/]+)\//);return ie&&C(ie[1])?ie[1]:null},x=j=>P(j.target)??k[j.type||"registry:ui"]??"components",v=j=>j&&r[j]?r[j]:t;for(let j of i.files??[]){let ie=x(j);y.has(ie)||y.set(ie,[]),y.get(ie).push(j);}for(let j of Array.from(y.keys())){let ie=y.get(j),Me=v(j),gs=(i.files??[]).filter($e=>v(x($e)).resolvedPaths.cwd===Me.resolvedPaths.cwd),It=aa$1(t.resolvedPaths.cwd,Me.resolvedPaths.ui||Me.resolvedPaths.cwd),yr=await $(It,Me.resolvedPaths.cwd)??Me.resolvedPaths.cwd,wr=await L$1(ie,Me,{overwrite:n.overwrite,silent:true,rootSpinner:f,isRemote:n.isRemote,isWorkspace:true,path:n.path,plannedFiles:gs,supportedFontMarkers:h});s.push(...wr.filesCreated.map($e=>A__default.relative(It,A__default.join(yr,$e)))),l.push(...wr.filesUpdated.map($e=>A__default.relative(It,A__default.join(yr,$e)))),a.push(...wr.filesSkipped.map($e=>A__default.relative(It,A__default.join(yr,$e))));}let I=i.cssVars?n.overwriteCssVars??await xo(e$1,t):void 0;await ft(i.css,m,{silent:true,cssVars:i.cssVars,overwriteCssVars:I,tailwindVersion:p,tailwindConfig:i.tailwind?.config}),(i.cssVars||i.css)&&l.push(A__default.relative(u,m.resolvedPaths.tailwindCss)),f?.succeed();let U=Array.from(new Set(s)).sort(),K=Array.from(new Set(l.filter(j=>!s.includes(j)))).sort(),Pe=Array.from(new Set(a)).sort();if(!(U.length||K.length)&&!Pe.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 j of U)e.log(` - ${j}`);}if(K.length){E(`Updated ${K.length} ${K.length===1?"file":"files"}:`,{silent:n.silent})?.info();for(let j of K)e.log(` - ${j}`);}if(Pe.length){E(`Skipped ${Pe.length} ${Pe.length===1?"file":"files"}: (use --overwrite to overwrite)`,{silent:n.silent})?.info();for(let j of Pe)e.log(` - ${j}`);}i.docs&&e.info(i.docs);}async function xo(e,t){let r=await qa$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 So(e,t){for(let r of e)if(r?.target&&!go(r.target,t))throw new Error(`We found an unsafe file path "${r.target} in the registry item. Installation aborted.`)}async function ke(e){let t=A__default.resolve(e.projectPath,"packages/ui"),r=A__default.resolve(e.projectPath,"apps/web"),n=A__default.resolve(t,"components.json"),o=await L.readJson(n);e.registryBaseConfig&&(o=Po(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=A__default.resolve(r,"components.json"),s=await L.readJson(i);e.registryBaseConfig&&(s=Po(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 Z$1(t,c.parse(o)),{config:a}=await H(e.components,l,{silent:true});await fe(e.components,a,{overwrite:true,silent:e.silent,isNewProject:true,skipFonts:true});let f=await Z$1(r,c.parse(s)),m=await ka$1(e.components,da$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-",""),k=g.font.dependency??`@fontsource-variable/${y}`;u[g.font.variable]=g.font.family,h.add(k);}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 Io=Z({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:$o`---
|
|
43
|
+
`);let f=await Ce([{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"}]}]);f&&(a$1=f.flag);}l?.start(),await Gs(i,e$1,t,r.resolvedPaths.cwd,a$1),l?.succeed();}function Ro(e=[],t,{skipInstalled:r=true}={}){let n=new Set([...Object.keys(t?.dependencies??{}),...Object.keys(t?.devDependencies??{}),...Object.keys(t?.optionalDependencies??{}),...Object.keys(t?.peerDependencies??{})]),o=new Map;for(let i of e){let s=zs(i);if(!s){o.set(i,{dependency:i,hasSpecifier:true});continue}if(r&&!s.hasSpecifier&&n.has(s.name))continue;let l=o.get(s.name);(!l||!l.hasSpecifier&&s.hasSpecifier)&&o.set(s.name,{dependency:i,hasSpecifier:s.hasSpecifier});}return Array.from(o.values()).map(({dependency:i})=>i)}function zs(e){if(/^[a-z][a-z0-9+.-]*:/i.test(e))return null;let t=e.startsWith("@")?e.match(/^(@[^/]+\/[^@/]+)(@.+)?$/):e.match(/^([^@/]+)(@.+)?$/);return t?{name:t[1],hasSpecifier:!!t[2]}:null}function Hs(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 Js(e){return y(e.resolvedPaths.cwd,false)?.dependencies?.expo?"expo":la$1(e.resolvedPaths.cwd)}async function Gs(e,t,r,n,o){if(e==="npm")return Ks(t,r,n,o);if(e==="deno")return Ys(t,r,n);if(e==="expo")return qs(t,r,n);t?.length&&await execa(e,["add",...t],{cwd:n}),r?.length&&await execa(e,["add","-D",...r],{cwd:n});}async function Ks(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 Ys(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 qs(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 Tr(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=A__default.join(o,".env.local"),s=B(o);s&&(i=s);let l=existsSync(i),a=A__default.basename(i),f=Object.entries(e$1).map(([g,d])=>`${g}=${d}`).join(`
|
|
44
|
+
`),m=[],p=null,h=null;if(l){let g=await promises.readFile(i,"utf-8"),d$1=D(g,f);if(m=C(g,f),m.length>0){if(await promises.writeFile(i,d$1,"utf-8"),p=A__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"),h=A__default.relative(o,i),m=Object.keys(e$1),n?.succeed(`Added the following variables to ${d.info(a)}:`),!r.silent)for(let g of m)e.log(` ${d.success("+")} ${g}`);return !r.silent&&m.length>0&&e.break(),{envVarsAdded:m,envFileUpdated:p,envFileCreated:h}}var na=new Set(["--font-sans","--font-serif","--font-mono"]);async function pt(e,t){if(!e.fonts?.length)return e;let r=await Fa$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??ca(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 Fa$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 oa(e,t,n),o?.succeed("Updating fonts.");}catch(i){throw o?.fail("Failed to update fonts."),i}}async function oa(e,t,r){let n=await ia(t,r);if(!n)return;let o=await promises.readFile(n,"utf-8"),i=await sa(o,e,t);i!==o&&await promises.writeFile(n,i,"utf-8");}async function ia(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=A__default.join(r,l);if(existsSync(a))return a}return null}async function sa(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 h=p.font.import;if(!h)continue;let g=o.getImportDeclaration(x=>x.getModuleSpecifierValue()==="next/font/google"),d=false;g?(d=g.getNamedImports().some(R=>R.getName()===h),d||g.addNamedImport(h)):o.addImportDeclaration({moduleSpecifier:"next/font/google",namedImports:[h]});let y=fa(h,p.font.variable),b=aa(p),C=ua(o,p.font.variable),P=y;if(!(d&&!C&&Gt(p.font.variable)&&!da(o,h))){if(C)C.setInitializer(`${h}(${b})`),C.getName()!==y&&C.rename(y),P=y;else {let x=ga(o);o.insertVariableStatement(x,{declarationKind:VariableDeclarationKind.Const,declarations:[{name:y,initializer:`${h}(${b})`}]}).appendWhitespace(`
|
|
46
|
+
`);}s.push(P),la(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&&ha(o,s,m,r),o.getFullText()}function aa(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 na.has(e)}function ca(e){return Gt(e)?"html":null}function la(e){return !e.font.selector&&Gt(e.font.variable)}function fa(e,t){let r=ma(e);return Gt(t)?r:`${r}${pa(t.replace(/^--font-/,""))}`}function ma(e){return e.split("_").map((t,r)=>r===0?t.toLowerCase():t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}function pa(e){return e.split("-").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}function ua(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 da(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 ga(e){let t=e.getImportDeclarations();return t.length>0?t[t.length-1].getChildIndex()+1:0}function ha(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(g=>`"${g}"`),a=t.map(g=>`${g}.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),h=p.getInitializer();if(!h)return;if(h.getKind()===SyntaxKind.StringLiteral){let g=h.getText().slice(1,-1);mt(e,n),p.setInitializer(`{cn("${g}", ${f.join(", ")})}`);}else if(h.getKind()===SyntaxKind.JsxExpression){let g=h.asKindOrThrow(SyntaxKind.JsxExpression),d=g.getExpression();if(!d)return;let y=d.getText();if(y.startsWith("cn(")){let b=a.every(I=>y.includes(I)),C=r.every(I=>y.includes(`"${I}"`)),P=["font-sans","font-serif","font-mono"].filter(I=>!r.includes(I)).some(I=>y.includes(`"${I}"`));if(b&&C&&!P)continue;let x=wa(y,a);x=ba(x);let R=ka(x,f);g.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;g.replaceWithText(C?`{cn(${y}, ${f.join(", ")})}`:`{cn(${f.join(", ")})}`);}else if(y.startsWith("`")&&y.endsWith("`")){let b=ya(y);mt(e,n);let C=new Set(f),P=new Set(["font-sans","font-serif","font-mono"].map(R=>`"${R}"`)),x=b.filter(R=>!C.has(R)&&!P.has(R));g.replaceWithText(`{cn(${[...x,...f].join(", ")})}`);}else mt(e,n),g.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 ya(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 wa(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 ba(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 ka(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 _$1(t);return n&&n.ui&&n.ui.resolvedPaths.cwd!==t.resolvedPaths.cwd?await va(e,t,n,{...r,isRemote:e?.length===1&&!!e[0].match(/\/chat\/b\//)}):await Ra(e,t,{...r,skipFonts:r.skipFonts})}async function Ra(e$1,t,r){if(!e$1.length)return;let n=E("Checking registry.",{silent:r.silent})?.start(),o=await ka$1(e$1,da$1(t));if(!o)return n?.fail(),oa$1(new Error("Failed to fetch components from registry."));try{So(o.files??[],t.resolvedPaths.cwd);}catch(a){return n?.fail(),oa$1(a)}n?.succeed();let i=await Ha$1(t);r.skipFonts||(o=await pt(o,t));let s=Ae([o]);await _(o.dependencies,o.devDependencies,t,{silent:r.silent}),await ia$1(o.tailwind?.config,t,{silent:r.silent,tailwindVersion:i}),await Tr(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 xo(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 va(e$1,t,r,n){if(!e$1.length)return;let o=E("Checking registry.",{silent:n.silent})?.start(),i=await ka$1(e$1,da$1(t));if(!i)return o?.fail(),oa$1(new Error("Failed to fetch components from registry."));try{So(i.files??[],t.resolvedPaths.cwd);}catch(j){return o?.fail(),oa$1(j)}o?.succeed();let s=[],l=[],a=[],f=E("Installing components.")?.start(),m=r.ui,p=await Ha$1(m),h=aa$1(t.resolvedPaths.cwd,m.resolvedPaths.ui);i=await pt(i,t);let g=Ae([i]);await _(i.dependencies,i.devDependencies,m,{silent:true}),i.tailwind?.config&&(await ia$1(i.tailwind?.config,m,{silent:true,tailwindVersion:p}),l.push(A__default.relative(h,m.resolvedPaths.tailwindConfig))),i.envVars&&await Tr(i.envVars,m,{silent:true}),await ut(i.fonts,t,{silent:true});let d=["components","ui","lib","hooks"],y=new Map,b={"registry:ui":"ui","registry:hook":"hooks","registry:lib":"lib"},C=j=>d.includes(j),P=j=>{let ie=j?.match(/^@([^/]+)\//);return ie&&C(ie[1])?ie[1]:null},x=j=>P(j.target)??b[j.type||"registry:ui"]??"components",R=j=>j&&r[j]?r[j]:t;for(let j of i.files??[]){let ie=x(j);y.has(ie)||y.set(ie,[]),y.get(ie).push(j);}for(let j of Array.from(y.keys())){let ie=y.get(j),Me=R(j),gs=(i.files??[]).filter($e=>R(x($e)).resolvedPaths.cwd===Me.resolvedPaths.cwd),It=aa$1(t.resolvedPaths.cwd,Me.resolvedPaths.ui||Me.resolvedPaths.cwd),yr=await $(It,Me.resolvedPaths.cwd)??Me.resolvedPaths.cwd,wr=await L$1(ie,Me,{overwrite:n.overwrite,silent:true,rootSpinner:f,isRemote:n.isRemote,isWorkspace:true,path:n.path,plannedFiles:gs,supportedFontMarkers:g});s.push(...wr.filesCreated.map($e=>A__default.relative(It,A__default.join(yr,$e)))),l.push(...wr.filesUpdated.map($e=>A__default.relative(It,A__default.join(yr,$e)))),a.push(...wr.filesSkipped.map($e=>A__default.relative(It,A__default.join(yr,$e))));}let I=i.cssVars?n.overwriteCssVars??await xo(e$1,t):void 0;await ft(i.css,m,{silent:true,cssVars:i.cssVars,overwriteCssVars:I,tailwindVersion:p,tailwindConfig:i.tailwind?.config}),(i.cssVars||i.css)&&l.push(A__default.relative(h,m.resolvedPaths.tailwindCss)),f?.succeed();let U=Array.from(new Set(s)).sort(),K=Array.from(new Set(l.filter(j=>!s.includes(j)))).sort(),Pe=Array.from(new Set(a)).sort();if(!(U.length||K.length)&&!Pe.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 j of U)e.log(` - ${j}`);}if(K.length){E(`Updated ${K.length} ${K.length===1?"file":"files"}:`,{silent:n.silent})?.info();for(let j of K)e.log(` - ${j}`);}if(Pe.length){E(`Skipped ${Pe.length} ${Pe.length===1?"file":"files"}: (use --overwrite to overwrite)`,{silent:n.silent})?.info();for(let j of Pe)e.log(` - ${j}`);}i.docs&&e.info(i.docs);}async function xo(e,t){let r=await qa$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 So(e,t){for(let r of e)if(r?.target&&!go(r.target,t))throw new Error(`We found an unsafe file path "${r.target} in the registry item. Installation aborted.`)}async function ke(e){let t=A__default.resolve(e.projectPath,"packages/ui"),r=A__default.resolve(e.projectPath,"apps/web"),n=A__default.resolve(t,"components.json"),o=await L.readJson(n);e.registryBaseConfig&&(o=Po(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=A__default.resolve(r,"components.json"),s=await L.readJson(i);e.registryBaseConfig&&(s=Po(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 Z$1(t,c.parse(o)),{config:a}=await H(e.components,l,{silent:true});await fe(e.components,a,{overwrite:true,silent:e.silent,isNewProject:true,skipFonts:true});let f=await Z$1(r,c.parse(s)),m=await ka$1(e.components,da$1(a));if(m?.fonts?.length){let h={},g=new Set;for(let d of m.fonts){let y=d.name.replace(/^font-heading-/,"").replace("font-",""),b=d.font.dependency??`@fontsource-variable/${y}`;h[d.font.variable]=d.font.family,g.add(b);}await _(Array.from(g),[],l,{silent:true}),await zt({theme:h},l,{silent:e.silent,overwriteCssVars:false,tailwindVersion:"v4"}),await ft(Object.fromEntries(Array.from(g).map(d=>[`@import "${d}"`,{}])),l,{silent:e.silent});}let p=l.iconLibrary;if(p&&p in a$3){let h=[...a$3[p].packages];await _(h,[],l,{silent:true}),await _(h,[],f,{silent:true});}return f}var Io=Z({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:$o`---
|
|
47
47
|
import Layout from "@/layouts/main.astro"
|
|
48
48
|
import { ComponentExample } from "@/components/component-example"
|
|
49
49
|
---
|
|
@@ -71,7 +71,7 @@ import { ComponentExample } from "@/components/component-example"
|
|
|
71
71
|
export default function Page() {
|
|
72
72
|
return <ComponentExample />;
|
|
73
73
|
}
|
|
74
|
-
`}],monorepo:{templateDir:"next-monorepo",init:async e=>{let t=A__default.resolve(e.projectPath,"packages/ui"),r=A__default.resolve(e.projectPath,"apps/web"),n=A__default.resolve(t,"components.json"),o=await L.readJson(n);e.registryBaseConfig&&(o=Po(o,e.registryBaseConfig)),o.tailwind.baseColor="neutral",e.rtl&&(o.rtl=true),await L.writeJson(n,o,{spaces:2});let i=A__default.resolve(r,"components.json"),s=await L.readJson(i);e.registryBaseConfig&&(s=Po(s,e.registryBaseConfig)),s.tailwind.baseColor="neutral",e.rtl&&(s.rtl=true),await L.writeJson(i,s,{spaces:2});let l=await Z$1(t,c.parse(o)),{config:a}=await H(e.components,l,{silent:true});await fe(e.components,a,{overwrite:true,silent:e.silent,isNewProject:true,skipFonts:true});let f=await Z$1(r,c.parse(s)),m=await ka$1(e.components,da$1(a));if(m?.fonts?.length){let
|
|
74
|
+
`}],monorepo:{templateDir:"next-monorepo",init:async e=>{let t=A__default.resolve(e.projectPath,"packages/ui"),r=A__default.resolve(e.projectPath,"apps/web"),n=A__default.resolve(t,"components.json"),o=await L.readJson(n);e.registryBaseConfig&&(o=Po(o,e.registryBaseConfig)),o.tailwind.baseColor="neutral",e.rtl&&(o.rtl=true),await L.writeJson(n,o,{spaces:2});let i=A__default.resolve(r,"components.json"),s=await L.readJson(i);e.registryBaseConfig&&(s=Po(s,e.registryBaseConfig)),s.tailwind.baseColor="neutral",e.rtl&&(s.rtl=true),await L.writeJson(i,s,{spaces:2});let l=await Z$1(t,c.parse(o)),{config:a}=await H(e.components,l,{silent:true});await fe(e.components,a,{overwrite:true,silent:e.silent,isNewProject:true,skipFonts:true});let f=await Z$1(r,c.parse(s)),m=await ka$1(e.components,da$1(a));if(m?.fonts?.length){let h={};for(let g of m.fonts)h[g.font.variable]=`var(${g.font.variable})`;await zt({theme:h},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 h=[...a$3[p].packages];await _(h,[],l,{silent:true}),await _(h,[],f,{silent:true});}return f},files:[{type:"registry:page",path:"app/page.tsx",target:"app/page.tsx",content:$o`import { ComponentExample } from "@/components/component-example";
|
|
75
75
|
|
|
76
76
|
export default function Page() {
|
|
77
77
|
return <ComponentExample />;
|
|
@@ -121,15 +121,15 @@ export function App() {
|
|
|
121
121
|
|
|
122
122
|
export default App;
|
|
123
123
|
`}]}});var X={next:To,vite:Lo,start:Vo,"react-router":No,astro:Io,laravel:jo};function Ze(e){if(e){for(let[t,r]of Object.entries(X))if(r.frameworks.includes(e))return t}}function Uo(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||T;if(t==="ui")return `${n}/ui`;if(t==="utils"){let o=r||_o(n,"lib");return o?`${o}/utils`:U}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 X?e$1.template:"next",r=Te(X[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 Ce([{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(X).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(X[t],{monorepo:e$1.monorepo}),s=await la$1(e$1.cwd,{withFallback:true}),l=A__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(A__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 Q(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 et=".bak",Xe=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}${et}`;try{return L.renameSync(e,t),t}catch{return null}}function Qe(e){let t=`${e}${et}`;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}${et}`;if(!L.existsSync(t))return false;try{return L.unlinkSync(t),!0}catch{return false}}async function Wo(e,t){if(!L.existsSync(e))return t();if(!dt(e))throw new Xe(e);let n=()=>Qe(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),Qe(e),o}}var Fa=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 Ea(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 Bo=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. (
|
|
125
|
-
You may now add components.`),process.removeListener("exit",o),gt(A__default.resolve(a$1,"components.json")),e.break();}catch(i){process.removeListener("exit",o),o(),e.break(),oa$1(i);}finally{ea();}});async function tt(e){let t,r,n,o=e.template,i=o?Te(X[o],{monorepo:e.monorepo}):void 0;if(e.monorepo&&i?.init&&L.existsSync(A__default.resolve(e.cwd,"package.json")))t=await Fa$1(e.cwd);else if(e.skipPreflight)t=await Fa$1(e.cwd);else {let
|
|
126
|
-
`,"utf8"),
|
|
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 Go(e,t,r={}){let n={files:[],dependencies:[],devDependencies:[],css:null,envVars:null,fonts:[],docs:null};if(!e.length)return n;let o=await ka$1(e,da$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 Da(o,t,n,r,i),await La(o,t,n,r),_a(o,t,n),r.skipFonts||Ua(o,n),n}async function Da(e,t,r,n,o){let i=e.files;if(!i?.length)return;let[s,l]=await Promise.all([Fa$1(t.resolvedPaths.cwd),t.tailwind.baseColor?xa(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
|
|
124
|
+
Would you like to start a new project?`,choices:Object.entries(X).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(X[t],{monorepo:e$1.monorepo}),s=await la$1(e$1.cwd,{withFallback:true}),l=A__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(A__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 Q(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 et=".bak",Xe=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}${et}`;try{return L.renameSync(e,t),t}catch{return null}}function Qe(e){let t=`${e}${et}`;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}${et}`;if(!L.existsSync(t))return false;try{return L.unlinkSync(t),!0}catch{return false}}async function Wo(e,t){if(!L.existsSync(e))return t();if(!dt(e))throw new Xe(e);let n=()=>Qe(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),Qe(e),o}}var Fa=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 Ea(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 Bo=new Command().name("init").alias("create").description("initialize your project and install dependencies").argument("[components...]","names, url or local path to component").option("-t, --template <template>","the template to use. (next, start, vite, react-router, laravel, astro)").option("-b, --base <base>","the component library to use. (base, radix)").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&&Qe(r$1.replace(et,""));};process.on("exit",o);try{let i=Fa.parse({...t,reinstall:t.reinstall,cwd:A__default.resolve(t.cwd)}),s=new Map(Object.entries(q)),l;if(i.defaults&&(i.template=i.template||"next",i.base=i.base||"base",i.reinstall=i.reinstall??!1),i.template&&!(i.template in X)&&(e.error(`Invalid template: ${d.info(i.template)}. Available templates: ${Object.keys(X).map(g=>d.info(g)).join(", ")}.`),e.break(),process.exit(1)),typeof i.preset=="string"&&!Q$1(i.preset)&&!r(i.preset)){let g=Array.from(s.keys());s.has(i.preset)||(e.error(`Invalid preset: ${d.info(i.preset)}. Available presets: ${g.join(", ")}`),e.break(),process.exit(1));}let a$1=i.cwd,f$1=L.existsSync(A__default.resolve(a$1,"components.json"));if(!i.monorepo&&!f$1&&await f(a$1)){let g$1=await Fa$1(a$1);if(!g$1||g$1.framework.name==="manual"){let d=await g(a$1);d.length>0&&(h("init",d),process.exit(1));}}if(f$1&&!i.force){let{overwrite:g}=await Ce({type:"confirm",name:"overwrite",message:`A ${d.info("components.json")} file already exists. Would you like to overwrite it?`,initial:!1});g||(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(A__default.resolve(a$1,"components.json"));}catch{e.warn(`Could not parse the existing ${d.info("components.json")}. Unable to detect the current base.`);}m&&(i.existingConfig=m);let g=i.reinstall;if(g===void 0){let{reinstall:d}=await Ce({type:"confirm",name:"reinstall",message:"Would you like to re-install existing UI components?",initial:!1});g=d;}if(g&&(n=await Ia(a$1),n.length)){e.break(),e.log(" The following components will be re-installed and overwritten:");for(let d=0;d<n.length;d+=8)e.log(` - ${n.slice(d,d+8).join(", ")}`);e.break();}}if(i.preset===void 0&&e$1.length===0&&!i.defaults){let g=L.existsSync(A__default.resolve(a$1,"package.json"));if(!i.template&&!g){let{template:d}=await Ce({type:"select",name:"template",message:"Select a template",choices:Object.entries(X).map(([y,b])=>({title:b.title,value:y,description:b.description,disabled:i.monorepo&&y==="laravel"}))});d||process.exit(1),i.template=d;}if(!i.template&&g){let d=await Fa$1(a$1),y=Ze(d?.framework.name);y&&(i.template=y);}if(i.template==="laravel"&&!g&&(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&&!g&&i.template&&X[i.template]?.monorepo){let{monorepo:d}=await Ce({type:"confirm",name:"monorepo",message:"Would you like to set up a monorepo?",initial:!1});i.monorepo=d;}i.base||(i.base=await Ye()),i.preset=!0;}if(i.preset!==void 0){let g=i.preset===!0?!0:i.preset;if(g===!0){let d=await ct({rtl:i.rtl??!1,template:i.template,base:i.base,pointer:i.pointer});e$1=[d.url,...e$1],l=d.base;}if(typeof g=="string"){let d$1;if(Q$1(g)){let y=new URL(g);Ea(y,i),y.pathname==="/init"&&g.startsWith(a)&&y.searchParams.set("track","1"),d$1=y.toString(),l=y.searchParams.get("base")??void 0;}else if(r(g)){let y=q$1(g);y||(e.error(`Invalid preset code: ${d.info(g)}`),e.break(),process.exit(1)),d$1=ge({...y,base:"base",rtl:i.rtl??!1},{template:i.template,preset:g,pointer:i.pointer}),l=void 0;}else {let y=s.get(g);if(!y)throw new Error(`Unknown preset: ${g}`);d$1=ge({...y,base:i.base??"base",rtl:i.rtl??y.rtl},{template:i.template,pointer:i.pointer}),l=void 0;}e$1=[d$1,...e$1];}}let p=i.base??l??(m?.style?m.style.startsWith("base-")?"base":"radix":""),h$1=f$1&&!m;if(!p)if(e$1.length>0&&!h$1)p="base";else {let g=await Ye();p=g,i.base=g;}if(i.defaults&&!e$1.some(Q$1)&&(e$1=[ge({...q.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 g=new URL(e$1[0]);g.searchParams.set("base",p),e$1[0]=g.toString();}if(m?.style){let g=await Na(m.style,p);if(g!==p&&(p=g,e$1.length>0&&Q$1(e$1[0]))){let d=new URL(e$1[0]);d.searchParams.set("base",g),e$1[0]=d.toString();}}if(n.length&&(e$1=[...e$1,...n]),i.components=e$1,await Q(i.cwd),e$1.length>0){let g=A__default.resolve(a$1,"components.json");f$1&&(r$1=dt(g)??void 0,r$1||e.warn(`Could not back up ${d.info("components.json")}.`));let{registryBaseConfig:d$1,installStyleIndex:y,url:b}=await Fe(e$1[0],a$1,{registries:m?.registries});e$1[0]=b,y||(i.installStyleIndex=!1),d$1&&(i.registryBaseConfig=d$1);}await tt(i),e.break(),e.log(`Project initialization completed.
|
|
125
|
+
You may now add components.`),process.removeListener("exit",o),gt(A__default.resolve(a$1,"components.json")),e.break();}catch(i){process.removeListener("exit",o),o(),e.break(),oa$1(i);}finally{ea();}});async function tt(e){let t,r,n,o=e.template,i=o?Te(X[o],{monorepo:e.monorepo}):void 0;if(e.monorepo&&i?.init&&L.existsSync(A__default.resolve(e.cwd,"package.json")))t=await Fa$1(e.cwd);else if(e.skipPreflight)t=await Fa$1(e.cwd);else {let R=await lo(e);if(R.errors["1"]){let{projectPath:I,template:U}=await Qt(e);I||process.exit(1),e.cwd=I,e.isNewProject=true,n=U,t=await Fa$1(e.cwd);}else t=R.projectInfo;}r=await Ga$1(e.cwd,t);let l=n??o,a=l?Te(X[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 Aa(r,e):await Ta(await Y(e.cwd));if(!e.yes){let{proceed:R}=await Ce({type:"confirm",name:"proceed",message:`Write configuration to ${d.info("components.json")}. Proceed?`,initial:true});R||process.exit(1);}let h=await Z$1(e.cwd,p),{config:g}=await H(f,h,{silent:true});g.registries&&(p.registries=g.registries);let d$1=E("Writing components.json.").start(),y=A__default.resolve(e.cwd,"components.json"),b$1=`${y}${et}`,C=(R,I)=>{let{registries:U,...K}=Po(R,I);return {...K,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"),d$1.succeed();let P=await Z$1(e.cwd,p),x=await _$1(P);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 I of Object.keys(x)){let U=x[I];if(U.resolvedPaths.cwd===P.resolvedPaths.cwd)continue;let K=A__default.resolve(U.resolvedPaths.cwd,"components.json");if(L.existsSync(K)){let Pe=await L.readJson(K);await L.writeJson(K,{...Pe,...R},{spaces:2});}}}return X$1.clearCaches(),await fe(f,P,{overwrite:true,overwriteCssVars:e.reinstall||void 0,silent:e.silent,isNewProject:e.isNewProject||t?.framework.name==="next-app"}),m&&await m({projectPath:e.cwd}),P}async function Ta(e$1=null){let[t,r]=await Promise.all([ua$1(),wa$1()]);e.info("");let n=await Ce([{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??V},{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??W},{type:"text",name:"components",message:`Configure the import alias for ${d.info("components")}:`,initial:e$1?.aliases.components??T},{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=Uo(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 Aa(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([ua$1(),Ha$1(e)]);r=(await Ce([{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 Na(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 Ce({type:"confirm",name:"proceed",message:"Would you like to continue?",initial:false});return n?t:r}async function Ho(e$1){let t={};if(!L.existsSync(e$1.cwd)||!L.existsSync(A__default.resolve(e$1.cwd,"package.json")))return t["1"]=true,{errors:t,config:null};if(!L.existsSync(A__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 Y(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 Go(e,t,r={}){let n={files:[],dependencies:[],devDependencies:[],css:null,envVars:null,fonts:[],docs:null};if(!e.length)return n;let o=await ka$1(e,da$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 Da(o,t,n,r,i),await La(o,t,n,r),_a(o,t,n),r.skipFonts||Ua(o,n),n}async function Da(e,t,r,n,o){let i=e.files;if(!i?.length)return;let[s,l]=await Promise.all([Fa$1(t.resolvedPaths.cwd),t.tailwind.baseColor?xa(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 h=i[p];if(!h.content)continue;let g=M(h,t,{isSrcDir:s?.isSrcDir,framework:s?.framework.name,commonRoot:N$1(i.map(I=>I.path),h.path),fileIndex:p});if(!g)continue;t.tsx||(g=g.replace(/\.tsx?$/,I=>I===".tsx"?".jsx":".js"));let d=existsSync(g),y=A__default.relative(t.resolvedPaths.cwd,g),b=h.type==="registry:file"||h.type==="registry:item",C=A$1(g)||b?h.content:await J({filename:h.path,raw:h.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$1]),P$1=A$1(g)||b?C:await P({config:t,content:C,filePaths:m,project:f,projectInfo:s,resolvedPath:g,tsConfig:a}),x="create",R;d&&(R=await promises.readFile(g,"utf-8"),z$1(R,P$1)?x="skip":x="overwrite"),r.files.push({path:y,action:x,content:P$1,...x==="overwrite"&&{existingContent:R},type:h.type??"registry:ui"});}}async function La(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=A__default.relative(t.resolvedPaths.cwd,s),f=l?await promises.readFile(s,"utf8"):"",m=f;i&&(m=await lt(m,e.cssVars,t,{overwriteCssVars:n.overwriteCssVars})),o&&(m=await Fr(m,e.css));let p=0;if(e.cssVars)for(let h of Object.values(e.cssVars))h&&(p+=Object.keys(h).length);r.css={path:a,content:m,...l&&{existingContent:f},action:l?"update":"create",cssVarsCount:p};}function _a(e,t,r){if(!e.envVars||Object.keys(e.envVars).length===0)return;let n=A__default.join(t.resolvedPaths.cwd,".env.local"),o=existsSync(n),i=A__default.relative(t.resolvedPaths.cwd,n);r.envVars={path:i,variables:e.envVars,action:o?"update":"create"};}function Ua(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 Re=5,Ba=dim("\u250C"+"\u2500".repeat(46)),za=dim("\u2514"+"\u2500".repeat(46)),Ha={create:"+",overwrite:"~",skip:"="},Ja={create:"create",overwrite:"overwrite",skip:"skip (identical)"};function yt(e){return e==="create"?green(e):e==="overwrite"||e==="update"?yellow(e):dim(e)}function wt(e){return `${bold("\u250C")} ${bold(`shadcn add ${e.join(", ")}`)} ${dim("(dry run)")}`}function qo(e,t){return e===t||e.includes(t)||e.endsWith(t)}function Ve(e,t,r=n=>n){e.push(`${dim("\u2502")} ${Ba}`);for(let n of t)e.push(`${dim("\u2502")} ${dim("\u2502")} ${r(n)}`);e.push(`${dim("\u2502")} ${za}`);}function Zo(e,t,r={}){return r.diff?typeof r.diff=="string"?Ka(e,t,r.diff):Ya(e,t):r.view?typeof r.view=="string"?Za(e,t,r.view):qa(e,t):Ga(e,t)}function Ga(e,t){let r=[];r.push(wt(t)),r.push(dim("\u2502")),Xa(e,r),Ko("Dependencies",e.dependencies,r),Ko("Dev Dependencies",e.devDependencies,r),Qa(e,r),ec(e,r),tc(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
128
|
`)}function Ka(e,t,r){let n=[];n.push(wt(t)),n.push(dim("\u2502"));let o=Qo(e.files,r),i=e.css&&qo(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)Xo(s,n);if(i&&e.css){if(n.push(`${dim("\u251C")} ${bold(e.css.path)} ${dim("(")}${yt(e.css.action)}${dim(")")}`),e.css.action==="create"||!e.css.existingContent)Ve(n,e.css.content.split(`
|
|
129
129
|
`),s=>green(`+${s}`));else {let s=ei(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 Ya(e,t){let r=[];r.push(wt(t)),r.push(dim("\u2502"));let n=e.files.slice(0,
|
|
131
|
-
`)}function qa(e,t){let r=[];r.push(wt(t)),r.push(dim("\u2502"));let n=e.files.slice(0,
|
|
132
|
-
`);r.push(`${dim("\u251C")} ${bold(s.path)} ${dim("(")}${yt(s.action)}${dim(")")} ${dim(`${l.length} lines`)}`),Ve(r,l),r.push(dim("\u2502"));}e.files.length>
|
|
130
|
+
`)}function Ya(e,t){let r=[];r.push(wt(t)),r.push(dim("\u2502"));let n=e.files.slice(0,Re);if(n.length===0&&!e.css)r.push(`${dim("\u2502")} ${dim("No changes.")}`),r.push(dim("\u2502"));else {for(let s of n)Xo(s,r);e.files.length>Re&&r.push(dim("\u2502"));}let o=e.files.length;return o>Re&&r.push(` ${dim(`Showing ${Re} 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 qa(e,t){let r=[];r.push(wt(t)),r.push(dim("\u2502"));let n=e.files.slice(0,Re);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(`
|
|
132
|
+
`);r.push(`${dim("\u251C")} ${bold(s.path)} ${dim("(")}${yt(s.action)}${dim(")")} ${dim(`${l.length} lines`)}`),Ve(r,l),r.push(dim("\u2502"));}e.files.length>Re&&r.push(dim("\u2502"));}let o=e.files.length;return o>Re&&r.push(` ${dim(`Showing ${Re} of ${o} files. Use --view <path> to view a specific file.`)}`),r.push(`${dim("\u2514")} ${dim("Run without --dry-run to apply.")}`),r.join(`
|
|
133
133
|
`)}function Xo(e,t){if(t.push(`${dim("\u251C")} ${bold(e.path)} ${dim("(")}${yt(e.action)}${dim(")")}`),e.action==="skip")t.push(`${dim("\u2502")} ${dim("No changes.")}`);else if(e.action==="create")Ve(t,e.content.split(`
|
|
134
134
|
`),r=>green(`+${r}`));else {let r=ei(e.existingContent,e.content,e.path);Ve(t,r);}t.push(dim("\u2502"));}function Za(e,t,r){let n=[];n.push(wt(t)),n.push(dim("\u2502"));let o=Qo(e.files,r),i=e.css&&qo(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(`
|
|
135
135
|
`);n.push(`${dim("\u251C")} ${bold(s.path)} ${dim("(")}${yt(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,35 +137,35 @@ Before you can add components, you must create a valid ${d.info("components.json
|
|
|
137
137
|
`)}function Xa(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=Ha[s.action],a=Ja[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 Ko(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 Qa(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 ec(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 tc(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 Qo(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 ei(e,t,r,n={}){if(sc(e,t))return [dim(" Formatting-only changes (spacing, quotes, semicolons).")];let o=Yo(e),i=Yo(t),s=n.fullContext?Math.max(o.split(`
|
|
138
138
|
`).length,i.split(`
|
|
139
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(`
|
|
140
|
-
`);for(let m of l.hunks){let{entries:p}=rc(m,f);if(!p.some(
|
|
140
|
+
`);for(let m of l.hunks){let{entries:p}=rc(m,f);if(!p.some(b=>b.kind!=="context"))continue;let g=p.filter(b=>b.kind==="context").length,d=p.filter(b=>b.kind==="removed").length,y=p.filter(b=>b.kind==="added").length;a.push(cyan(`@@ -${m.oldStart},${g+d} +${m.newStart},${g+y} @@`));for(let b of p)a.push(b.formatted);}return a}function rc(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=nc(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 nc(e,t,r,n,o){if(ac(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=oc(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((h,g)=>!l.has(g)&&h===m);if(p!==-1)l.add(p),o.push({kind:"context",formatted:dim(` ${f}`)});else {let h=s.findIndex((g,d)=>!l.has(d));if(h!==-1){l.add(h);let{oldHighlighted:g,newHighlighted:d}=ic(i[h],f);o.push({kind:"removed",formatted:g}),o.push({kind:"added",formatted:d});}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 Yo(e){return e.split(`
|
|
141
141
|
`).map(t=>{let r=t.match(/^(\s*)/)?.[1]??"",n=t.slice(r.length);return r+n.replace(/['"]/g,'"').replace(/;$/g,"")}).join(`
|
|
142
142
|
`)}function oc(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 ic(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 sc(e,t){let r=n=>n.split(`
|
|
143
143
|
`).map(tr).filter(o=>o.length>0).join(" ");return r(e)===r(t)}function ac(e,t){let r=n=>n.map(tr).filter(o=>o.length>0).join(" ");return r(e)===r(t)}async function ri(e,t){let r=A__default.join(t.resolvedPaths.cwd,"app/page.tsx");if(!(await bt__default.stat(r)).isFile())return;let[n]=await qa$1([e],{config:t});if(!n?.meta?.importSpecifier||!n?.meta?.moduleSpecifier)return;let o=`import { ${n?.meta?.importSpecifier} } from "${n.meta.moduleSpecifier}"
|
|
144
144
|
|
|
145
145
|
export default function Page() {
|
|
146
146
|
return <${n?.meta?.importSpecifier} />
|
|
147
|
-
}`;await bt__default.writeFile(r,o,"utf8");}var mc=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()}),ni=new Command().name("add").description("add a component to your project").argument("[components...]","item addresses to add").option("-y, --yes","skip confirmation prompt.",false).option("-o, --overwrite","overwrite existing files.",false).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-a, --all","add all available components",false).option("-p, --path <path>","the path to add the component to.").option("-s, --silent","mute output.",false).option("--dry-run","preview changes without writing files.",false).option("--diff [path]","show diff for a file.").option("--view [path]","show file contents.").action(async(e$1,t)=>{try{let r=mc.parse({components:e$1,...t,cwd:A__default.resolve(t.cwd)});await Q(r.cwd);let n=r.dryRun||r.diff||r.view,o=await Y(r.cwd);o||(o=ca$1({style:"new-york",resolvedPaths:{cwd:r.cwd}}));let i=!1;if(e$1.length>0){let{config:
|
|
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 pc(r));let a=await Fa$1(r.cwd);if(a?.tailwindVersion==="v4"){let
|
|
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 gc=z.object({cwd:z.string(),positionalPreset:z.string().optional(),preset:z.string().optional(),only:z.union([z.boolean(),z.string()]).optional(),yes:z.boolean(),silent:z.boolean()}),ai=["theme","font"],nt=class extends Error{constructor(t){super(t),this.name="ApplyOnlyError";}},rr=class extends Error{constructor(t){super(t),this.name="ApplyWorkspaceSyncError";}},ci=new Command().name("apply").description("apply a preset to an existing project").argument("[preset]","the preset to apply").option("--preset <preset>","preset configuration to apply").option("--only [parts]","apply only parts of a preset: theme, font").option("-y, --yes","skip confirmation prompt.",false).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-s, --silent","mute output.",false).action(async(e$1,t)=>{try{let r=gc.parse({...t,cwd:A__default.resolve(t.cwd),positionalPreset:e$1}),n=hc(r),o=ii(r.only);bc({preset:n,only:o});let i=await oi(r);i.errors["1"]&&(e.break(),e.error(`The ${d.info("apply")} command only works in an existing project.`),e.error(`Run ${d.info(si(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(si(n))} first.`),e.break(),process.exit(1));let s=i.config;s||process.exit(1);let l=s.rtl??!1,a=await
|
|
147
|
+
}`;await bt__default.writeFile(r,o,"utf8");}var mc=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()}),ni=new Command().name("add").description("add a component to your project").argument("[components...]","item addresses to add").option("-y, --yes","skip confirmation prompt.",false).option("-o, --overwrite","overwrite existing files.",false).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-a, --all","add all available components",false).option("-p, --path <path>","the path to add the component to.").option("-s, --silent","mute output.",false).option("--dry-run","preview changes without writing files.",false).option("--diff [path]","show diff for a file.").option("--view [path]","show file contents.").action(async(e$1,t)=>{try{let r=mc.parse({components:e$1,...t,cwd:A__default.resolve(t.cwd)});await Q(r.cwd);let n=r.dryRun||r.diff||r.view,o=await Y(r.cwd);o||(o=ca$1({style:"new-york",resolvedPaths:{cwd:r.cwd}}));let i=!1;if(e$1.length>0){let{config:d,newRegistries:y}=await H(e$1,o,{silent:r.silent,writeFile:!1});o=d,i=y.length>0;}let s,l=!0;if(e$1.length>0){let[d$1]=await qa$1([e$1[0]],{config:o});if(s=d$1?.type,l=s!=="registry:theme"&&s!=="registry:style"&&s!=="registry:base",R(d$1)&&!n){await fe(e$1,o,r);return}if(!r.yes&&!n&&(s==="registry:style"||s==="registry:theme")){e.break();let{confirm:y}=await Ce({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 pc(r));let a=await Fa$1(r.cwd);if(a?.tailwindVersion==="v4"){let d$1=c$1.filter(y=>r.components?.includes(y.name));d$1?.length&&(e.break(),d$1.forEach(y=>{e.warn(d.warn(y.message));}),e.break(),process.exit(1));}let{errors:f,config:m}=await Ho(r),p=!1;if(f["3"]){let{proceed:d$1}=await Ce({type:"confirm",name:"proceed",message:`You need to create a ${d.info("components.json")} file to add components. Proceed?`,initial:!0});d$1||(e.break(),process.exit(1));let y=Ze(a?.framework.name),b=await Ye(),{url:C}=await ct({rtl:!1,base:b,template:y}),{registryBaseConfig:P,installStyleIndex:x,url:R}=await Fe(C,r.cwd);m=await tt({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:P}),p=!0;}let h=!1;if(f["1"]){let{projectPath:d,template:y}=await Qt({cwd:r.cwd,force:r.overwrite,components:r.components});d||(e.break(),process.exit(1)),r.cwd=d;let b=await Ye(),{url:C}=await ct({rtl:!1,base:b,template:y}),{registryBaseConfig:P,installStyleIndex:x,url:R}=await Fe(C,r.cwd);m=await tt({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:P}),p=!0,h=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:g}=await H(r.components,m,{silent:r.silent||i,writeFile:!n});if(m=g,n){let d=E("Resolving items.",{silent:r.silent}).start(),y=await Go(r.components,m,{overwrite:r.overwrite});d.stop(),e.log(Zo(y,r.components,{diff:r.diff,view:r.view}));return}p||await fe(r.components,m,r),h&&await ri(r.components[0],m);}catch(r){e.break(),oa$1(r);}finally{ea();}});async function pc(e$1){let t=await ta();if(!t)return e.break(),oa$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 Ce({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(""),oa$1(new Error("Something went wrong. Please try again.")),[])}async function oi(e$1){let t={};if(!L.existsSync(e$1.cwd)||!L.existsSync(A__default.resolve(e$1.cwd,"package.json")))return t["1"]=true,{errors:t,config:null};if(!L.existsSync(A__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 Fa$1(A__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 Y(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 gc=z.object({cwd:z.string(),positionalPreset:z.string().optional(),preset:z.string().optional(),only:z.union([z.boolean(),z.string()]).optional(),yes:z.boolean(),silent:z.boolean()}),ai=["theme","font"],nt=class extends Error{constructor(t){super(t),this.name="ApplyOnlyError";}},rr=class extends Error{constructor(t){super(t),this.name="ApplyWorkspaceSyncError";}},ci=new Command().name("apply").description("apply a preset to an existing project").argument("[preset]","the preset to apply").option("--preset <preset>","preset configuration to apply").option("--only [parts]","apply only parts of a preset: theme, font").option("-y, --yes","skip confirmation prompt.",false).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-s, --silent","mute output.",false).action(async(e$1,t)=>{try{let r=gc.parse({...t,cwd:A__default.resolve(t.cwd),positionalPreset:e$1}),n=hc(r),o=ii(r.only);bc({preset:n,only:o});let i=await oi(r);i.errors["1"]&&(e.break(),e.error(`The ${d.info("apply")} command only works in an existing project.`),e.error(`Run ${d.info(si(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(si(n))} first.`),e.break(),process.exit(1));let s=i.config;s||process.exit(1);let l=s.rtl??!1,a=await Rc(r.cwd);if(!n){let y=Ir({command:"init",template:a,base:ba$1(s.style),rtl:l});await jr({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);}Cc(n);let f=o??ii(yc(n)),m=!f,p=m?await Ia(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 Ce({type:"confirm",name:"proceed",message:"Would you like to continue?",initial:!1});y||(e.break(),process.exit(1));}await Q(r.cwd);let h=ba$1(s.style),g=Sc(n,h,{template:a,rtl:l,only:f?.join(",")}),d$1=await Wo(A__default.resolve(r.cwd,"components.json"),async()=>{let{registryBaseConfig:y,installStyleIndex:b,url:C}=await Fe(g,r.cwd,{registries:s.registries}),P=kc({registryBaseConfig:y,existingConfig:s,only:f});return await tt({cwd:r.cwd,yes:!0,force:!1,reinstall:m,defaults:!1,silent:r.silent,isNewProject:!1,cssVariables:!0,installStyleIndex:b,registryBaseConfig:P,existingConfig:s,components:[C,...p]})});await vc(d$1,{only:f}),e.break(),e.log("Preset applied successfully."),e.break();}catch(r){if(r instanceof nt){for(let n of r.message.split(`
|
|
150
150
|
`))e.error(n);e.break(),process.exit(1);}r instanceof Xe&&(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(),oa$1(r);}finally{ea();}});function hc(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 yc(e){if(!Q$1(e))return;let t=new URL(e);if(t.pathname==="/init")return t.searchParams.get("only")??void 0}function ii(e){if(!(e===void 0||e===false)){if(e===true)throw new nt(["Missing value for --only.",`Use one or more of: ${ai.join(", ")}.`,"Example: shadcn apply <preset> --only theme,font."].join(`
|
|
151
151
|
`));return wc(e)}}function wc(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 nt([`Invalid value for --only: ${e}.`,`Use one or more of: ${ai.join(", ")}.`,"Example: shadcn apply <preset> --only theme,font."].join(`
|
|
152
152
|
`));return Array.from(new Set(r.map(o=>t[o])))}function bc(e){if(!(!e.only||e.preset))throw new nt(["Missing preset for --only.","Use: shadcn apply <preset> --only theme,font."].join(`
|
|
153
153
|
`))}function kc(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 Cc(e$1){if(Q$1(e$1)||r(e$1))return;let t=Object.keys(q);t.includes(e$1)||(e.error(`Invalid preset: ${d.info(e$1)}.
|
|
154
154
|
Use one of the available presets: ${t.join(", ")}
|
|
155
|
-
or build your own at ${d.info(`${a}/create`)}`),e.break(),process.exit(1));}async function
|
|
155
|
+
or build your own at ${d.info(`${a}/create`)}`),e.break(),process.exit(1));}async function Rc(e){let t=await Fa$1(e);return Ze(t?.framework.name)}async function vc(e,t){if(t?.only&&!t.only.includes("theme"))return;let r=await xc(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=A__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 Xe(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())Qe(s.configPath);throw new rr(`Failed to sync linked workspace configs.${i instanceof Error?` ${i.message}`:""}`)}}async function xc(e){let t=await _$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 Sc(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$1(e$1);return o||(e.error(`Invalid preset code: ${d.info(e$1)}`),e.break(),process.exit(1)),ge({...o,base:t,rtl:r$1.rtl??false},{preset:e$1,template:r$1.template,only:r$1.only})}let n=q[e$1];return ge({...n,base:t,rtl:r$1.rtl??n.rtl},{template:r$1.template,only:r$1.only})}function Pc(e){return /[^A-Za-z0-9_./:-]/.test(e)?JSON.stringify(e):e}function si(e){return e?`shadcn init --preset ${Pc(e)}`:"shadcn init"}async function mi(e$1){let t={},r={cwd:e$1.cwd,registryFile:A__default.resolve(e$1.cwd,e$1.registryFile),outputDir:A__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 jc=z.object({cwd:z.string(),registryFile:z.string(),outputDir:z.string()}),pi=new Command().name("build").description("build components for a shadcn registry").argument("[registry]","path to registry.json file","./registry.json").option("-o, --output <path>","destination directory for json files","./public/r").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e$1,t)=>{try{let r=jc.parse({cwd:A.resolve(t.cwd),registryFile:e$1,outputDir:t.output}),{resolvePaths:n}=await mi(r),o=await La$1(n.registryFile,{cwd:n.cwd}),i=o.registry,s=o.usesInclude?A.dirname(n.registryFile):n.cwd,l=Ma(o,s,n.cwd),a=E("Building registry...");for(let f of i.items){a.start(`Building ${f.name}...`);let m=await Na$1(f,o,s,n.cwd);await bt.writeFile(A.resolve(n.outputDir,`${m.name}.json`),JSON.stringify(m,null,2));}o.usesInclude?await bt.writeFile(A.resolve(n.outputDir,"registry.json"),JSON.stringify(l,null,2)):await bt.copyFile(n.registryFile,A.resolve(n.outputDir,"registry.json")),a.succeed("Building registry.");}catch(r){e.break(),oa$1(r);}});var Ac=z.object({component:z.string().optional(),yes:z.boolean(),cwd:z.string(),path:z.string().optional()}),di=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=Ac.parse({component:e$1,...t}),n=A__default.resolve(r.cwd);existsSync(n)||(e.error(`The path ${n} does not exist. Please try again.`),process.exit(1));let o=await Y(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 ta();if(i||(oa$1(new Error("Failed to fetch registry index.")),process.exit(1)),!r.component){let a=o.resolvedPaths.components,f=i.filter(p=>{for(let h of p.files??[]){let g=A__default.resolve(a,typeof h=="string"?h:h.path);if(existsSync(g))return !0}return !1}),m=[];for(let p of f){let h=await ui(p,o);h.length&&m.push({name:p.name,changes:h});}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 h of p.changes)e.info(` - ${h.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 ui(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 Nc(a.patch),e.info("");}catch(r){oa$1(r);}});async function ui(e,t){let r=await za$1(t.style,[e]),n=await xa(t.tailwind.baseColor),o=Ae(r);if(!r)return [];let i=[];for(let s of r){let l=await Aa$1(t,s);if(l)for(let a of s.files??[]){let f=A__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$1]),h=diffLines(p,m);h.length>1&&i.push({filePath:f,patch:h});}}return i}async function Nc(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 gi="https://ui.shadcn.com",hi=new Command().name("docs").description("get docs, api references and usage examples for components").argument("<components...>","component names").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-b, --base <base>","the base to use either 'base' or 'radix'. defaults to project base.").option("--json","output as JSON.",false).action(async(e$1,t)=>{try{let r=A__default.resolve(t.cwd),n=await Y(r),o=t.base??ba$1(n?.style),i=await ta();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:Dc(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){oa$1(r);}});function Dc(e){return Object.fromEntries(Object.entries(e).map(([t,r])=>[t,r.startsWith(gi)?`${a}${r.slice(gi.length)}`:r]))}var yi=/@import\s+["']shadcn\/tailwind\.css["'];?\s*\n?/,Uc=z.object({cwd:z.string(),yes:z.boolean(),silent:z.boolean()}),wi=new Command().name("eject").description("inline shadcn/tailwind.css and remove the shadcn dependency").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-y, --yes","skip confirmation prompt.",false).option("-s, --silent","mute output.",false).action(async e=>{try{let t=Uc.parse({cwd:A__default.resolve(e.cwd),yes:e.yes,silent:e.silent});await Mc(t);}catch(t){oa$1(t);}});async function Mc(e$1){if(!L.existsSync(A__default.resolve(e$1.cwd,"components.json"))){if(await f(e$1.cwd)){let m=await g(e$1.cwd);m.length>0&&(h("eject",m),process.exit(1));}e.break(),e.error(`No ${d.info("components.json")} found. Run ${d.info("shadcn init")} first.`),e.error(`Learn more at ${d.info(`${a}/docs/components-json`)}.`),e.break(),process.exit(1);}let t=await Y(e$1.cwd);t?.resolvedPaths.tailwindCss||(e.break(),e.error("Could not resolve the Tailwind CSS file from components.json."),e.break(),process.exit(1));let r=t.resolvedPaths.tailwindCss,n=A__default.relative(e$1.cwd,r),o=await promises.readFile(r,"utf8");yi.test(o)||(e.break(),e.error(`Could not find ${d.info('@import "shadcn/tailwind.css"')} in ${d.info(n)}.`),e.error("Nothing to eject."),e.break(),process.exit(1));let i=y(e$1.cwd,false),s=Wc(i),l=zc(e$1.cwd),a$1=await promises.readFile(l,"utf8");if(e$1.silent||(e.break(),e.warn("This action is not reversible. Future shadcn CLI updates to tailwind.css will not apply automatically."),e.break()),!e$1.yes){e.log("This will:"),e.log(` - Inline ${d.info("shadcn/tailwind.css")} into ${d.info(n)}`),e.log(` - Remove the ${d.info("shadcn")} dependency`),e.break();let{proceed:m}=await Ce({type:"confirm",name:"proceed",message:"Proceed?",initial:false});m||process.exit(0);}let f$1=E(`Inlining ${d.info("shadcn/tailwind.css")}.`,{silent:e$1.silent})?.start();if(o=o.replace(yi,()=>`/* ejected from shadcn@${s} */
|
|
156
156
|
${a$1.trim()}
|
|
157
157
|
|
|
158
|
-
`),await promises.writeFile(r,o,"utf8"),f$1?.succeed(),Bc(i)){let m=E(`Removing ${d.info("shadcn")}.`,{silent:e$1.silent})?.start();await Hc(e$1.cwd),m?.succeed();}else e$1.silent||e.warn(`The ${d.info("shadcn")} package was not found in package.json. Skipped removal.`);e.break(),e.log(`Ejected ${d.info("shadcn/tailwind.css")} into ${d.info(n)}.`),e.break();}function Wc(e){return e?(e.dependencies?.shadcn??e.devDependencies?.shadcn??"unknown").replace(/^[\^~]/,"").trim():"unknown"}function Bc(e){return e?!!(e.dependencies?.shadcn||e.devDependencies?.shadcn):false}function zc(e){let t=A__default.join(e,"node_modules/shadcn/dist/tailwind.css");if(L.existsSync(t))return t;let r=process.argv[1]?A__default.dirname(A__default.resolve(process.argv[1])):e;for(let n of [A__default.join(r,"tailwind.css"),A__default.join(r,"dist","tailwind.css"),A__default.join(r,"src","tailwind.css"),A__default.join(process.cwd(),"src/tailwind.css"),A__default.join(process.cwd(),"dist/tailwind.css")])if(L.existsSync(n))return n;throw new Error("Could not resolve shadcn/tailwind.css.")}async function Hc(e){switch(await la$1(e)){case "npm":await execa("npm",["uninstall","shadcn"],{cwd:e});break;case "pnpm":await execa("pnpm",["remove","shadcn"],{cwd:e});break;case "yarn":await execa("yarn",["remove","shadcn"],{cwd:e});break;case "bun":await execa("bun",["remove","shadcn"],{cwd:e});break;case "deno":{let r=A__default.join(e,"package.json"),n=await L.readJson(r);for(let o of ["dependencies","devDependencies"])n[o]?.shadcn&&delete n[o].shadcn;await L.writeJson(r,n,{spaces:2});break}}}var Jc=["50","100","200","300","400","500","600","700","800","900","950"],Gc=["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"],Kc={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)"}},Yc={"220.9 39.3% 11%":"gray","210 20% 98%":"gray","12 76% 61%":"gray","220 70% 50%":"gray"},ki=new Map;for(let e of Gc)for(let t of Jc)ki.set(vi(Kc[e][t]),e);function Ci(e){let t=vi(e);return t?ki.get(t)??Yc[t]??null:null}function vi(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=Jr(o[0],{percentage:true}),s=Jr(o[1]),l=Jr(o[2]);return `oklch(${i} ${s} ${l})`}function Jr(e,t={}){return t.percentage&&e.endsWith("%")?bi(Number.parseFloat(e)/100):bi(Number.parseFloat(e))}function bi(e){return Number.isNaN(e)?"":Number(e.toFixed(12)).toString()}var tl=new Set(c$3),rl=new Set(g$2),nl=new Set(k),ol=new Set(l),il=new Set(h$1),sl=new Set(i),al=new Set(d$2),cl=new Set(["eb-garamond","instrument-serif","lora","merriweather","playfair-display","noto-serif","roboto-slab"]),ll=new Set(["jetbrains-mono","geist-mono"]),Rt=["--font-sans","--font-serif","--font-mono"],$i=new Set(Rt),fl=[...Rt,"--font-heading"],Ii=new Set(fl),Ri={appliedBodyVariable:null,variables:{}},ml={0:"none","0rem":"none","0.45rem":"small","0.625rem":"default","0.875rem":"large"};async function cr(e,t){let r=ul(e.style);if(!r)return {code:null,fallbacks:[],values:null};let n=q[r],o=await pl(e.resolvedPaths.tailwindCss),i=sr(tl,e.tailwind.baseColor),s=hl(o),l=yl(o),a=sr(rl,e.iconLibrary),f=xi(o,Ri),m=f??n.font,p$1=Si(o,m,Ri);if(!f||!p$1){let P=t;if(t===void 0)try{P=await Fa$1(e.resolvedPaths.cwd,{configCssFile:e.tailwind.css});}catch{P=null;}let x=await vl(e,P);f??=xi(o,x),m=f??n.font,p$1??=Si(o,m,x);}let u=bl(p$1??n.fontHeading,m,n.fontHeading),h=wl(o.rootVars["--radius"]),g=sr(nl,e.menuAccent),y=sr(ol,e.menuColor),k={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(k),fallbacks:C,values:k}}async function pl(e){let t={darkVars:{},imports:[],rootVars:{},themeVars:{}};if(!e)return t;try{let r=await promises.readFile(e,"utf8");return dl(r)}catch{return t}}function ul(e){if(!e)return null;let t=e.replace(/^(base|radix)-/,"");return t in q?t:null}function dl(e){let t=$$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")&&Gr(n,r.rootVars),o.includes(".dark")&&Gr(n,r.darkVars);}),t.walkAtRules("theme",n=>{n.params.trim()==="inline"&&Gr(n,r.themeVars);}),r}function Gr(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 hl(e){let t=ar(e.rootVars["--primary"]);if(!t)return null;let r=e.darkVars["--primary"];return r?ar(r)===t?t:null:t}function yl(e){let t=ar(e.rootVars["--chart-1"]);if(!t)return null;let r=e.darkVars["--chart-1"];return r?ar(r)===t?t:null:t}function ar(e){let t=Ci(e);return !t||!al.has(t)?null:t}function wl(e){if(!e)return null;let t=lr(e);return ml[t]??null}function xi(e,t){for(let r of Rt){let n=Fi(e,r);if(n)return n}for(let r of Rt){let n=kl(e.imports,r);if(n)return n}return Cl(t)}function Si(e,t,r){let n=Kr(e,"--font-heading"),o=n?Ti(n):null;if(o)return o===t?"inherit":o;let i=r.variables["--font-heading"],s=ji(e,"--font-heading");if(!s)return i&&i!==t?i:null;let l=Yr(s);if(l&&$i.has(l)){let a=Fi(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 bl(e,t,r){let n=e===t?"inherit":e;return sl.has(n)?n:r}function Kr(e,t,r=new Set){if(r.has(t))return null;r.add(t);let n=ji(e,t);if(!n)return null;let o=Yr(n);return o?Ii.has(o)?Kr(e,o,r):null:n}function ji(e,t){let r=e.themeVars[t];return r&&Yr(r)!==t?r:e.rootVars[t]??r??null}function Yr(e){return lr(e).match(/^var\((--[a-z0-9-]+)\)$/)?.[1]??null}function Fi(e,t){let r=Kr(e,t),n=r?Ti(r):null;return n||null}function kl(e,t){let r=e.flatMap(n=>{let o=Fl(n);return o&&Tl(o)===t?[o]:[]});return r.length===1?r[0]:null}function Cl(e){if(e.appliedBodyVariable&&e.variables[e.appliedBodyVariable])return e.variables[e.appliedBodyVariable]??null;let t=Rt.map(r=>e.variables[r]).filter(Boolean).filter((r,n,o)=>o.indexOf(r)===n);return t.length===1?t[0]:null}async function vl(e,t){let r={appliedBodyVariable:null,variables:{}};if(!t||t.framework.name!=="next-app"&&t.framework.name!=="next-pages")return r;let n=Rl(e,t);if(!n)return r;try{let o=await promises.readFile(n,"utf8");return xl(o,t.framework.name)}catch{return r}}function Rl(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=A__default.join(e.resolvedPaths.cwd,o);if(existsSync(i))return i}return null}function xl(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=El(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=Sl(f);p&&(s.set(a.getName(),p),i[p]=m);}return {appliedBodyVariable:Pl(n,s,t),variables:i}}function Sl(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=Ei(n.getText());return Ii.has(o)?o:null}function Pl(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=$l(l,t),f=Il(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 $l(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&&$i.has(s)&&n.add(s);}return Array.from(n)}function Il(e){let t=jl(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 jl(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 Ei(e){return e.replace(/^['"]|['"]$/g,"")}function Ti(e){if(!e)return null;let t=Ei(e.split(",")[0]?.trim()??"").replace(/\s+variable$/i,"").trim();return t?qr(t.replace(/\s+/g,"-")):null}function Fl(e){if(!e)return null;let t=lr(e),r="@fontsource-variable/";return t.startsWith(r)?qr(t.slice(r.length)):null}function El(e){return e?qr(e.replace(/_/g,"-")):null}function qr(e){let t=lr(e);return il.has(t)?t:null}function Tl(e){return ll.has(e)?"--font-mono":cl.has(e)?"--font-serif":"--font-sans"}function lr(e){return e?e.trim().replace(/\s+/g," ").replace(/\s*,\s*/g,", ").replace(/"/g,"'").toLowerCase():""}function sr(e,t){return t&&e.has(t)?t:null}var Ni=`${a}/code/apps/v4/registry/bases`,Oi=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=A__default.resolve(e.cwd);if(!existsSync(A__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 Fa$1(t),n=await Y(t),o=await Ia(t),i=ba$1(n?.style),s=await Vl(r,n,o,i);if(e.json){console.log(JSON.stringify(s,null,2));return}Dl(s);}catch(t){oa$1(t);}});function Ol(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 Vl(e,t,r,n){let o=t?await cr(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:Ol(t.registries)}:null,preset:o,components:r,links:{docs:`${a}/docs`,components:`${a}/docs/components/${n}/[component].md`,ui:`${Ni}/${n}/ui/[component].tsx`,examples:`${Ni}/${n}/examples/[component]-example.tsx`,schema:`${a}/schema.json`}}}function Dl(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(),fr(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 fr(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",pr=[{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]
|
|
158
|
+
`),await promises.writeFile(r,o,"utf8"),f$1?.succeed(),Bc(i)){let m=E(`Removing ${d.info("shadcn")}.`,{silent:e$1.silent})?.start();await Hc(e$1.cwd),m?.succeed();}else e$1.silent||e.warn(`The ${d.info("shadcn")} package was not found in package.json. Skipped removal.`);e.break(),e.log(`Ejected ${d.info("shadcn/tailwind.css")} into ${d.info(n)}.`),e.break();}function Wc(e){return e?(e.dependencies?.shadcn??e.devDependencies?.shadcn??"unknown").replace(/^[\^~]/,"").trim():"unknown"}function Bc(e){return e?!!(e.dependencies?.shadcn||e.devDependencies?.shadcn):false}function zc(e){let t=A__default.join(e,"node_modules/shadcn/dist/tailwind.css");if(L.existsSync(t))return t;let r=process.argv[1]?A__default.dirname(A__default.resolve(process.argv[1])):e;for(let n of [A__default.join(r,"tailwind.css"),A__default.join(r,"dist","tailwind.css"),A__default.join(r,"src","tailwind.css"),A__default.join(process.cwd(),"src/tailwind.css"),A__default.join(process.cwd(),"dist/tailwind.css")])if(L.existsSync(n))return n;throw new Error("Could not resolve shadcn/tailwind.css.")}async function Hc(e){switch(await la$1(e)){case "npm":await execa("npm",["uninstall","shadcn"],{cwd:e});break;case "pnpm":await execa("pnpm",["remove","shadcn"],{cwd:e});break;case "yarn":await execa("yarn",["remove","shadcn"],{cwd:e});break;case "bun":await execa("bun",["remove","shadcn"],{cwd:e});break;case "deno":{let r=A__default.join(e,"package.json"),n=await L.readJson(r);for(let o of ["dependencies","devDependencies"])n[o]?.shadcn&&delete n[o].shadcn;await L.writeJson(r,n,{spaces:2});break}}}var Jc=["50","100","200","300","400","500","600","700","800","900","950"],Gc=["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"],Kc={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)"}},Yc={"220.9 39.3% 11%":"gray","210 20% 98%":"gray","12 76% 61%":"gray","220 70% 50%":"gray"},ki=new Map;for(let e of Gc)for(let t of Jc)ki.set(Ri(Kc[e][t]),e);function Ci(e){let t=Ri(e);return t?ki.get(t)??Yc[t]??null:null}function Ri(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=Jr(o[0],{percentage:true}),s=Jr(o[1]),l=Jr(o[2]);return `oklch(${i} ${s} ${l})`}function Jr(e,t={}){return t.percentage&&e.endsWith("%")?bi(Number.parseFloat(e)/100):bi(Number.parseFloat(e))}function bi(e){return Number.isNaN(e)?"":Number(e.toFixed(12)).toString()}var tl=new Set(c$3),rl=new Set(g$2),nl=new Set(k),ol=new Set(l),il=new Set(h$1),sl=new Set(i),al=new Set(d$2),cl=new Set(["eb-garamond","instrument-serif","lora","merriweather","playfair-display","noto-serif","roboto-slab"]),ll=new Set(["jetbrains-mono","geist-mono"]),vt=["--font-sans","--font-serif","--font-mono"],$i=new Set(vt),fl=[...vt,"--font-heading"],Ii=new Set(fl),vi={appliedBodyVariable:null,variables:{}},ml={0:"none","0rem":"none","0.45rem":"small","0.625rem":"default","0.875rem":"large"};async function cr(e,t){let r=ul(e.style);if(!r)return {code:null,fallbacks:[],values:null};let n=q[r],o=await pl(e.resolvedPaths.tailwindCss),i=sr(tl,e.tailwind.baseColor),s=hl(o),l=yl(o),a=sr(rl,e.iconLibrary),f=xi(o,vi),m=f??n.font,p$1=Si(o,m,vi);if(!f||!p$1){let P=t;if(t===void 0)try{P=await Fa$1(e.resolvedPaths.cwd,{configCssFile:e.tailwind.css});}catch{P=null;}let x=await Rl(e,P);f??=xi(o,x),m=f??n.font,p$1??=Si(o,m,x);}let h=bl(p$1??n.fontHeading,m,n.fontHeading),g=wl(o.rootVars["--radius"]),d=sr(nl,e.menuAccent),y=sr(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:h,radius:g??n.radius,menuAccent:d??n.menuAccent,menuColor:y??n.menuColor},C=[!i&&"baseColor",!s&&"theme",!l&&"chartColor",!a&&"iconLibrary",!f&&"font",!p$1&&"fontHeading",!g&&"radius",!d&&"menuAccent",!y&&"menuColor"].filter(Boolean);return {code:p(b),fallbacks:C,values:b}}async function pl(e){let t={darkVars:{},imports:[],rootVars:{},themeVars:{}};if(!e)return t;try{let r=await promises.readFile(e,"utf8");return dl(r)}catch{return t}}function ul(e){if(!e)return null;let t=e.replace(/^(base|radix)-/,"");return t in q?t:null}function dl(e){let t=$$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")&&Gr(n,r.rootVars),o.includes(".dark")&&Gr(n,r.darkVars);}),t.walkAtRules("theme",n=>{n.params.trim()==="inline"&&Gr(n,r.themeVars);}),r}function Gr(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 hl(e){let t=ar(e.rootVars["--primary"]);if(!t)return null;let r=e.darkVars["--primary"];return r?ar(r)===t?t:null:t}function yl(e){let t=ar(e.rootVars["--chart-1"]);if(!t)return null;let r=e.darkVars["--chart-1"];return r?ar(r)===t?t:null:t}function ar(e){let t=Ci(e);return !t||!al.has(t)?null:t}function wl(e){if(!e)return null;let t=lr(e);return ml[t]??null}function xi(e,t){for(let r of vt){let n=Fi(e,r);if(n)return n}for(let r of vt){let n=kl(e.imports,r);if(n)return n}return Cl(t)}function Si(e,t,r){let n=Kr(e,"--font-heading"),o=n?Ti(n):null;if(o)return o===t?"inherit":o;let i=r.variables["--font-heading"],s=ji(e,"--font-heading");if(!s)return i&&i!==t?i:null;let l=Yr(s);if(l&&$i.has(l)){let a=Fi(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 bl(e,t,r){let n=e===t?"inherit":e;return sl.has(n)?n:r}function Kr(e,t,r=new Set){if(r.has(t))return null;r.add(t);let n=ji(e,t);if(!n)return null;let o=Yr(n);return o?Ii.has(o)?Kr(e,o,r):null:n}function ji(e,t){let r=e.themeVars[t];return r&&Yr(r)!==t?r:e.rootVars[t]??r??null}function Yr(e){return lr(e).match(/^var\((--[a-z0-9-]+)\)$/)?.[1]??null}function Fi(e,t){let r=Kr(e,t),n=r?Ti(r):null;return n||null}function kl(e,t){let r=e.flatMap(n=>{let o=Fl(n);return o&&Tl(o)===t?[o]:[]});return r.length===1?r[0]:null}function Cl(e){if(e.appliedBodyVariable&&e.variables[e.appliedBodyVariable])return e.variables[e.appliedBodyVariable]??null;let t=vt.map(r=>e.variables[r]).filter(Boolean).filter((r,n,o)=>o.indexOf(r)===n);return t.length===1?t[0]:null}async function Rl(e,t){let r={appliedBodyVariable:null,variables:{}};if(!t||t.framework.name!=="next-app"&&t.framework.name!=="next-pages")return r;let n=vl(e,t);if(!n)return r;try{let o=await promises.readFile(n,"utf8");return xl(o,t.framework.name)}catch{return r}}function vl(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=A__default.join(e.resolvedPaths.cwd,o);if(existsSync(i))return i}return null}function xl(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=El(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=Sl(f);p&&(s.set(a.getName(),p),i[p]=m);}return {appliedBodyVariable:Pl(n,s,t),variables:i}}function Sl(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=Ei(n.getText());return Ii.has(o)?o:null}function Pl(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=$l(l,t),f=Il(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 $l(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&&$i.has(s)&&n.add(s);}return Array.from(n)}function Il(e){let t=jl(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 jl(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 Ei(e){return e.replace(/^['"]|['"]$/g,"")}function Ti(e){if(!e)return null;let t=Ei(e.split(",")[0]?.trim()??"").replace(/\s+variable$/i,"").trim();return t?qr(t.replace(/\s+/g,"-")):null}function Fl(e){if(!e)return null;let t=lr(e),r="@fontsource-variable/";return t.startsWith(r)?qr(t.slice(r.length)):null}function El(e){return e?qr(e.replace(/_/g,"-")):null}function qr(e){let t=lr(e);return il.has(t)?t:null}function Tl(e){return ll.has(e)?"--font-mono":cl.has(e)?"--font-serif":"--font-sans"}function lr(e){return e?e.trim().replace(/\s+/g," ").replace(/\s*,\s*/g,", ").replace(/"/g,"'").toLowerCase():""}function sr(e,t){return t&&e.has(t)?t:null}var Ni=`${a}/code/apps/v4/registry/bases`,Oi=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=A__default.resolve(e.cwd);if(!existsSync(A__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 Fa$1(t),n=await Y(t),o=await Ia(t),i=ba$1(n?.style),s=await Vl(r,n,o,i);if(e.json){console.log(JSON.stringify(s,null,2));return}Dl(s);}catch(t){oa$1(t);}});function Ol(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 Vl(e,t,r,n){let o=t?await cr(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:Ol(t.registries)}:null,preset:o,components:r,links:{docs:`${a}/docs`,components:`${a}/docs/components/${n}/[component].md`,ui:`${Ni}/${n}/ui/[component].tsx`,examples:`${Ni}/${n}/examples/[component]-example.tsx`,schema:`${a}/schema.json`}}}function Dl(e$1){e.log(d.info("Project")),e$1.project?ve({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?(ve({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(),fr(e$1.preset),e.break(),e.log(d.info("Aliases")),ve({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")),ve({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:"),ve(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")),ve(e$1.links),e.break();}function fr(e$1,t={}){if(e.log(d.info("Preset")),!e$1?.code)ve({code:"-"});else {let r=e$1.fallbacks??[],n=(o,i)=>{let s=r.includes(o)?"*":"";return `${i??"-"}${s}`};ve({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 ve(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",pr=[{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]
|
|
159
159
|
command = "npx"
|
|
160
160
|
args = ["shadcn@${_e}", "mcp"]
|
|
161
|
-
`},{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}}}}],mr=[`shadcn@${_e}`],Xr=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 Q(e$1.cwd);let t=new StdioServerTransport;await a$2.connect(t);}catch(t){e.break(),oa$1(t);}}),Bl=Zr.object({client:Zr.enum(["claude","cursor","vscode","codex","opencode"]),cwd:Zr.string()});Xr.command("init").description("Initialize MCP configuration for your client").option("--client <client>",`MCP client (${pr.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 Ce({type:"select",name:"client",message:"Which MCP client are you using?",choices:pr.map(m=>({title:m.label,value:m.name}))});f.client||(e.break(),process.exit(1)),o=f.client;}let i=Bl.parse({client:o,cwd:n}),s=await Y(i.cwd);if(i.client==="codex"){if(s)await _([],mr,s,{silent:!1});else {let f=await la$1(i.cwd),m=f==="npm"?"install":"add",p=f==="npm"?"--save-dev":"-D",
|
|
161
|
+
`},{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}}}}],mr=[`shadcn@${_e}`],Xr=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 Q(e$1.cwd);let t=new StdioServerTransport;await a$2.connect(t);}catch(t){e.break(),oa$1(t);}}),Bl=Zr.object({client:Zr.enum(["claude","cursor","vscode","codex","opencode"]),cwd:Zr.string()});Xr.command("init").description("Initialize MCP configuration for your client").option("--client <client>",`MCP client (${pr.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 Ce({type:"select",name:"client",message:"Which MCP client are you using?",choices:pr.map(m=>({title:m.label,value:m.name}))});f.client||(e.break(),process.exit(1)),o=f.client;}let i=Bl.parse({client:o,cwd:n}),s=await Y(i.cwd);if(i.client==="codex"){if(s)await _([],mr,s,{silent:!1});else {let f=await la$1(i.cwd),m=f==="npm"?"install":"add",p=f==="npm"?"--save-dev":"-D",h=E("Installing dependencies...").start();await execa(f,[m,p,...mr],{cwd:i.cwd}),h.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]
|
|
162
162
|
command = "npx"
|
|
163
|
-
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 Hl(i);if(l.succeed("Configuring MCP server."),s)await _([],mr,s,{silent:!1});else {let f=await la$1(i.cwd),m=f==="npm"?"install":"add",p=f==="npm"?"--save-dev":"-D",
|
|
164
|
-
`,"utf-8"),n.configPath}var xe={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 Ui(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([en("**/*.{js,ts,jsx,tsx}",{cwd:t}),va$1()]);if(Object.keys(n).length===0)throw new Error("Something went wrong fetching the registry icons.");let o=Object.entries(xe).map(([m,p])=>({title:p.name,value:m})),i=await Ce([{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 xe&&i.targetLibrary in xe))throw new Error("Invalid icon library. Please choose a valid icon library.");let s=xe[i.sourceLibrary],l=xe[i.targetLibrary],{confirm:a}=await Ce({type:"confirm",name:"confirm",initial:true,message:`We will migrate ${d.info(r.length)} files in ${d.info(`./${A__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=A__default.join(t,m),
|
|
165
|
-
`),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 rf(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[
|
|
166
|
-
|
|
167
|
-
`),f.some(
|
|
168
|
-
`).map(
|
|
169
|
-
`));let
|
|
170
|
-
`),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=A__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
|
|
171
|
-
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 Hi=[{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)."}],lf=z.object({cwd:z.string(),list:z.boolean(),yes:z.boolean(),migration:z.string().refine(e=>e&&Hi.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()}),Ji=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=lf.parse({cwd:A__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 Hi)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 zi(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 Ui(i),n.migration==="radix"&&await Mi(i,{yes:n.yes,path:n.path}),n.migration==="rtl"&&await Wi(i,{yes:n.yes,path:n.path});}catch(n){e.break(),oa$1(n);}});function pf(e){return `${a}/create?preset=${e}`}function nn(e){let t=q$1(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:pf(e)}}function uf(e){fr({code:e.code,fallbacks:e.derived,values:e.values},{fallbackNote:" * Compatibility value for older preset versions."});}var df=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=nn(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}uf(r);}catch(r){hr(r);}}),gf=new Command().name("url").description("get the create URL for a preset code").argument("<code>","the preset code").action(e$1=>{try{e.log(nn(e$1).url);}catch(t){hr(t);}}),hf=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=nn(e$1).url;}catch(r){hr(r);return}e.break(),e.log(` Opening ${t} in your browser.`),e.break();try{await bs(t);}catch(r){let n=r instanceof Error?r.message:String(r);hr(new Error(`Failed to open preset URL: ${n}`));}}),yf=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=A__default.resolve(e$1.cwd);if(!existsSync(A__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 Y(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 Fa$1(t),o=await cr(r,n);if(e$1.json){console.log(JSON.stringify(o.code?o:null,null,2));return}fr(o);}catch(t){oa$1(t);}}),on=new Command().name("preset").description("manage presets").addCommand(df).addCommand(yf).addCommand(gf).addCommand(hf).action(()=>{on.outputHelp();});function hr(e$1){e$1 instanceof Error&&e.error(e$1.message),process.exit(1);}var kf=z.object({cwd:z.string(),silent:z.boolean()}),Yi=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=kf.parse({cwd:A__default.resolve(t.cwd),silent:t.silent}),n=e$1.length>0?e$1:await Rf({silent:r.silent});await vf(n,r.cwd,{silent:r.silent});}catch(r){e.break(),oa$1(r);}});function Cf(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 cn(e,t,r){return `${e} ${e===1?t:r}`}async function vf(e$1,t,r){let n=A__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(Cf),i=o.filter(g=>!g.url),s=[];if(i.length>0){let g=E("Fetching registries.",{silent:r.silent}).start(),y=await Ba$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 k=s.find(C=>C.name===g);if(!k)throw new Error(`Registry ${d.info(g)} not found. Provide a URL: ${d.info(`${g}=https://.../{name}.json`)}`);l[g]=k.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 ${cn(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 ${cn(g.length,"registry","registries")}:`,{silent:r.silent})?.succeed();for(let y of g)e.log(` - ${y}`);if(p.length>0){E(`Skipped ${cn(p.length,"registry","registries")}: (already configured)`,{silent:r.silent})?.info();for(let y of p)e.log(` - ${y}`);}}}async function Rf(e$1){let t=E("Fetching registries.",{silent:e$1.silent}).start(),r=await Ba$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 Ce({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 qi=32,xf=f$2.options.filter(e=>e!=="registry:example"&&e!=="registry:internal"),Sf=z.record(z.string(),z.unknown()),Pf=z.array(z.string()),$f=z.array(z.unknown());async function Xi(e){let t=A.resolve(e.cwd),r=A.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(A.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."}),!pn(r,t))return N(n,{registryFile:r,message:`Root registry file must stay inside ${it(t,t)}.`,suggestion:"Run the command from the registry root or pass a registry.json file inside --cwd."}),fn(n);let o=await es(r,n);if(!o)return fn(n);n.usesInclude=!!o.include?.length,If(o,r,n);let i=await Qi(r,o,n,[]);return Ff(i,n),await Ef(i,n),fn(n)}async function Qi(e,t,r,n){if(n.length>=qi)return N(r,{registryFile:e,message:`Registry include tree is too deep. The maximum include depth is ${qi}.`,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: ${Lf([...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 ${it(i,r.cwd)}, then included from ${it(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=A.dirname(e),l=[...n,e],a=[];for(let m of t.include??[]){let p=jf(m,e,s,r);if(!p)continue;let u=await es(p,r);if(!u)continue;let h=await Qi(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 es(e,t){t.checkedRegistryFiles.add(e);let r;try{r=await bt.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 Nf(n,e,t)}function If(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 jf(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(A.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(ts(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(A.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=A.resolve(r,e);return pn(o,n.cwd)?o:(N(n,{registryFile:t,includePath:e,message:`Include "${e}" must stay inside ${it(n.cwd,n.cwd)}.`,suggestion:"Keep included registry.json files inside the registry root."}),null)}function Ff(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 ${_f(i,t.cwd)}.`,suggestion:"Rename one of these items so each name is unique across the resolved registry."});}}async function Ef(e,t){let r=Df(t);for(let n$1 of e){let o=t.itemSourcesByItem.get(n$1),i={...Af(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=Tf(n$1,a.path,o,t);if(f)try{await bt.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||$t(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 Tf(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(A.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(ts(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=A.resolve(r.registryDir,t);return pn(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 Af(e,t,r){let n=t.itemSourcesByItem.get(e);return {...e,files:e.files?.map(o=>{let i=A.resolve(n?.registryDir??t.cwd,o.path);return {...o,path:A.relative(r,i).split(A.sep).join("/")}})}}function Nf(e,t,r){let n=Sf.safeParse(e);if(!n.success)return $t(n.error,t,r,{suggestion:"Update the registry.json file so it matches the schema."}),null;let o=n.data,i={$schema:ln(o,"$schema",t,r),name:ln(o,"name",t,r),homepage:ln(o,"homepage",t,r),hasName:o.name!==void 0,hasHomepage:o.homepage!==void 0,items:[]};if(o.include!==void 0){let s=Pf.safeParse(o.include);s.success?i.include=s.data:$t(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=$f.safeParse(o.items);s.success?(r.itemsChecked+=s.data.length,i.items=Of(s.data,t,r)):$t(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 Of(e,t,r){let n$1=[];return e.forEach((o,i)=>{let s=n.safeParse(o);if(!s.success){$t(s.error,t,r,{itemName:Vf(o),itemIndex:i,suggestion:"Update the registry item so it matches the registry item schema."});return}n$1.push(s.data);}),n$1}function ln(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 Vf(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e.name;return typeof t=="string"?t:void 0}function $t(e,t,r,n){for(let o of e.errors)N(r,{registryFile:t,itemName:n.itemName,itemIndex:n.itemIndex,message:Uf(o,n.pathPrefix),suggestion:n.suggestion});}function N(e,t){e.diagnostics.push(t);}function fn(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?A.dirname(e.rootFile):e.cwd}function ts(e){return e.split(/[\\/]+/).includes("..")}function pn(e,t){let r=A.relative(t,e);return !!r&&!r.startsWith("..")&&!A.isAbsolute(r)}function Lf(e){return e.map(t=>it(t,A.dirname(e[0]))).join(" -> ")}function _f(e,t){return e?`${it(e.registryFile,t)} items[${e.itemIndex}]`:"unknown source"}function Zi(e){return e.length?e.join("."):"(root)"}function Uf(e,t=[]){let r=[...t,...e.path];return e.code===z.ZodIssueCode.invalid_union_discriminator&&e.path.at(-1)==="type"?`${Zi(r)}: Invalid registry item type. Expected ${xf.map(n=>`"${n}"`).join(" | ")}.`:`${Zi(r)}: ${e.message}`}function it(e,t){let r=A.relative(t,e);return r&&!r.startsWith("..")&&!A.isAbsolute(r)?r.split(A.sep).join("/"):r?e:"."}var Wf=z.object({cwd:z.string(),registryFile:z.string()}),is=new Command().name("validate").description("validate a shadcn registry").argument("[registry]","registry address to validate. Supports registry.json paths and GitHub sources.","./registry.json").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e$1,t)=>{let r;try{let n=Wf.parse({cwd:A.resolve(t.cwd),registryFile:e$1}),o=await Gf(e$1,n.cwd);r=E("Validating registry.").start();let i=o?await ha$1(o):await Xi(n);Bf(i,r),i.valid||(process.exitCode=1);}catch(n){r?.fail("Registry validation failed."),e.break(),oa$1(n);}});function Bf(e$1,t){if(e$1.valid){t.succeed("Registry is valid."),rs(e$1,{success:true});return}t.fail("Registry validation failed."),rs(e$1),e.break();for(let[r,n]of Array.from(zf(e$1))){e.log(d.info(ss(r,e$1.cwd)));for(let o of n)e.error(` - ${Hf(o)}`),o.suggestion&&e.log(` ${o.suggestion}`);e.break();}}function rs(e$1,t={}){let r=`Checked ${ns(e$1.registryFiles,"registry file","registry files")} and ${ns(e$1.items,"item","items")}.`;t.success?Jf(r):e.log(` ${r}`);for(let n of e$1.registryFilePaths)e.log(` - ${ss(n,e$1.cwd)}`);}function zf(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 Hf(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 ss(e,t){let r=A.relative(t,e);return r&&!r.startsWith("..")&&!A.isAbsolute(r)?r.split(A.sep).join("/"):r?e:"."}function Jf(e){E(e).succeed();}function ns(e,t,r){return `${e} ${e===1?t:r}`}async function Gf(e,t){return Kf(e)||await Yf(A.resolve(t,e))?null:S(e)}function Kf(e){return e.startsWith(".")||A.isAbsolute(e)||e.endsWith(".json")}async function Yf(e){try{return await bt.access(e),!0}catch{return false}}var as=new Command().name("registry").description("manage registries").addCommand(Yi).addCommand(is);var Xf=z.object({cwd:z.string(),query:z.string().optional(),types:z.array(z.string()).optional(),limit:z.number().optional(),offset:z.number().optional()}),fs=new Command().name("search").alias("list").description("search items from registries").argument("[registries...]","the registry addresses to search. Supports namespaces, GitHub sources and URLs. When omitted, searches all registries configured in components.json.").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-q, --query <query>","query string").option("-t, --type <type>","filter by item type, e.g. ui, block, hook. Comma-separated for multiple.").option("-l, --limit <number>","maximum number of items to display","100").option("-o, --offset <number>","number of items to skip","0").option("--json","output as JSON.",false).action(async(e$1,t)=>{try{let r=Xf.parse({cwd:A__default.resolve(t.cwd),query:t.query,types:t.type?t.type.split(",").map(g=>g.trim()).filter(Boolean):void 0,limit:t.limit?parseInt(t.limit,10):void 0,offset:t.offset?parseInt(t.offset,10):void 0});if(r.types?.length){let g=Ra$1(r.types);g.length>0&&(e.break(),e.error(`Unknown ${g.length===1?"type":"types"}: ${g.map(y=>d.info(y)).join(", ")}.`),e.error(`Valid types: ${Qa$1.join(", ")}.`),e.break(),process.exit(1));}await Q(r.cwd);let n=ca$1({style:"new-york",resolvedPaths:{cwd:r.cwd}}),o=da$1(n),i=A__default.resolve(r.cwd,"components.json"),s=L.existsSync(i);if(s){let g=await L.readJson(i),y=c.partial().parse(g);o=da$1({...n,...y});}let l=o;try{let g=await Y(r.cwd);g&&(l=da$1(g));}catch{}let a=e$1.length===0;a&&!s&&(e.break(),e.error(`Provide a registry or namespace to search, e.g. ${d.info("shadcn search @shadcn")}.`),e.break(),e.error(`If you have a ${d.info("components.json")} with registries configured, run ${d.info("shadcn search")} with no arguments to search all of them.`),e.break(),process.exit(1));let{config:f,newRegistries:m}=await H(e$1.filter(g=>g.startsWith("@")).map(g=>`${g}/registry`),l,{silent:!0,writeFile:!1});m.length>0&&(l.registries=f.registries);let p=Oa(e$1,l);a&&p.length===0&&(e.break(),e.error(`No registries are configured in ${d.info("components.json")}.`),e.error(`Provide a registry or namespace to search, e.g. ${d.info("shadcn search @shadcn")}.`),e.break(),process.exit(1)),a||fa$1(p,l);let u=await Pa(p,{query:r.query,types:r.types,limit:r.limit,offset:r.offset,config:l,continueOnError:a}),h=a&&u.errors?.length===p.length;t.json?console.log(JSON.stringify(u,null,2)):Sa(u,{query:r.query,types:r.types,registries:p}),process.exit(h?1:0);}catch(r){oa$1(r);}finally{ea();}});var em=z.object({cwd:z.string()}),ds=new Command().name("view").description("view items from the registry").argument("<items...>","item addresses to view").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{try{let r=em.parse({cwd:A__default.resolve(t.cwd)});await Q(r.cwd);let n=da$1({}),o=A__default.resolve(r.cwd,"components.json");if(L.existsSync(o)){let f=await L.readJson(o),m=c.partial().parse(f);n=da$1(m);}let i=n;try{let f=await Y(r.cwd);f&&(i=da$1(f));}catch{}let{config:s,newRegistries:l}=await H(e,i,{silent:!0,writeFile:!1});l.length>0&&(i.registries=s.registries),fa$1(e,i);let a=await qa$1(e,{config:i});console.log(JSON.stringify(a,null,2)),process.exit(0);}catch(r){oa$1(r);}finally{ea();}});process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function rm(){let e=new Command().name("shadcn").description("build your component library").version(na$1.version||"1.0.0","-v, --version","display the version number");e.addCommand(Bo).addCommand(ci).addCommand(ni).addCommand(di).addCommand(hi).addCommand(ds).addCommand(fs).addCommand(Ji).addCommand(wi).addCommand(Oi).addCommand(pi).addCommand(Xr).addCommand(on).addCommand(as),e.parse();}rm();
|
|
163
|
+
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 Hl(i);if(l.succeed("Configuring MCP server."),s)await _([],mr,s,{silent:!1});else {let f=await la$1(i.cwd),m=f==="npm"?"install":"add",p=f==="npm"?"--save-dev":"-D",h=E("Installing dependencies...").start();await execa(f,[m,p,...mr],{cwd:i.cwd}),h.succeed("Installing dependencies.");}e.break(),e.success(`Configuration saved to ${a}.`),e.break();}catch(r){oa$1(r);}});var zl=(e,t)=>t;async function Hl(e){let{client:t,cwd:r}=e,n=pr.find(a=>a.name===t);if(!n)throw new Error(`Unknown client: ${t}. Available clients: ${pr.map(a=>a.name).join(", ")}`);let o=A__default.join(r,n.configPath),i=A__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=Po(s,n.config,{arrayMerge:zl});return await promises.writeFile(o,JSON.stringify(l,null,2)+`
|
|
164
|
+
`,"utf-8"),n.configPath}var xe={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 Ui(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([en("**/*.{js,ts,jsx,tsx}",{cwd:t}),va$1()]);if(Object.keys(n).length===0)throw new Error("Something went wrong fetching the registry icons.");let o=Object.entries(xe).map(([m,p])=>({title:p.name,value:m})),i=await Ce([{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 xe&&i.targetLibrary in xe))throw new Error("Invalid icon library. Please choose a valid icon library.");let s=xe[i.sourceLibrary],l=xe[i.targetLibrary],{confirm:a}=await Ce({type:"confirm",name:"confirm",initial:true,message:`We will migrate ${d.info(r.length)} files in ${d.info(`./${A__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=A__default.join(t,m),h=await promises.readFile(p,"utf-8"),g=await Xl(h,i.sourceLibrary,i.targetLibrary,n);await promises.writeFile(p,g);})),f.succeed("Migration complete.");}async function Xl(e,t,r,n){let o=xe[t]?.import,i=xe[r]?.import,s=await promises.mkdtemp(A__default.join(tmpdir(),"shadcn-")),l=new Project({compilerOptions:{}}),a=A__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 h of p.getNamedImports()??[]){let g=h.getName(),d=Object.values(n).find(y=>y[t]===g)?.[r];!d||m.includes(d)||(m.push(d),h.remove(),f.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement).filter(y=>y.getTagNameNode()?.getText()===g).forEach(y=>y.getTagNameNode()?.replaceWithText(d)));}p.getNamedImports()?.length===0&&p.remove();}return m.length>0&&f.addImportDeclaration({moduleSpecifier:i,namedImports:m.map(p=>({name:p}))}),await f.getText()}function ef(e){return e.split("-").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}function tf(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 Mi(e$1,t={}){let r,n;if(t.path){if(n=e$1.resolvedPaths.cwd,t.path.includes("*"))r=await en(t.path,{cwd:n,onlyFiles:true,ignore:["**/node_modules/**"]});else {let a=A__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 en("**/*.{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 en("**/*.{js,ts,jsx,tsx}",{cwd:n,onlyFiles:true});}if(!t.yes){let l=t.path?t.path:`./${A__default.relative(e$1.resolvedPaths.cwd,n)}`,{confirm:a}=await Ce({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=A__default.join(n,l),f=await promises.readFile(a,"utf-8"),{content:m,replacedPackages:p}=await rf(f);p.forEach(h=>i.add(h)),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=A__default.join(e$1.resolvedPaths.cwd,"package.json");await promises.writeFile(m,JSON.stringify(l,null,2)+`
|
|
165
|
+
`),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 rf(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[d,y,b,C,P,x,R]=a;if(x==="icons"||x.startsWith("icons/"))continue;n.push(d),n.length===1&&(i=P,s=R===";"),o.push(`@radix-ui/react-${x}`);let I=!!y;if(b){let U=ef(x);r.push({name:U,alias:b,isType:I});}else C&&tf(C,I,r,x);}if(r.length===0)return {content:e,replacedPackages:[]};let f=r.filter((d,y,b)=>y===b.findIndex(C=>C.name===d.name&&C.alias===d.alias&&C.isType===d.isType)),p=`import { ${f.map(d=>{let y=d.isType?"type ":"";return d.alias?`${y}${d.name} as ${d.alias}`:`${y}${d.name}`}).join(", ")} } from ${i}radix-ui${i}${s?";":""}`;l=n.reduce((d,y,b)=>d.replace(y,b===0?p:""),l),l=l.replace(/\n\s*\n\s*\n/g,`
|
|
166
|
+
|
|
167
|
+
`),f.some(d=>d.name==="Slot"&&d.alias==="SlotPrimitive")&&(l=l.split(`
|
|
168
|
+
`).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,(P,x,R)=>{let I=R.substring(0,x),U=(I.match(/"/g)||[]).length,K=(I.match(/'/g)||[]).length;return U%2!==0||K%2!==0?P:"__SLOT_PLACEHOLDER__"}),C=C.replace(/__SLOT_PLACEHOLDER__/g,"SlotPrimitive.Slot"),C}).join(`
|
|
169
|
+
`));let g=Array.from(new Set(o));return {content:l,replacedPackages:g}}var of=["sidebar.tsx","pagination.tsx","calendar.tsx"],sf=`${a}/docs/rtl#manual-migration-optional`;async function Wi(e$2,t={}){let r,n;if(t.path){if(n=e$2.resolvedPaths.cwd,t.path.includes("*"))r=await en(t.path,{cwd:n,onlyFiles:true,ignore:["**/node_modules/**"]});else {let f=A__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 en("**/*.{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 en("**/*.{js,ts,jsx,tsx}",{cwd:n,onlyFiles:true});}if(!t.yes){let a=t.path?t.path:`./${A__default.relative(e$2.resolvedPaths.cwd,n)}`,{confirm:f}=await Ce({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=A__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)+`
|
|
170
|
+
`),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=A__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 h=A__default.basename(a);of.includes(h)&&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(sf)} for more information.`);}}async function zi(e$1){let t={};if(!L.existsSync(e$1.cwd)||!L.existsSync(A__default.resolve(e$1.cwd,"package.json")))return t["1"]=true,{errors:t,config:null};if(!L.existsSync(A__default.resolve(e$1.cwd,"components.json")))return t["3"]=true,{errors:t,config:null};try{let r=await Y(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)}.
|
|
171
|
+
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 Hi=[{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)."}],lf=z.object({cwd:z.string(),list:z.boolean(),yes:z.boolean(),migration:z.string().refine(e=>e&&Hi.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()}),Ji=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=lf.parse({cwd:A__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 Hi)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 zi(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 Ui(i),n.migration==="radix"&&await Mi(i,{yes:n.yes,path:n.path}),n.migration==="rtl"&&await Wi(i,{yes:n.yes,path:n.path});}catch(n){e.break(),oa$1(n);}});function pf(e){return `${a}/create?preset=${e}`}function nn(e){let t=q$1(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:pf(e)}}function uf(e){fr({code:e.code,fallbacks:e.derived,values:e.values},{fallbackNote:" * Compatibility value for older preset versions."});}var df=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=nn(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}uf(r);}catch(r){hr(r);}}),gf=new Command().name("url").description("get the create URL for a preset code").argument("<code>","the preset code").action(e$1=>{try{e.log(nn(e$1).url);}catch(t){hr(t);}}),hf=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=nn(e$1).url;}catch(r){hr(r);return}e.break(),e.log(` Opening ${t} in your browser.`),e.break();try{await bs(t);}catch(r){let n=r instanceof Error?r.message:String(r);hr(new Error(`Failed to open preset URL: ${n}`));}}),yf=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=A__default.resolve(e$1.cwd);if(!existsSync(A__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 Y(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 Fa$1(t),o=await cr(r,n);if(e$1.json){console.log(JSON.stringify(o.code?o:null,null,2));return}fr(o);}catch(t){oa$1(t);}}),on=new Command().name("preset").description("manage presets").addCommand(df).addCommand(yf).addCommand(gf).addCommand(hf).action(()=>{on.outputHelp();});function hr(e$1){e$1 instanceof Error&&e.error(e$1.message),process.exit(1);}var kf=z.object({cwd:z.string(),silent:z.boolean()}),Yi=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=kf.parse({cwd:A__default.resolve(t.cwd),silent:t.silent}),n=e$1.length>0?e$1:await vf({silent:r.silent});await Rf(n,r.cwd,{silent:r.silent});}catch(r){e.break(),oa$1(r);}});function Cf(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 cn(e,t,r){return `${e} ${e===1?t:r}`}async function Rf(e$1,t,r){let n=A__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(Cf),i=o.filter(d=>!d.url),s=[];if(i.length>0){let d=E("Fetching registries.",{silent:r.silent}).start(),y=await Ba$1();if(!y)throw d.fail(),new Error("Failed to fetch registries.");d.succeed(),s=y;}let l={};for(let{namespace:d$1,url:y}of o){if(d$1 in b){e.warn(`${d.info(d$1)} 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(d$1)}. URL must include {name} placeholder. Example: ${d.info(`${d$1}=https://example.com/r/{name}.json`)}`);l[d$1]=y;}else {let b=s.find(C=>C.name===d$1);if(!b)throw new Error(`Registry ${d.info(d$1)} not found. Provide a URL: ${d.info(`${d$1}=https://.../{name}.json`)}`);l[d$1]=b.url;}}if(Object.keys(l).length===0)return {addedRegistries:[]};let a=await L.readJson(n),f=a.registries||{},m={},p=[];for(let[d,y]of Object.entries(l))f[d]?p.push(d):m[d]=y;if(Object.keys(m).length===0){if(p.length>0&&!r.silent){E(`Skipped ${cn(p.length,"registry","registries")}: (already configured)`,{silent:r.silent})?.info();for(let d of p)e.log(` - ${d}`);}else r.silent||e.info("No new registries to add.");return}let h={...a,registries:{...f,...m}},g=E("Updating components.json.",{silent:r.silent}).start();if(await L.writeJson(n,h,{spaces:2}),g.succeed(),!r.silent){let d=Object.keys(m);E(`Added ${cn(d.length,"registry","registries")}:`,{silent:r.silent})?.succeed();for(let y of d)e.log(` - ${y}`);if(p.length>0){E(`Skipped ${cn(p.length,"registry","registries")}: (already configured)`,{silent:r.silent})?.info();for(let y of p)e.log(` - ${y}`);}}}async function vf(e$1){let t=E("Fetching registries.",{silent:e$1.silent}).start(),r=await Ba$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 Ce({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 qi=32,xf=f$2.options.filter(e=>e!=="registry:example"&&e!=="registry:internal"),Sf=z.record(z.string(),z.unknown()),Pf=z.array(z.string()),$f=z.array(z.unknown());async function Xi(e){let t=A.resolve(e.cwd),r=A.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(A.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."}),!pn(r,t))return N(n,{registryFile:r,message:`Root registry file must stay inside ${it(t,t)}.`,suggestion:"Run the command from the registry root or pass a registry.json file inside --cwd."}),fn(n);let o=await es(r,n);if(!o)return fn(n);n.usesInclude=!!o.include?.length,If(o,r,n);let i=await Qi(r,o,n,[]);return Ff(i,n),await Ef(i,n),fn(n)}async function Qi(e,t,r,n){if(n.length>=qi)return N(r,{registryFile:e,message:`Registry include tree is too deep. The maximum include depth is ${qi}.`,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: ${Lf([...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 ${it(i,r.cwd)}, then included from ${it(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=A.dirname(e),l=[...n,e],a=[];for(let m of t.include??[]){let p=jf(m,e,s,r);if(!p)continue;let h=await es(p,r);if(!h)continue;let g=await Qi(p,h,r,l);a.push(...g);}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 es(e,t){t.checkedRegistryFiles.add(e);let r;try{r=await bt.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 Nf(n,e,t)}function If(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 jf(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(A.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(ts(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(A.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=A.resolve(r,e);return pn(o,n.cwd)?o:(N(n,{registryFile:t,includePath:e,message:`Include "${e}" must stay inside ${it(n.cwd,n.cwd)}.`,suggestion:"Keep included registry.json files inside the registry root."}),null)}function Ff(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 ${_f(i,t.cwd)}.`,suggestion:"Rename one of these items so each name is unique across the resolved registry."});}}async function Ef(e,t){let r=Df(t);for(let n$1 of e){let o=t.itemSourcesByItem.get(n$1),i={...Af(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=Tf(n$1,a.path,o,t);if(f)try{await bt.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||$t(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 Tf(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(A.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(ts(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=A.resolve(r.registryDir,t);return pn(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 Af(e,t,r){let n=t.itemSourcesByItem.get(e);return {...e,files:e.files?.map(o=>{let i=A.resolve(n?.registryDir??t.cwd,o.path);return {...o,path:A.relative(r,i).split(A.sep).join("/")}})}}function Nf(e,t,r){let n=Sf.safeParse(e);if(!n.success)return $t(n.error,t,r,{suggestion:"Update the registry.json file so it matches the schema."}),null;let o=n.data,i={$schema:ln(o,"$schema",t,r),name:ln(o,"name",t,r),homepage:ln(o,"homepage",t,r),hasName:o.name!==void 0,hasHomepage:o.homepage!==void 0,items:[]};if(o.include!==void 0){let s=Pf.safeParse(o.include);s.success?i.include=s.data:$t(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=$f.safeParse(o.items);s.success?(r.itemsChecked+=s.data.length,i.items=Of(s.data,t,r)):$t(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 Of(e,t,r){let n$1=[];return e.forEach((o,i)=>{let s=n.safeParse(o);if(!s.success){$t(s.error,t,r,{itemName:Vf(o),itemIndex:i,suggestion:"Update the registry item so it matches the registry item schema."});return}n$1.push(s.data);}),n$1}function ln(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 Vf(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e.name;return typeof t=="string"?t:void 0}function $t(e,t,r,n){for(let o of e.errors)N(r,{registryFile:t,itemName:n.itemName,itemIndex:n.itemIndex,message:Uf(o,n.pathPrefix),suggestion:n.suggestion});}function N(e,t){e.diagnostics.push(t);}function fn(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?A.dirname(e.rootFile):e.cwd}function ts(e){return e.split(/[\\/]+/).includes("..")}function pn(e,t){let r=A.relative(t,e);return !!r&&!r.startsWith("..")&&!A.isAbsolute(r)}function Lf(e){return e.map(t=>it(t,A.dirname(e[0]))).join(" -> ")}function _f(e,t){return e?`${it(e.registryFile,t)} items[${e.itemIndex}]`:"unknown source"}function Zi(e){return e.length?e.join("."):"(root)"}function Uf(e,t=[]){let r=[...t,...e.path];return e.code===z.ZodIssueCode.invalid_union_discriminator&&e.path.at(-1)==="type"?`${Zi(r)}: Invalid registry item type. Expected ${xf.map(n=>`"${n}"`).join(" | ")}.`:`${Zi(r)}: ${e.message}`}function it(e,t){let r=A.relative(t,e);return r&&!r.startsWith("..")&&!A.isAbsolute(r)?r.split(A.sep).join("/"):r?e:"."}var Wf=z.object({cwd:z.string(),registryFile:z.string()}),is=new Command().name("validate").description("validate a shadcn registry").argument("[registry]","registry address to validate. Supports registry.json paths and GitHub sources.","./registry.json").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e$1,t)=>{let r;try{let n=Wf.parse({cwd:A.resolve(t.cwd),registryFile:e$1}),o=await Gf(e$1,n.cwd);r=E("Validating registry.").start();let i=o?await ha$1(o):await Xi(n);Bf(i,r),i.valid||(process.exitCode=1);}catch(n){r?.fail("Registry validation failed."),e.break(),oa$1(n);}});function Bf(e$1,t){if(e$1.valid){t.succeed("Registry is valid."),rs(e$1,{success:true});return}t.fail("Registry validation failed."),rs(e$1),e.break();for(let[r,n]of Array.from(zf(e$1))){e.log(d.info(ss(r,e$1.cwd)));for(let o of n)e.error(` - ${Hf(o)}`),o.suggestion&&e.log(` ${o.suggestion}`);e.break();}}function rs(e$1,t={}){let r=`Checked ${ns(e$1.registryFiles,"registry file","registry files")} and ${ns(e$1.items,"item","items")}.`;t.success?Jf(r):e.log(` ${r}`);for(let n of e$1.registryFilePaths)e.log(` - ${ss(n,e$1.cwd)}`);}function zf(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 Hf(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 ss(e,t){let r=A.relative(t,e);return r&&!r.startsWith("..")&&!A.isAbsolute(r)?r.split(A.sep).join("/"):r?e:"."}function Jf(e){E(e).succeed();}function ns(e,t,r){return `${e} ${e===1?t:r}`}async function Gf(e,t){return Kf(e)||await Yf(A.resolve(t,e))?null:S(e)}function Kf(e){return e.startsWith(".")||A.isAbsolute(e)||e.endsWith(".json")}async function Yf(e){try{return await bt.access(e),!0}catch{return false}}var as=new Command().name("registry").description("manage registries").addCommand(Yi).addCommand(is);var Xf=z.object({cwd:z.string(),query:z.string().optional(),types:z.array(z.string()).optional(),limit:z.number().optional(),offset:z.number().optional()}),fs=new Command().name("search").alias("list").description("search items from registries").argument("[registries...]","the registry addresses to search. Supports namespaces, GitHub sources and URLs. When omitted, searches all registries configured in components.json.").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-q, --query <query>","query string").option("-t, --type <type>","filter by item type, e.g. ui, block, hook. Comma-separated for multiple.").option("-l, --limit <number>","maximum number of items to display","100").option("-o, --offset <number>","number of items to skip","0").option("--json","output as JSON.",false).action(async(e$1,t)=>{try{let r=Xf.parse({cwd:A__default.resolve(t.cwd),query:t.query,types:t.type?t.type.split(",").map(d=>d.trim()).filter(Boolean):void 0,limit:t.limit?parseInt(t.limit,10):void 0,offset:t.offset?parseInt(t.offset,10):void 0});if(r.types?.length){let d$1=Ra$1(r.types);d$1.length>0&&(e.break(),e.error(`Unknown ${d$1.length===1?"type":"types"}: ${d$1.map(y=>d.info(y)).join(", ")}.`),e.error(`Valid types: ${Qa$1.join(", ")}.`),e.break(),process.exit(1));}await Q(r.cwd);let n=ca$1({style:"new-york",resolvedPaths:{cwd:r.cwd}}),o=da$1(n),i=A__default.resolve(r.cwd,"components.json"),s=L.existsSync(i);if(s){let d=await L.readJson(i),y=c.partial().parse(d);o=da$1({...n,...y});}let l=o;try{let d=await Y(r.cwd);d&&(l=da$1(d));}catch{}let a=e$1.length===0;a&&!s&&(e.break(),e.error(`Provide a registry or namespace to search, e.g. ${d.info("shadcn search @shadcn")}.`),e.break(),e.error(`If you have a ${d.info("components.json")} with registries configured, run ${d.info("shadcn search")} with no arguments to search all of them.`),e.break(),process.exit(1));let{config:f,newRegistries:m}=await H(e$1.filter(d=>d.startsWith("@")).map(d=>`${d}/registry`),l,{silent:!0,writeFile:!1});m.length>0&&(l.registries=f.registries);let p=Oa(e$1,l);a&&p.length===0&&(e.break(),e.error(`No registries are configured in ${d.info("components.json")}.`),e.error(`Provide a registry or namespace to search, e.g. ${d.info("shadcn search @shadcn")}.`),e.break(),process.exit(1)),a||fa$1(p,l);let h=await Pa(p,{query:r.query,types:r.types,limit:r.limit,offset:r.offset,config:l,continueOnError:a}),g=a&&h.errors?.length===p.length;t.json?console.log(JSON.stringify(h,null,2)):Sa(h,{query:r.query,types:r.types,registries:p}),process.exit(g?1:0);}catch(r){oa$1(r);}finally{ea();}});var em=z.object({cwd:z.string()}),ds=new Command().name("view").description("view items from the registry").argument("<items...>","item addresses to view").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{try{let r=em.parse({cwd:A__default.resolve(t.cwd)});await Q(r.cwd);let n=da$1({}),o=A__default.resolve(r.cwd,"components.json");if(L.existsSync(o)){let f=await L.readJson(o),m=c.partial().parse(f);n=da$1(m);}let i=n;try{let f=await Y(r.cwd);f&&(i=da$1(f));}catch{}let{config:s,newRegistries:l}=await H(e,i,{silent:!0,writeFile:!1});l.length>0&&(i.registries=s.registries),fa$1(e,i);let a=await qa$1(e,{config:i});console.log(JSON.stringify(a,null,2)),process.exit(0);}catch(r){oa$1(r);}finally{ea();}});process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function rm(){let e=new Command().name("shadcn").description("build your component library").version(na$1.version||"1.0.0","-v, --version","display the version number");e.addCommand(Bo).addCommand(ci).addCommand(ni).addCommand(di).addCommand(hi).addCommand(ds).addCommand(fs).addCommand(Ji).addCommand(wi).addCommand(Oi).addCommand(pi).addCommand(Xr).addCommand(on).addCommand(as),e.parse();}rm();
|
package/dist/mcp/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{a as server}from'../chunk-
|
|
1
|
+
export{a as server}from'../chunk-AHVD7OOC.js';import'../chunk-G7PLOKI6.js';import'../chunk-MTWZIHEW.js';import'../chunk-7SBJAAAY.js';import'../chunk-CHWMSXYA.js';
|
package/dist/registry/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{w as RegistriesIndexParseError,k as RegistryError,j as RegistryErrorCode,o as RegistryFetchError,n as RegistryForbiddenError,v as RegistryInvalidNamespaceError,t as RegistryItemNotFoundError,q as RegistryLocalFileError,u as RegistryMissingEnvironmentVariablesError,p as RegistryNotConfiguredError,l as RegistryNotFoundError,r as RegistryParseError,m as RegistryUnauthorizedError,s as RegistryValidationError,Ba as getRegistries,Ca as getRegistriesIndex,pa as getRegistry,qa as getRegistryItems,Ja as loadRegistry,Ka as loadRegistryItem,ra as resolveRegistryItems,Pa as searchRegistries}from'../chunk-
|
|
1
|
+
export{w as RegistriesIndexParseError,k as RegistryError,j as RegistryErrorCode,o as RegistryFetchError,n as RegistryForbiddenError,v as RegistryInvalidNamespaceError,t as RegistryItemNotFoundError,q as RegistryLocalFileError,u as RegistryMissingEnvironmentVariablesError,p as RegistryNotConfiguredError,l as RegistryNotFoundError,r as RegistryParseError,m as RegistryUnauthorizedError,s as RegistryValidationError,Ba as getRegistries,Ca as getRegistriesIndex,pa as getRegistry,qa as getRegistryItems,Ja as loadRegistry,Ka as loadRegistryItem,ra as resolveRegistryItems,Pa as searchRegistries}from'../chunk-G7PLOKI6.js';import'../chunk-MTWZIHEW.js';import'../chunk-7SBJAAAY.js';import'../chunk-CHWMSXYA.js';
|