#!/usr/bin/env node import {b as b$1,a as a$1}from'./chunk-4BRKKAY5.js';import {a,O,R,_ as _$1,s,d,Y,P,p as p$1,i,q,j,t,b,ca,ea,g,h,e,f,r,n,N,c,ba,ha,fa,ia,K,M as M$1,Q as Q$1,ka,ja,S,k,da,J,o,F,W as W$1,z as z$1,X,m,T,l,L,U,G,I,H as H$1,V as V$1}from'./chunk-WFZDKYBJ.js';export{ha as fetchTree,ia as getItemTargetPath,aa as getRegistriesConfig,ja as getRegistriesIndex,Z as getRegistry,fa as getRegistryBaseColor,ea as getRegistryBaseColors,da as getRegistryIcons,_ as getRegistryItems,ca as getRegistryStyles,ba as getShadcnRegistryIndex,$ as resolveRegistryItems,ga as resolveTree}from'./chunk-WFZDKYBJ.js';import {p,h as h$1,g as g$1}from'./chunk-OG5VNDVA.js';import*as M from'path';import M__default,{join}from'path';import {promises,existsSync}from'fs';import Q from'fs-extra';import R$1 from'postcss';import Lr from'postcss/lib/at-rule';import et,{z}from'zod';import {execa}from'execa';import Ke from'prompts';import li,{tmpdir}from'os';import {SyntaxKind,Project,ScriptKind}from'ts-morph';import {Command}from'commander';import vi from'deepmerge';import*as W from'fs/promises';import W__default from'fs/promises';import {diffLines}from'diff';import {StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import {randomBytes}from'crypto';import Hi from'fast-glob';async function _t(t$1){let e={};if(!Q.existsSync(t$1.cwd)||!Q.existsSync(M__default.resolve(t$1.cwd,"package.json")))return e["1"]=true,{errors:e,projectInfo:null};let r=t("Preflight checks.",{silent:t$1.silent}).start();Q.existsSync(M__default.resolve(t$1.cwd,"components.json"))&&!t$1.force&&(r?.fail(),s.break(),s.error(`A ${d.info("components.json")} file already exists at ${d.info(t$1.cwd)}. To start over, remove the ${d.info("components.json")} file and run ${d.info("init")} again.`),s.break(),process.exit(1)),r?.succeed();let i=t("Verifying framework.",{silent:t$1.silent}).start(),o=await p$1(t$1.cwd);(!o||o?.framework.name==="manual")&&(e["7"]=true,i?.fail(),s.break(),o?.framework.links.installation&&s.error(`We could not detect a supported framework at ${d.info(t$1.cwd)}. Visit ${d.info(o?.framework.links.installation)} to manually configure your project. Once configured, you can use the cli to add components.`),s.break(),process.exit(1)),i?.succeed(`Verifying framework. Found ${d.info(o.framework.label)}.`);let n="Validating Tailwind CSS.";o.tailwindVersion==="v4"&&(n=`Validating Tailwind CSS config. Found ${d.info("v4")}.`);let a=t(n,{silent:t$1.silent}).start();o.tailwindVersion==="v3"&&(!o?.tailwindConfigFile||!o?.tailwindCssFile)?(e["5"]=true,a?.fail()):o.tailwindVersion==="v4"&&!o?.tailwindCssFile?(e["5"]=true,a?.fail()):o.tailwindVersion?a?.succeed():(e["5"]=true,a?.fail());let s$1=t("Validating import alias.",{silent:t$1.silent}).start();return o?.aliasPrefix?s$1?.succeed():(e["6"]=true,s$1?.fail()),Object.keys(e).length>0&&(e["5"]&&(s.break(),s.error(`No Tailwind CSS configuration found at ${d.info(t$1.cwd)}.`),s.error("It is likely you do not have Tailwind CSS installed or have an invalid configuration."),s.error("Install Tailwind CSS then try again."),o?.framework.links.tailwind&&s.error(`Visit ${d.info(o?.framework.links.tailwind)} to get started.`)),e["6"]&&(s.break(),s.error("No import alias found in your tsconfig.json file."),o?.framework.links.installation&&s.error(`Visit ${d.info(o?.framework.links.installation)} to learn how to set an import alias.`)),s.break(),process.exit(1)),{errors:e,projectInfo:o}}function Dt(t,e){if(t.includes("\0"))return false;let r;try{r=t;let u="";for(;r!==u&&r.includes("%");)u=r,r=decodeURIComponent(r);}catch{return false}let i=M__default.normalize(r.replace(/\\/g,"/")),o=M__default.normalize(e),n=u=>u.replace(/\[\.\.\..*?\]/g,"").includes("..");if(n(i)||n(r)||n(t))return false;let a=u=>u.replace(/\[\.\.\..*?\]/g,""),s=a(t),c=a(r);if([/\.\.[\/\\]/,/[\/\\]\.\./,/\.\./,/\.\.%/,/\x00/,/[\x01-\x1f]/].some(u=>u.test(s)||u.test(c))||(t.includes("~")||r.includes("~"))&&(t.includes("../")||r.includes("../")))return false;if(/^[a-zA-Z]:[\/\\]/.test(r))return process.platform==="win32"?r.toLowerCase().startsWith(e.toLowerCase()):false;if(M__default.isAbsolute(i))return i.startsWith(o+M__default.sep);let p=M__default.resolve(o,i);return p.startsWith(o+M__default.sep)||p===o}async function Be(t$1,e,r){if(!e.resolvedPaths.tailwindCss||!t$1||Object.keys(t$1).length===0)return;r={silent:false,...r};let i=e.resolvedPaths.tailwindCss,o=M__default.relative(e.resolvedPaths.cwd,i),n=t(`Updating ${d.info(o)}`,{silent:r.silent}).start(),a=await promises.readFile(i,"utf8"),s=await Ar(a,t$1);await promises.writeFile(i,s,"utf8"),n.succeed();}async function Ar(t,e){let r=[_r(e)],i=await R$1(r).process(t,{from:void 0}),o=i.css,n=i.root;if(n.nodes&&n.nodes.length>0){let a=n.nodes[n.nodes.length-1];a.type==="atrule"&&!a.nodes&&!o.trimEnd().endsWith(";")&&(o=o.trimEnd()+";");}return o=o.replace(/\/\* ---break--- \*\//g,""),o=o.replace(/(\n\s*\n)+/g,` `),o=o.trimEnd(),o}function _r(t){return {postcssPlugin:"update-css",Once(e){for(let[r,i]of Object.entries(t))if(r.startsWith("@")){let o=r.match(/@([a-zA-Z-]+)\s*(.*)/);if(!o)continue;let[,n,a]=o;if(n==="import"){if(!e.nodes?.find(c=>c.type==="atrule"&&c.name==="import"&&c.params===a)){let c=R$1.atRule({name:"import",params:a,raws:{semicolon:true}}),l=e.nodes?.filter(m=>m.type==="atrule"&&m.name==="import");if(l&&l.length>0){let m=l[l.length-1];c.raws.before=` `,e.insertAfter(m,c);}else !e.nodes||e.nodes.length,c.raws.before="",e.prepend(c);}}else if(n==="plugin"){let s=a;a&&!a.startsWith('"')&&!a.startsWith("'")&&(s=`"${a}"`);let c=m=>m.startsWith('"')&&m.endsWith('"')||m.startsWith("'")&&m.endsWith("'")?m.slice(1,-1):m;if(!e.nodes?.find(m=>m.type!=="atrule"||m.name!=="plugin"?false:c(m.params)===c(a))){let m=R$1.atRule({name:"plugin",params:s,raws:{semicolon:true,before:` `}}),p=e.nodes?.filter(g=>g.type==="atrule"&&g.name==="import"),u=e.nodes?.filter(g=>g.type==="atrule"&&g.name==="plugin");if(u&&u.length>0){let g=u[u.length-1];e.insertAfter(g,m);}else if(p&&p.length>0){let g=p[p.length-1];e.insertAfter(g,m),e.insertBefore(m,R$1.comment({text:"---break---"})),e.insertAfter(m,R$1.comment({text:"---break---"}));}else e.prepend(m),e.insertBefore(m,R$1.comment({text:"---break---"})),e.insertAfter(m,R$1.comment({text:"---break---"}));}}else if(typeof i=="object"&&Object.keys(i).length===0){if(!e.nodes?.find(c=>c.type==="atrule"&&c.name===n&&c.params===a)){let c=R$1.atRule({name:n,params:a,raws:{semicolon:true}});e.append(c),e.insertBefore(c,R$1.comment({text:"---break---"}));}}else if(n==="keyframes"){let s=e.nodes?.find(l=>l.type==="atrule"&&l.name==="theme"&&l.params==="inline");s||(s=R$1.atRule({name:"theme",params:"inline",raws:{semicolon:true,between:" ",before:` `}}),e.append(s),e.insertBefore(s,R$1.comment({text:"---break---"})));let c=R$1.atRule({name:"keyframes",params:a,raws:{semicolon:true,between:" ",before:` `}});if(s.append(c),typeof i=="object")for(let[l,m]of Object.entries(i))re(c,l,m);}else if(n==="utility"){let s=e.nodes?.find(c=>c.type==="atrule"&&c.name===n&&c.params===a);if(s){if(typeof i=="object")for(let[c,l]of Object.entries(i))if(typeof l=="string"){let m=s.nodes?.find(u=>u.type==="decl"&&u.prop===c),p=R$1.decl({prop:c,value:l,raws:{semicolon:true,before:` `}});m?m.replaceWith(p):s.append(p);}else typeof l=="object"&&re(s,c,l);}else {let c=R$1.atRule({name:n,params:a,raws:{semicolon:true,between:" ",before:` `}});if(e.append(c),e.insertBefore(c,R$1.comment({text:"---break---"})),typeof i=="object")for(let[l,m]of Object.entries(i))if(typeof m=="string"){let p=R$1.decl({prop:l,value:m,raws:{semicolon:true,before:` `}});c.append(p);}else typeof m=="object"&&re(c,l,m);}}else Vt(e,n,a,i);}else re(e,r,i);}}}function Vt(t,e,r,i){let o=t.nodes?.find(n=>n.type==="atrule"&&n.name===e&&n.params===r);if(o||(o=R$1.atRule({name:e,params:r,raws:{semicolon:true,between:" ",before:` `}}),t.append(o),t.insertBefore(o,R$1.comment({text:"---break---"}))),typeof i=="object")for(let[n,a]of Object.entries(i))if(n.startsWith("@")){let s=n.match(/@([a-zA-Z-]+)\s*(.*)/);if(s){let[,c,l]=s;Vt(o,c,l,a);}}else re(o,n,a);else if(typeof i=="string")try{let a=R$1.parse(`.temp{${i}}`).first;if(a&&a.nodes){let s=R$1.rule({selector:"temp",raws:{semicolon:!0,between:" ",before:` `}});a.nodes.forEach(c=>{if(c.type==="decl"){let l=c.clone();l.raws.before=` `,s.append(l);}}),s.nodes?.length&&o.append(s);}}catch(n){throw console.error("Error parsing at-rule content:",i,n),n}}function re(t,e,r){let i=t.nodes?.find(o=>o.type==="rule"&&o.selector===e);if(i||(i=R$1.rule({selector:e,raws:{semicolon:true,between:" ",before:` `}}),t.append(i)),typeof r=="object"){for(let[o,n]of Object.entries(r))if(o.startsWith("@")&&typeof n=="object"&&n!==null&&Object.keys(n).length===0){let a=o.match(/@([a-zA-Z-]+)\s*(.*)/);if(a){let[,s,c]=a,l=R$1.atRule({name:s,params:c,raws:{semicolon:true,before:` `}});i.append(l);}}else if(typeof n=="string"){let a=R$1.decl({prop:o,value:n,raws:{semicolon:true,before:` `}}),s=i.nodes?.find(c=>c.type==="decl"&&c.prop===o);s?s.replaceWith(a):i.append(a);}else if(typeof n=="object"){let a=o.startsWith("&")?e.replace(/^([^:]+)/,`$1${o.substring(1)}`):o;re(t,a,n);}}else if(typeof r=="string")try{let n=R$1.parse(`.temp{${r}}`).first;n&&n.nodes&&n.nodes.forEach(a=>{if(a.type==="decl"){let s=a.clone();s.raws.before=` `,i?.append(s);}});}catch(o){throw console.error("Error parsing rule content:",e,r,o),o}}async function Ue(t$1,e,r){if(!e.resolvedPaths.tailwindCss||!Object.keys(t$1??{}).length)return;r={cleanupDefaultNextStyles:false,silent:false,tailwindVersion:"v3",overwriteCssVars:false,initIndex:true,...r};let i=e.resolvedPaths.tailwindCss,o=M__default.relative(e.resolvedPaths.cwd,i),n=t(`Updating CSS variables in ${d.info(o)}`,{silent:r.silent}).start(),a=await promises.readFile(i,"utf8"),s=await Vr(a,t$1??{},e,{cleanupDefaultNextStyles:r.cleanupDefaultNextStyles,tailwindVersion:r.tailwindVersion,tailwindConfig:r.tailwindConfig,overwriteCssVars:r.overwriteCssVars,initIndex:r.initIndex});await promises.writeFile(i,s,"utf8"),n.succeed();}async function Vr(t,e,r,i={cleanupDefaultNextStyles:false,tailwindVersion:"v3",tailwindConfig:void 0,overwriteCssVars:false,initIndex:true}){i={cleanupDefaultNextStyles:false,tailwindVersion:"v3",tailwindConfig:void 0,overwriteCssVars:false,initIndex:true,...i};let o$1=[Wr(e)];if(i.cleanupDefaultNextStyles&&o$1.push(zt()),i.tailwindVersion==="v4"){if(o$1=[],r.resolvedPaths?.cwd){let s=o(r.resolvedPaths.cwd);!s?.dependencies?.["tailwindcss-animate"]&&!s?.devDependencies?.["tailwindcss-animate"]&&i.initIndex&&o$1.push(Jr({params:"tw-animate-css"}));}o$1.push(Gr({params:"dark (&:is(.dark *))"})),i.cleanupDefaultNextStyles&&o$1.push(zt()),o$1.push(Br(e,{overwriteCssVars:i.overwriteCssVars})),o$1.push(Ur(e)),i.tailwindConfig&&(o$1.push(Yr(i.tailwindConfig)),o$1.push(Kr(i.tailwindConfig)),o$1.push(qr(i.tailwindConfig)));}r.tailwind.cssVariables&&i.initIndex&&o$1.push(Mr({tailwindVersion:i.tailwindVersion}));let a=(await R$1(o$1).process(t,{from:void 0})).css;return a=a.replace(/\/\* ---break--- \*\//g,""),i.tailwindVersion==="v4"&&(a=a.replace(/(\n\s*\n)+/g,` `)),a}function Mr({tailwindVersion:t}){return {postcssPlugin:"update-base-layer",Once(e){let r=[{selector:"*",apply:t==="v4"?"border-border outline-ring/50":"border-border"},{selector:"body",apply:"bg-background text-foreground"}],i=e.nodes.find(o=>o.type==="atrule"&&o.name==="layer"&&o.params==="base"&&r.every(({selector:n,apply:a})=>o.nodes?.some(s=>s.type==="rule"&&s.selector===n&&s.nodes.some(c=>c.type==="atrule"&&c.name==="apply"&&c.params===a))));i||(i=R$1.atRule({name:"layer",params:"base",raws:{semicolon:true,between:" ",before:` `}}),e.append(i),e.insertBefore(i,R$1.comment({text:"---break---"}))),r.forEach(({selector:o,apply:n})=>{i?.nodes?.find(s=>s.type==="rule"&&s.selector===o)||i?.append(R$1.rule({selector:o,nodes:[R$1.atRule({name:"apply",params:n,raws:{semicolon:true,before:` `}})],raws:{semicolon:true,between:" ",before:` `}}));});}}}function Wr(t){return {postcssPlugin:"update-css-vars",Once(e){let r=e.nodes.find(i=>i.type==="atrule"&&i.name==="layer"&&i.params==="base");r instanceof Lr||(r=R$1.atRule({name:"layer",params:"base",nodes:[],raws:{semicolon:true,before:` `,between:" "}}),e.append(r),e.insertBefore(r,R$1.comment({text:"---break---"}))),r!==void 0&&Object.entries(t).forEach(([i,o])=>{let n=i==="light"?":root":`.${i}`;zr(r,n,o);});}}}function Wt(t){let e=t.nodes.find(r=>r.type==="rule"&&r.selector===":root");if(e){let r=["--background","--foreground"];e.nodes.filter(i=>i.type==="decl"&&r.includes(i.prop)).forEach(i=>i.remove()),e.nodes.length===0&&e.remove();}}function zt(){return {postcssPlugin:"cleanup-default-next-styles",Once(t){let e=t.nodes.find(i=>i.type==="rule"&&i.selector==="body");e&&(e.nodes.find(i=>i.type==="decl"&&i.prop==="color"&&["rgb(var(--foreground-rgb))","var(--foreground)"].includes(i.value))?.remove(),e.nodes.find(i=>i.type==="decl"&&i.prop==="background"&&(i.value.startsWith("linear-gradient")||i.value==="var(--background)"))?.remove(),e.nodes.find(i=>i.type==="decl"&&i.prop==="font-family"&&i.value==="Arial, Helvetica, sans-serif")?.remove(),e.nodes.length===0&&e.remove()),Wt(t);let r=t.nodes.find(i=>i.type==="atrule"&&i.params==="(prefers-color-scheme: dark)");r&&(Wt(r),r.nodes.length===0&&r.remove());}}}function zr(t,e,r){let i=t.nodes?.find(o=>o.type==="rule"&&o.selector===e);i||Object.keys(r).length>0&&(i=R$1.rule({selector:e,raws:{between:" ",before:` `}}),t.append(i)),Object.entries(r).forEach(([o,n])=>{let a=`--${o.replace(/^--/,"")}`,s=R$1.decl({prop:a,value:n,raws:{semicolon:true}}),c=i?.nodes.find(l=>l.type==="decl"&&l.prop===a);c?c.replaceWith(s):i?.append(s);});}function Br(t,e){return {postcssPlugin:"update-css-vars-v4",Once(r){Object.entries(t).forEach(([i,o])=>{let n=i==="light"?":root":`.${i}`;if(i==="theme"){n="@theme";let s=Se(r);Object.entries(o).forEach(([c,l])=>{let m=`--${c.replace(/^--/,"")}`,p=R$1.decl({prop:m,value:l,raws:{semicolon:true}}),u=s?.nodes?.find(g=>g.type==="decl"&&g.prop===m);e.overwriteCssVars?u?u.replaceWith(p):s?.append(p):u||s?.append(p);});return}let a=r.nodes?.find(s=>s.type==="rule"&&s.selector===n);!a&&Object.keys(o).length>0&&(a=R$1.rule({selector:n,nodes:[],raws:{semicolon:true,between:" ",before:` `}}),r.append(a),r.insertBefore(a,R$1.comment({text:"---break---"}))),Object.entries(o).forEach(([s,c])=>{let l=`--${s.replace(/^--/,"")}`;l==="--sidebar-background"&&(l="--sidebar"),Bt(c)&&(c=`hsl(${c})`);let m=R$1.decl({prop:l,value:c,raws:{semicolon:true}}),p=a?.nodes.find(u=>u.type==="decl"&&u.prop===l);e.overwriteCssVars?p?p.replaceWith(m):a?.append(m):p||a?.append(m);});});}}}function Ur(t){return {postcssPlugin:"update-theme",Once(e){let r=Array.from(new Set(Object.keys(t).flatMap(n=>Object.keys(t[n]||{}))));if(!r.length)return;let i=Se(e),o=i.nodes?.filter(n=>n.type==="decl"&&n.prop.startsWith("--"));for(let n of r){let a=Object.values(t).find(p=>p[n])?.[n];if(!a)continue;if(n==="radius"){let p={sm:"calc(var(--radius) - 4px)",md:"calc(var(--radius) - 2px)",lg:"var(--radius)",xl:"calc(var(--radius) + 4px)"};for(let[u,g]of Object.entries(p)){let w=R$1.decl({prop:`--radius-${u}`,value:g,raws:{semicolon:true}});i?.nodes?.find(y=>y.type==="decl"&&y.prop===w.prop)||i?.append(w);}continue}let s=Bt(a)||Qr(a)?`--color-${n.replace(/^--/,"")}`:`--${n.replace(/^--/,"")}`;s==="--color-sidebar-background"&&(s="--color-sidebar");let c=`var(--${n})`;s==="--color-sidebar"&&(c="var(--sidebar)");let l=R$1.decl({prop:s,value:c,raws:{semicolon:true}});i?.nodes?.find(p=>p.type==="decl"&&p.prop===l.prop)||(o?.length?i?.insertAfter(o[o.length-1],l):i?.append(l));}}}}function Se(t){let e=t.nodes.find(r=>r.type==="atrule"&&r.name==="theme"&&r.params==="inline");return e||(e=R$1.atRule({name:"theme",params:"inline",nodes:[],raws:{semicolon:true,between:" ",before:` `}}),t.append(e),t.insertBefore(e,R$1.comment({text:"---break---"}))),e}function Gr({params:t}){return {postcssPlugin:"add-custom-variant",Once(e){if(!e.nodes.find(i=>i.type==="atrule"&&i.name==="custom-variant")){let i=e.nodes.filter(n=>n.type==="atrule"&&n.name==="import"),o=R$1.atRule({name:"custom-variant",params:t,raws:{semicolon:true,before:` `}});if(i.length>0){let n=i[i.length-1];e.insertAfter(n,o);}else e.insertAfter(e.nodes[0],o);e.insertBefore(o,R$1.comment({text:"---break---"}));}}}}function Jr({params:t}){return {postcssPlugin:"add-custom-import",Once(e){let r=e.nodes.filter(n=>n.type==="atrule"&&n.name==="import"),i=e.nodes.find(n=>n.type==="atrule"&&n.name==="custom-variant");if(!r.some(n=>n.params.replace(/["']/g,"")===t)){let n=R$1.atRule({name:"import",params:`"${t}"`,raws:{semicolon:true,before:` `}});if(r.length>0){let a=r[r.length-1];e.insertAfter(a,n);}else i?(e.insertBefore(i,n),e.insertBefore(i,R$1.comment({text:"---break---"}))):(e.prepend(n),e.insertAfter(n,R$1.comment({text:"---break---"})));}}}}function Yr(t){return {postcssPlugin:"update-tailwind-config",Once(e){if(!t?.plugins)return;let i=Hr(e)==="single"?"'":'"',o=e.nodes.filter(a=>a.type==="atrule"&&a.name==="plugin"),n=o[o.length-1]||e.nodes[0];for(let a of t.plugins){let s=a.replace(/^require\(["']|["']\)$/g,"");if(o.some(l=>l.params.replace(/["']/g,"")===s))continue;let c=R$1.atRule({name:"plugin",params:`${i}${s}${i}`,raws:{semicolon:true,before:` `}});e.insertAfter(n,c),e.insertBefore(c,R$1.comment({text:"---break---"}));}}}}function qr(t){return {postcssPlugin:"update-tailwind-config-keyframes",Once(e){if(!t?.theme?.extend?.keyframes)return;let r=Se(e),i=r.nodes?.filter(n=>n.type==="atrule"&&n.name==="keyframes"),o=z.record(z.string(),z.record(z.string(),z.string()));for(let[n,a]of Object.entries(t.theme.extend.keyframes)){if(typeof n!="string")continue;let s=o.safeParse(a);if(!s.success||i?.find(l=>l.type==="atrule"&&l.name==="keyframes"&&l.params===n))continue;let c=R$1.atRule({name:"keyframes",params:n,nodes:[],raws:{semicolon:true,between:" ",before:` `}});for(let[l,m]of Object.entries(s.data)){let p=R$1.rule({selector:l,nodes:Object.entries(m).map(([u,g])=>R$1.decl({prop:u,value:g,raws:{semicolon:true,before:` `,between:": "}})),raws:{semicolon:true,between:" ",before:` `}});c.append(p);}r.append(c),r.insertBefore(c,R$1.comment({text:"---break---"}));}}}}function Kr(t){return {postcssPlugin:"update-tailwind-config-animation",Once(e){if(!t?.theme?.extend?.animation)return;let r=Se(e),i=r.nodes?.filter(n=>n.type==="decl"&&n.prop.startsWith("--animate-")),o=z.record(z.string(),z.string()).safeParse(t.theme.extend.animation);if(o.success)for(let[n,a]of Object.entries(o.data)){let s=`--animate-${n}`;if(i?.find(l=>l.prop===s))continue;let c=R$1.decl({prop:s,value:a,raws:{semicolon:true,between:": ",before:` `}});r.append(c);}}}}function Hr(t){return t.nodes[0].toString().includes("'")?"single":"double"}function Bt(t){if(t.startsWith("hsl")||t.startsWith("rgb")||t.startsWith("#")||t.startsWith("oklch"))return false;let e=t.split(" ");return e.length===3&&e.slice(1,3).every(r=>r.includes("%"))}function Qr(t){return t.startsWith("hsl")||t.startsWith("rgb")||t.startsWith("#")||t.startsWith("oklch")}async function V(t$1,e,r,i){if(t$1=Array.from(new Set(t$1)),e=Array.from(new Set(e)),!t$1?.length&&!e?.length)return;i={silent:false,...i};let o=t("Installing dependencies.",{silent:i.silent})?.start(),n=await ei(r),a="";if(Zr(r)&&n==="npm")if(i.silent)a="force";else {o.stopAndPersist(),s.warn(` It looks like you are using React 19. Some packages may fail to install due to peer dependency issues in npm (see https://ui.shadcn.com/react-19). `);let s$1=await Ke([{type:"select",name:"flag",message:"How would you like to proceed?",choices:[{title:"Use --force",value:"force"},{title:"Use --legacy-peer-deps",value:"legacy-peer-deps"}]}]);s$1&&(a=s$1.flag);}o?.start(),await ti(n,t$1,e,r.resolvedPaths.cwd,a),o?.succeed();}function Zr(t){let e=o(t.resolvedPaths.cwd,false);if(!e?.dependencies?.react)return false;let r=/^(?:\^|~)?19(?:\.\d+)*(?:-.*)?$/.test(e.dependencies.react),i=e.dependencies["react-day-picker"]?.startsWith("8");return r&&i}async function ei(t){return o(t.resolvedPaths.cwd,false)?.dependencies?.expo?"expo":a$1(t.resolvedPaths.cwd)}async function ti(t,e,r,i,o){if(t==="npm")return ri(e,r,i,o);if(t==="deno")return ii(e,r,i);if(t==="expo")return oi(e,r,i);e?.length&&await execa(t,["add",...e],{cwd:i}),r?.length&&await execa(t,["add","-D",...r],{cwd:i});}async function ri(t,e,r,i){t.length&&await execa("npm",["install",...i?[`--${i}`]:[],...t],{cwd:r}),e.length&&await execa("npm",["install",...i?[`--${i}`]:[],"-D",...e],{cwd:r});}async function ii(t,e,r){t?.length&&await execa("deno",["add",...t.map(i=>`npm:${i}`)],{cwd:r}),e?.length&&await execa("deno",["add","-D",...e.map(i=>`npm:${i}`)],{cwd:r});}async function oi(t,e,r){t.length&&await execa("npx",["expo","install",...t],{cwd:r}),e.length&&await execa("npx",["expo","install","-- -D",...e],{cwd:r});}async function Je(t$1,e,r){if(!t$1||Object.keys(t$1).length===0)return {envVarsAdded:[],envFileUpdated:null,envFileCreated:null};r={silent:false,...r};let i=t("Adding environment variables.",{silent:r.silent})?.start(),o=e.resolvedPaths.cwd,n=M__default.join(o,".env.local"),a=G(o);a&&(n=a);let s$1=existsSync(n),c=M__default.basename(n),l=Object.entries(t$1).map(([g,w])=>`${g}=${w}`).join(` `),m=[],p=null,u=null;if(s$1){let g=await promises.readFile(n,"utf-8"),w=I(g,l);if(m=H$1(g,l),m.length>0){if(await promises.writeFile(n,w,"utf-8"),p=M__default.relative(o,n),i?.succeed(`Added the following variables to ${d.info(c)}:`),!r.silent)for(let y of m)s.log(` ${d.success("+")} ${y}`);}else i?.stop();}else if(await promises.writeFile(n,l+` `,"utf-8"),u=M__default.relative(o,n),m=Object.keys(t$1),i?.succeed(`Added the following variables to ${d.info(c)}:`),!r.silent)for(let g of m)s.log(` ${d.success("+")} ${g}`);return !r.silent&&m.length>0&&s.break(),{envVarsAdded:m,envFileUpdated:p,envFileCreated:u}}async function ce(t,e,r){r={overwrite:false,silent:false,isNewProject:false,baseStyle:true,...r};let i=await k(e);return i&&i.ui&&i.ui.resolvedPaths.cwd!==e.resolvedPaths.cwd?await ci(t,e,i,{...r,isRemote:t?.length===1&&!!t[0].match(/\/chat\/b\//)}):await ai(t,e,r)}async function ai(t$1,e,r$1){if(!r$1.baseStyle&&!t$1.length)return;let i=t("Checking registry.",{silent:r$1.silent})?.start(),o=await X(t$1,O(e));if(!o)return i?.fail(),Y(new Error("Failed to fetch components from registry."));try{Gt(o.files??[],e.resolvedPaths.cwd);}catch(s){return i?.fail(),Y(s)}i?.succeed();let n=await r(e);await T(o.tailwind?.config,e,{silent:r$1.silent,tailwindVersion:n});let a=await Ut(t$1,e);await Ue(o.cssVars,e,{cleanupDefaultNextStyles:r$1.isNewProject,silent:r$1.silent,tailwindVersion:n,tailwindConfig:o.tailwind?.config,overwriteCssVars:a,initIndex:r$1.baseStyle}),await Be(o.css,e,{silent:r$1.silent}),await Je(o.envVars,e,{silent:r$1.silent}),await V(o.dependencies,o.devDependencies,e,{silent:r$1.silent}),await L(o.files,e,{overwrite:r$1.overwrite,silent:r$1.silent}),o.docs&&s.info(o.docs);}async function ci(t$1,e,r$1,i){if(!i.baseStyle&&!t$1.length)return;let o=t("Checking registry.",{silent:i.silent})?.start(),n=await X(t$1,O(e));if(!n)return o?.fail(),Y(new Error("Failed to fetch components from registry."));try{Gt(n.files??[],e.resolvedPaths.cwd);}catch(y){return o?.fail(),Y(y)}o?.succeed();let a=[],s$1=[],c=[],l$1=t("Installing components.")?.start(),m$1=r$1.ui,p=await r(m$1),u=m(e.resolvedPaths.cwd,m$1.resolvedPaths.ui);if(n.tailwind?.config&&(await T(n.tailwind?.config,m$1,{silent:true,tailwindVersion:p}),s$1.push(M__default.relative(u,m$1.resolvedPaths.tailwindConfig))),n.cssVars){let y=await Ut(t$1,e);await Ue(n.cssVars,m$1,{silent:true,tailwindVersion:p,tailwindConfig:n.tailwind?.config,overwriteCssVars:y}),s$1.push(M__default.relative(u,m$1.resolvedPaths.tailwindCss));}n.css&&(await Be(n.css,m$1,{silent:true}),s$1.push(M__default.relative(u,m$1.resolvedPaths.tailwindCss))),n.envVars&&await Je(n.envVars,m$1,{silent:true}),await V(n.dependencies,n.devDependencies,m$1,{silent:true});let g=new Map;for(let y of n.files??[]){let C=y.type||"registry:ui";g.has(C)||g.set(C,[]),g.get(C).push(y);}for(let y of Array.from(g.keys())){let C=g.get(y),x=y==="registry:ui"?r$1.ui:e,z=m(e.resolvedPaths.cwd,x.resolvedPaths.ui||x.resolvedPaths.cwd),E=await l(z,x.resolvedPaths.cwd)??x.resolvedPaths.cwd,Y=await L(C,x,{overwrite:i.overwrite,silent:true,rootSpinner:l$1,isRemote:i.isRemote,isWorkspace:true});a.push(...Y.filesCreated.map(j=>M__default.relative(z,M__default.join(E,j)))),s$1.push(...Y.filesUpdated.map(j=>M__default.relative(z,M__default.join(E,j)))),c.push(...Y.filesSkipped.map(j=>M__default.relative(z,M__default.join(E,j))));}if(l$1?.succeed(),a.sort(),s$1.sort(),c.sort(),!(a.length||s$1.length)&&!c.length&&t("No files updated.",{silent:i.silent})?.info(),a.length){t(`Created ${a.length} ${a.length===1?"file":"files"}:`,{silent:i.silent})?.succeed();for(let y of a)s.log(` - ${y}`);}if(s$1.length){t(`Updated ${s$1.length} ${s$1.length===1?"file":"files"}:`,{silent:i.silent})?.info();for(let y of s$1)s.log(` - ${y}`);}if(c.length){t(`Skipped ${c.length} ${s$1.length===1?"file":"files"}: (use --overwrite to overwrite)`,{silent:i.silent})?.info();for(let y of c)s.log(` - ${y}`);}n.docs&&s.info(n.docs);}async function Ut(t,e){let r=await _$1(t,{config:e});return z.array(g$1).parse(r).some(o=>o.type==="registry:theme"||o.type==="registry:style")}function Gt(t,e){for(let r of t)if(r?.target&&!Dt(r.target,e))throw new Error(`We found an unsafe file path "${r.target} in the registry item. Installation aborted.`)}var fi="https://codeload.github.com/shadcn-ui/ui/tar.gz/main",H={next:"next","next-monorepo":"next-monorepo"};async function Ie(t){t={srcDir:false,...t};let e=t.template&&H[t.template]?t.template:"next",r=e===H.next?"my-app":"my-monorepo",i="latest",o=t.components?.length===1&&!!t.components[0].match(/\/chat\/b\//);if(t.components&&o)try{let[s]=await S(t.components),{meta:c}=z.object({meta:z.object({nextVersion:z.string()})}).parse(s);i=c.nextVersion,e=H.next;}catch(s$1){s.break(),Y(s$1);}if(!t.force){let{type:s,name:c}=await Ke([{type:t.template||o?null:"select",name:"type",message:`The path ${d.info(t.cwd)} does not contain a package.json file. Would you like to start a new project?`,choices:[{title:"Next.js",value:"next"},{title:"Next.js (Monorepo)",value:"next-monorepo"}],initial:0},{type:"text",name:"name",message:"What is your project named?",initial:r,format:l=>l.trim(),validate:l=>l.length>128?"Name should be less than 128 characters.":true}]);e=s??e,r=c;}let n=await a$1(t.cwd,{withFallback:true}),a=`${t.cwd}/${r}`;try{await Q.access(t.cwd,Q.constants.W_OK);}catch{s.break(),s.error(`The path ${d.info(t.cwd)} is not writable.`),s.error(`It is likely you do not have write permissions for this folder or the path ${d.info(t.cwd)} does not exist.`),s.break(),process.exit(1);}return Q.existsSync(M__default.resolve(t.cwd,r,"package.json"))&&(s.break(),s.error(`A project with the name ${d.info(r)} already exists.`),s.error("Please choose a different name and try again."),s.break(),process.exit(1)),e===H.next&&await pi(a,{version:i,cwd:t.cwd,packageManager:n,srcDir:!!t.srcDir}),e===H["next-monorepo"]&&await di(a,{packageManager:n}),{projectPath:a,projectName:r,template:e}}async function pi(t$1,e){let r=t("Creating a new Next.js project. This may take a few minutes.").start(),i=["--tailwind","--eslint","--typescript","--app",e.srcDir?"--src-dir":"--no-src-dir","--no-import-alias",`--use-${e.packageManager}`];(e.version.startsWith("15")||e.version.startsWith("latest")||e.version.startsWith("canary"))&&i.push("--turbopack");try{await execa("npx",[`create-next-app@${e.version}`,t$1,"--silent",...i],{cwd:e.cwd});}catch{s.break(),s.error("Something went wrong creating a new Next.js project. Please try again."),process.exit(1);}r?.succeed("Creating a new Next.js project.");}async function di(t$1,e){let r=t("Creating a new Next.js monorepo. This may take a few minutes.").start();try{let i=M__default.join(li.tmpdir(),`shadcn-template-${Date.now()}`);await Q.ensureDir(i);let o=await fetch(fi);if(!o.ok)throw new Error(`Failed to download template: ${o.statusText}`);let n=M__default.resolve(i,"template.tar.gz");await Q.writeFile(n,Buffer.from(await o.arrayBuffer())),await execa("tar",["-xzf",n,"-C",i,"--strip-components=2","ui-main/templates/monorepo-next"]);let a=M__default.resolve(i,"monorepo-next");await Q.move(a,t$1),await Q.remove(i),await execa(e.packageManager,["install"],{cwd:t$1});let s=process.cwd();await execa("git",["--version"],{cwd:t$1}),await execa("git",["init"],{cwd:t$1}),await execa("git",["add","-A"],{cwd:t$1}),await execa("git",["commit","-m","Initial commit"],{cwd:t$1}),r?.succeed("Creating a new Next.js monorepo.");}catch(i){r?.fail("Something went wrong creating a new Next.js monorepo."),Y(i);}}async function A(t=process.cwd()){try{let{config:e}=await import('@dotenvx/dotenvx'),r=[".env.local",".env.development.local",".env.development",".env"];for(let i of r){let o=join(t,i);existsSync(o)&&e({path:o,overload:!1,quiet:!0});}}catch(e){s.warn("Failed to load env files:",e);}}var le=".bak";function Jt(t){if(!Q.existsSync(t))return null;let e=`${t}${le}`;try{return Q.renameSync(t,e),e}catch(r){return console.error(`Failed to create backup of ${t}: ${r}`),null}}function Yt(t){let e=`${t}${le}`;if(!Q.existsSync(e))return false;try{return Q.renameSync(e,t),!0}catch(r){return console.error(`Warning: Could not restore backup file ${e}: ${r}`),false}}function qe(t){let e=`${t}${le}`;if(!Q.existsSync(e))return false;try{return Q.unlinkSync(e),!0}catch{return false}}async function qt(t,e){let r=new Set,i=new Set,o=[...t];for(;o.length>0;){let n=o.shift();if(i.has(n))continue;i.add(n);let{registry:a}=F(n);a&&!b[a]&&r.add(a);try{let[s]=await W$1([n],e,{useCache:!0});if(s?.registryDependencies)for(let c of s.registryDependencies){let{registry:l}=F(c);l&&!b[l]&&r.add(l),i.has(c)||o.push(c);}}catch(s){if(s instanceof z$1){let{registry:c}=F(n);c&&!b[c]&&r.add(c);continue}continue}}return Array.from(r)}async function _(t$1,e,r={}){r={silent:false,writeFile:true,...r};let o=(await qt(t$1,e)).filter(l=>!e.registries?.[l]&&!Object.keys(b).includes(l));if(o.length===0)return {config:e,newRegistries:[]};let n=await ja({useCache:process.env.NODE_ENV!=="development"});if(!n)return {config:e,newRegistries:[]};let a={};for(let l of o)n[l]&&(a[l]=n[l]);if(Object.keys(a).length===0)return {config:e,newRegistries:[]};let s=Object.fromEntries(Object.entries(e.registries||{}).filter(([l])=>!Object.keys(b).includes(l))),c={...e,registries:{...s,...a}};if(r.writeFile){let{resolvedPaths:l,...m}=c,p$1=t("Updating components.json.",{silent:r.silent}).start(),u=p.parse(m);await Q.writeFile(M__default.resolve(e.resolvedPaths.cwd,"components.json"),JSON.stringify(u,null,2)+` `,"utf-8"),p$1.succeed();}return {config:c,newRegistries:Object.keys(a)}}async function Ht(t$1,e,r){if(!t$1)return;r={silent:false,...r};let i=M__default.relative(e.resolvedPaths.cwd,e.resolvedPaths.tailwindConfig),o=t(`Updating ${d.info(i)}`,{silent:r.silent}).start(),n=await promises.readFile(e.resolvedPaths.tailwindConfig,"utf8"),a=await bi(n,t$1,e);await promises.writeFile(e.resolvedPaths.tailwindConfig,a,"utf8"),o?.succeed();}async function bi(t,e,r){let i=await U(t,r),o=i.getDescendantsOfKind(SyntaxKind.ObjectLiteralExpression).find(n=>n.getProperties().some(a=>a.isKind(SyntaxKind.PropertyAssignment)&&a.getName()==="content"));return o?(Ri(o,e),i.getFullText()):t}async function Ri(t,e){let r=V$1(t),i=t.getProperty("content");if(!i){let o={name:"content",initializer:`[${r}${e.join(`${r}, ${r}`)}${r}]`};return t.addPropertyAssignment(o),t}if(i.isKind(SyntaxKind.PropertyAssignment)){let o=i.getInitializer();if(o?.isKind(SyntaxKind.ArrayLiteralExpression))for(let n of e){let a=`${r}${n}${r}`;o.getElements().map(s=>s.getText()).includes(a)||o.addElement(a);}return t}return t}process.on("exit",t=>{let e=M__default.resolve(process.cwd(),"components.json");return t===0?qe(e):Yt(e)});var Ci=z.object({cwd:z.string(),components:z.array(z.string()).optional(),yes:z.boolean(),defaults:z.boolean(),force:z.boolean(),silent:z.boolean(),isNewProject:z.boolean(),srcDir:z.boolean().optional(),cssVariables:z.boolean(),template:z.string().optional().refine(t=>t?H[t]:true,{message:"Invalid template. Please use 'next' or 'next-monorepo'."}),baseColor:z.string().optional().refine(t=>t?a.find(e=>e.name===t):true,{message:`Invalid base color. Please use '${a.map(t=>t.name).join("', '")}'`}),baseStyle:z.boolean()}),Qt=new Command().name("init").description("initialize your project and install dependencies").argument("[components...]","names, url or local path to component").option("-t, --template