shadcn
Version:
Add components to your apps.
79 lines (76 loc) • 74.6 kB
JavaScript
#!/usr/bin/env node
import { a as a$1 } from './chunk-MLPJ4AFS.js';
import { O, u, v, S, r, a, x, o, h, p, s, i, Q as Q$1, T, e, f, c, d, g, q, w, m, P, I, H, W, U as U$1, X as X$1, t, j, _, y, ba, Y, da, ca, l, k, z as z$1, A as A$1, R, n, b as b$1 } from './chunk-P4EM45ZN.js';
export { O as BASE_COLORS, Z as clearRegistryCache, Y as fetchRegistry, W as fetchTree, X as getItemTargetPath, U as getRegistryBaseColor, T as getRegistryBaseColors, R as getRegistryIcons, P as getRegistryIndex, S as getRegistryItem, da as getRegistryParentMap, Q as getRegistryStyles, ca as getRegistryTypeAliasMap, aa as isUrl, $ as registryGetTheme, _ as registryResolveItemsTree, ba as resolveRegistryItems, V as resolveTree } from './chunk-P4EM45ZN.js';
import qi, { promises, existsSync } from 'fs';
import * as b from 'path';
import b__default, { basename } from 'path';
import te from 'fs-extra';
import R$1 from 'postcss';
import Or from 'postcss/lib/at-rule';
import { z } from 'zod';
import { detect } from '@antfu/ni';
import { execa } from 'execa';
import rt from 'prompts';
import Ai, { tmpdir } from 'os';
import { Project, ScriptKind, SyntaxKind } from 'ts-morph';
import { transformFromAstSync } from '@babel/core';
import { parse } from '@babel/parser';
import fi from '@babel/plugin-transform-typescript';
import * as $e from 'recast';
import { loadConfig } from 'tsconfig-paths';
import { Command } from 'commander';
import * as M from 'fs/promises';
import M__default from 'fs/promises';
import { diffLines } from 'diff';
import { randomBytes } from 'crypto';
import fn from 'fast-glob';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
var F="1";var A="3";var le="5",Ge="6",Dt="7";var X="13";async function Lt(e){let t={};if(!te.existsSync(e.cwd)||!te.existsSync(b__default.resolve(e.cwd,"package.json")))return t[F]=!0,{errors:t,projectInfo:null};let r$1=s("Preflight checks.",{silent:e.silent}).start();te.existsSync(b__default.resolve(e.cwd,"components.json"))&&!e.force&&(r$1?.fail(),r.break(),r.error(`A ${a.info("components.json")} file already exists at ${a.info(e.cwd)}.
To start over, remove the ${a.info("components.json")} file and run ${a.info("init")} again.`),r.break(),process.exit(1)),r$1?.succeed();let i=s("Verifying framework.",{silent:e.silent}).start(),n=await o(e.cwd);(!n||n?.framework.name==="manual")&&(t[Dt]=!0,i?.fail(),r.break(),n?.framework.links.installation&&r.error(`We could not detect a supported framework at ${a.info(e.cwd)}.
Visit ${a.info(n?.framework.links.installation)} to manually configure your project.
Once configured, you can use the cli to add components.`),r.break(),process.exit(1)),i?.succeed(`Verifying framework. Found ${a.info(n.framework.label)}.`);let o$1="Validating Tailwind CSS.";n.tailwindVersion==="v4"&&(o$1=`Validating Tailwind CSS config. Found ${a.info("v4")}.`);let a$1=s(o$1,{silent:e.silent}).start();n.tailwindVersion==="v3"&&(!n?.tailwindConfigFile||!n?.tailwindCssFile)?(t[le]=!0,a$1?.fail()):n.tailwindVersion==="v4"&&!n?.tailwindCssFile?(t[le]=!0,a$1?.fail()):n.tailwindVersion?a$1?.succeed():(t[le]=!0,a$1?.fail());let s$1=s("Validating import alias.",{silent:e.silent}).start();return n?.aliasPrefix?s$1?.succeed():(t[Ge]=!0,s$1?.fail()),Object.keys(t).length>0&&(t[le]&&(r.break(),r.error(`No Tailwind CSS configuration found at ${a.info(e.cwd)}.`),r.error("It is likely you do not have Tailwind CSS installed or have an invalid configuration."),r.error("Install Tailwind CSS then try again."),n?.framework.links.tailwind&&r.error(`Visit ${a.info(n?.framework.links.tailwind)} to get started.`)),t[Ge]&&(r.break(),r.error("No import alias found in your tsconfig.json file."),n?.framework.links.installation&&r.error(`Visit ${a.info(n?.framework.links.installation)} to learn how to set an import alias.`)),r.break(),process.exit(1)),{errors:t,projectInfo:n}}function Vt(e,t){if(e.includes("\0"))return !1;let r;try{r=e;let u="";for(;r!==u&&r.includes("%");)u=r,r=decodeURIComponent(r);}catch{return !1}let i=b__default.normalize(r.replace(/\\/g,"/")),n=b__default.normalize(t),o=u=>u.replace(/\[\.\.\..*?\]/g,"").includes("..");if(o(i)||o(r)||o(e))return !1;let a=u=>u.replace(/\[\.\.\..*?\]/g,""),s=a(e),l=a(r);if([/\.\.[\/\\]/,/[\/\\]\.\./,/\.\./,/\.\.%/,/\x00/,/[\x01-\x1f]/].some(u=>u.test(s)||u.test(l))||(e.includes("~")||r.includes("~"))&&(e.includes("../")||r.includes("../")))return !1;if(/^[a-zA-Z]:[\/\\]/.test(r))return process.platform==="win32"?r.toLowerCase().startsWith(t.toLowerCase()):!1;if(b__default.isAbsolute(i))return i.startsWith(n+b__default.sep);let m=b__default.resolve(n,i);return m.startsWith(n+b__default.sep)||m===n}async function Ye(e,t,r){if(!t.resolvedPaths.tailwindCss||!e||Object.keys(e).length===0)return;r={silent:!1,...r};let i=t.resolvedPaths.tailwindCss,n=b__default.relative(t.resolvedPaths.cwd,i),o=s(`Updating ${a.info(n)}`,{silent:r.silent}).start(),a$1=await promises.readFile(i,"utf8"),s$1=await jr(a$1,e);await promises.writeFile(i,s$1,"utf8"),o.succeed();}async function jr(e,t){let r=[$r(t)],n=(await R$1(r).process(e,{from:void 0})).css;return n=n.replace(/\/\* ---break--- \*\//g,""),n=n.replace(/(\n\s*\n)+/g,`
`),n=n.trimEnd(),n}function $r(e){return {postcssPlugin:"update-css",Once(t){for(let[r,i]of Object.entries(e))if(r.startsWith("@")){let n=r.match(/@([a-zA-Z-]+)\s*(.*)/);if(!n)continue;let[,o,a]=n;if(o==="plugin"){if(!t.nodes?.find(l=>l.type==="atrule"&&l.name==="plugin"&&l.params===a)){let l=R$1.atRule({name:"plugin",params:a,raws:{semicolon:!0,before:`
`}}),c=t.nodes?.filter(m=>m.type==="atrule"&&m.name==="import"),p=t.nodes?.filter(m=>m.type==="atrule"&&m.name==="plugin");if(p&&p.length>0){let m=p[p.length-1];t.insertAfter(m,l);}else if(c&&c.length>0){let m=c[c.length-1];t.insertAfter(m,l),t.insertBefore(l,R$1.comment({text:"---break---"})),t.insertAfter(l,R$1.comment({text:"---break---"}));}else t.prepend(l),t.insertBefore(l,R$1.comment({text:"---break---"})),t.insertAfter(l,R$1.comment({text:"---break---"}));}}else if(o==="keyframes"){let s=t.nodes?.find(c=>c.type==="atrule"&&c.name==="theme"&&c.params==="inline");s||(s=R$1.atRule({name:"theme",params:"inline",raws:{semicolon:!0,between:" ",before:`
`}}),t.append(s),t.insertBefore(s,R$1.comment({text:"---break---"})));let l=R$1.atRule({name:"keyframes",params:a,raws:{semicolon:!0,between:" ",before:`
`}});if(s.append(l),typeof i=="object")for(let[c,p]of Object.entries(i))ie(l,c,p);}else if(o==="utility"){let s=t.nodes?.find(l=>l.type==="atrule"&&l.name===o&&l.params===a);if(s){if(typeof i=="object")for(let[l,c]of Object.entries(i))if(typeof c=="string"){let p=s.nodes?.find(u=>u.type==="decl"&&u.prop===l),m=R$1.decl({prop:l,value:c,raws:{semicolon:!0,before:`
`}});p?p.replaceWith(m):s.append(m);}else typeof c=="object"&&ie(s,l,c);}else {let l=R$1.atRule({name:o,params:a,raws:{semicolon:!0,between:" ",before:`
`}});if(t.append(l),t.insertBefore(l,R$1.comment({text:"---break---"})),typeof i=="object")for(let[c,p]of Object.entries(i))if(typeof p=="string"){let m=R$1.decl({prop:c,value:p,raws:{semicolon:!0,before:`
`}});l.append(m);}else typeof p=="object"&&ie(l,c,p);}}else zt(t,o,a,i);}else ie(t,r,i);}}}function zt(e,t,r,i){let n=e.nodes?.find(o=>o.type==="atrule"&&o.name===t&&o.params===r);if(n||(n=R$1.atRule({name:t,params:r,raws:{semicolon:!0,between:" ",before:`
`}}),e.append(n),e.insertBefore(n,R$1.comment({text:"---break---"}))),typeof i=="object")for(let[o,a]of Object.entries(i))if(o.startsWith("@")){let s=o.match(/@([a-zA-Z-]+)\s*(.*)/);if(s){let[,l,c]=s;zt(n,l,c,a);}}else ie(n,o,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(l=>{if(l.type==="decl"){let c=l.clone();c.raws.before=`
`,s.append(c);}}),s.nodes?.length&&n.append(s);}}catch(o){throw console.error("Error parsing at-rule content:",i,o),o}}function ie(e,t,r){let i=e.nodes?.find(n=>n.type==="rule"&&n.selector===t);if(i||(i=R$1.rule({selector:t,raws:{semicolon:!0,between:" ",before:`
`}}),e.append(i)),typeof r=="object"){for(let[n,o]of Object.entries(r))if(typeof o=="string"){let a=R$1.decl({prop:n,value:o,raws:{semicolon:!0,before:`
`}}),s=i.nodes?.find(l=>l.type==="decl"&&l.prop===n);s?s.replaceWith(a):i.append(a);}else if(typeof o=="object"){let a=n.startsWith("&")?t.replace(/^([^:]+)/,`$1${n.substring(1)}`):n;ie(e,a,o);}}else if(typeof r=="string")try{let o=R$1.parse(`.temp{${r}}`).first;o&&o.nodes&&o.nodes.forEach(a=>{if(a.type==="decl"){let s=a.clone();s.raws.before=`
`,i?.append(s);}});}catch(n){throw console.error("Error parsing rule content:",t,r,n),n}}async function qe(e,t,r){if(!t.resolvedPaths.tailwindCss||!Object.keys(e??{}).length)return;r={cleanupDefaultNextStyles:!1,silent:!1,tailwindVersion:"v3",overwriteCssVars:!1,initIndex:!0,...r};let i=t.resolvedPaths.tailwindCss,n=b__default.relative(t.resolvedPaths.cwd,i),o=s(`Updating CSS variables in ${a.info(n)}`,{silent:r.silent}).start(),a$1=await promises.readFile(i,"utf8"),s$1=await Nr(a$1,e??{},t,{cleanupDefaultNextStyles:r.cleanupDefaultNextStyles,tailwindVersion:r.tailwindVersion,tailwindConfig:r.tailwindConfig,overwriteCssVars:r.overwriteCssVars,initIndex:r.initIndex});await promises.writeFile(i,s$1,"utf8"),o.succeed();}async function Nr(e,t,r,i={cleanupDefaultNextStyles:!1,tailwindVersion:"v3",tailwindConfig:void 0,overwriteCssVars:!1,initIndex:!0}){i={cleanupDefaultNextStyles:!1,tailwindVersion:"v3",tailwindConfig:void 0,overwriteCssVars:!1,initIndex:!0,...i};let n$1=[Ar(t)];if(i.cleanupDefaultNextStyles&&n$1.push(Ut()),i.tailwindVersion==="v4"){if(n$1=[],r.resolvedPaths?.cwd){let s=n(r.resolvedPaths.cwd);!s?.dependencies?.["tailwindcss-animate"]&&!s?.devDependencies?.["tailwindcss-animate"]&&i.initIndex&&n$1.push(Mr({params:"tw-animate-css"}));}n$1.push(Vr({params:"dark (&:is(.dark *))"})),i.cleanupDefaultNextStyles&&n$1.push(Ut()),n$1.push(_r(t,{overwriteCssVars:i.overwriteCssVars})),n$1.push(Lr(t)),i.tailwindConfig&&(n$1.push(zr(i.tailwindConfig)),n$1.push(Br(i.tailwindConfig)),n$1.push(Wr(i.tailwindConfig)));}r.tailwind.cssVariables&&i.initIndex&&n$1.push(Fr({tailwindVersion:i.tailwindVersion}));let a=(await R$1(n$1).process(e,{from:void 0})).css;return a=a.replace(/\/\* ---break--- \*\//g,""),i.tailwindVersion==="v4"&&(a=a.replace(/(\n\s*\n)+/g,`
`)),a}function Fr({tailwindVersion:e}){return {postcssPlugin:"update-base-layer",Once(t){let r=[{selector:"*",apply:e==="v4"?"border-border outline-ring/50":"border-border"},{selector:"body",apply:"bg-background text-foreground"}],i=t.nodes.find(n=>n.type==="atrule"&&n.name==="layer"&&n.params==="base"&&r.every(({selector:o,apply:a})=>n.nodes?.some(s=>s.type==="rule"&&s.selector===o&&s.nodes.some(l=>l.type==="atrule"&&l.name==="apply"&&l.params===a))));i||(i=R$1.atRule({name:"layer",params:"base",raws:{semicolon:!0,between:" ",before:`
`}}),t.append(i),t.insertBefore(i,R$1.comment({text:"---break---"}))),r.forEach(({selector:n,apply:o})=>{i?.nodes?.find(s=>s.type==="rule"&&s.selector===n)||i?.append(R$1.rule({selector:n,nodes:[R$1.atRule({name:"apply",params:o,raws:{semicolon:!0,before:`
`}})],raws:{semicolon:!0,between:" ",before:`
`}}));});}}}function Ar(e){return {postcssPlugin:"update-css-vars",Once(t){let r=t.nodes.find(i=>i.type==="atrule"&&i.name==="layer"&&i.params==="base");r instanceof Or||(r=R$1.atRule({name:"layer",params:"base",nodes:[],raws:{semicolon:!0,before:`
`,between:" "}}),t.append(r),t.insertBefore(r,R$1.comment({text:"---break---"}))),r!==void 0&&Object.entries(e).forEach(([i,n])=>{let o=i==="light"?":root":`.${i}`;Dr(r,o,n);});}}}function Bt(e){let t=e.nodes.find(r=>r.type==="rule"&&r.selector===":root");if(t){let r=["--background","--foreground"];t.nodes.filter(i=>i.type==="decl"&&r.includes(i.prop)).forEach(i=>i.remove()),t.nodes.length===0&&t.remove();}}function Ut(){return {postcssPlugin:"cleanup-default-next-styles",Once(e){let t=e.nodes.find(i=>i.type==="rule"&&i.selector==="body");t&&(t.nodes.find(i=>i.type==="decl"&&i.prop==="color"&&["rgb(var(--foreground-rgb))","var(--foreground)"].includes(i.value))?.remove(),t.nodes.find(i=>i.type==="decl"&&i.prop==="background"&&(i.value.startsWith("linear-gradient")||i.value==="var(--background)"))?.remove(),t.nodes.find(i=>i.type==="decl"&&i.prop==="font-family"&&i.value==="Arial, Helvetica, sans-serif")?.remove(),t.nodes.length===0&&t.remove()),Bt(e);let r=e.nodes.find(i=>i.type==="atrule"&&i.params==="(prefers-color-scheme: dark)");r&&(Bt(r),r.nodes.length===0&&r.remove());}}}function Dr(e,t,r){let i=e.nodes?.find(n=>n.type==="rule"&&n.selector===t);i||Object.keys(r).length>0&&(i=R$1.rule({selector:t,raws:{between:" ",before:`
`}}),e.append(i)),Object.entries(r).forEach(([n,o])=>{let a=`--${n.replace(/^--/,"")}`,s=R$1.decl({prop:a,value:o,raws:{semicolon:!0}}),l=i?.nodes.find(c=>c.type==="decl"&&c.prop===a);l?l.replaceWith(s):i?.append(s);});}function _r(e,t){return {postcssPlugin:"update-css-vars-v4",Once(r){Object.entries(e).forEach(([i,n])=>{let o=i==="light"?":root":`.${i}`;if(i==="theme"){o="@theme";let s=ve(r);Object.entries(n).forEach(([l,c])=>{let p=`--${l.replace(/^--/,"")}`,m=R$1.decl({prop:p,value:c,raws:{semicolon:!0}}),u=s?.nodes?.find(w=>w.type==="decl"&&w.prop===p);t.overwriteCssVars?u?u.replaceWith(m):s?.append(m):u||s?.append(m);});return}let a=r.nodes?.find(s=>s.type==="rule"&&s.selector===o);!a&&Object.keys(n).length>0&&(a=R$1.rule({selector:o,nodes:[],raws:{semicolon:!0,between:" ",before:`
`}}),r.append(a),r.insertBefore(a,R$1.comment({text:"---break---"}))),Object.entries(n).forEach(([s,l])=>{let c=`--${s.replace(/^--/,"")}`;c==="--sidebar-background"&&(c="--sidebar"),Kt(l)&&(l=`hsl(${l})`);let p=R$1.decl({prop:c,value:l,raws:{semicolon:!0}}),m=a?.nodes.find(u=>u.type==="decl"&&u.prop===c);t.overwriteCssVars?m?m.replaceWith(p):a?.append(p):m||a?.append(p);});});}}}function Lr(e){return {postcssPlugin:"update-theme",Once(t){let r=Array.from(new Set(Object.keys(e).flatMap(o=>Object.keys(e[o]||{}))));if(!r.length)return;let i=ve(t),n=i.nodes?.filter(o=>o.type==="decl"&&o.prop.startsWith("--"));for(let o of r){let a=Object.values(e).find(m=>m[o])?.[o];if(!a)continue;if(o==="radius"){let m={sm:"calc(var(--radius) - 4px)",md:"calc(var(--radius) - 2px)",lg:"var(--radius)",xl:"calc(var(--radius) + 4px)"};for(let[u,w]of Object.entries(m)){let g=R$1.decl({prop:`--radius-${u}`,value:w,raws:{semicolon:!0}});i?.nodes?.find(h=>h.type==="decl"&&h.prop===g.prop)||i?.append(g);}continue}let s=Kt(a)||Kr(a)?`--color-${o.replace(/^--/,"")}`:`--${o.replace(/^--/,"")}`;s==="--color-sidebar-background"&&(s="--color-sidebar");let l=`var(--${o})`;s==="--color-sidebar"&&(l="var(--sidebar)");let c=R$1.decl({prop:s,value:l,raws:{semicolon:!0}});i?.nodes?.find(m=>m.type==="decl"&&m.prop===c.prop)||(n?.length?i?.insertAfter(n[n.length-1],c):i?.append(c));}}}}function ve(e){let t=e.nodes.find(r=>r.type==="atrule"&&r.name==="theme"&&r.params==="inline");return t||(t=R$1.atRule({name:"theme",params:"inline",nodes:[],raws:{semicolon:!0,between:" ",before:`
`}}),e.append(t),e.insertBefore(t,R$1.comment({text:"---break---"}))),t}function Vr({params:e}){return {postcssPlugin:"add-custom-variant",Once(t){if(!t.nodes.find(i=>i.type==="atrule"&&i.name==="custom-variant")){let i=t.nodes.filter(o=>o.type==="atrule"&&o.name==="import"),n=R$1.atRule({name:"custom-variant",params:e,raws:{semicolon:!0,before:`
`}});if(i.length>0){let o=i[i.length-1];t.insertAfter(o,n);}else t.insertAfter(t.nodes[0],n);t.insertBefore(n,R$1.comment({text:"---break---"}));}}}}function Mr({params:e}){return {postcssPlugin:"add-custom-import",Once(t){let r=t.nodes.filter(o=>o.type==="atrule"&&o.name==="import"),i=t.nodes.find(o=>o.type==="atrule"&&o.name==="custom-variant");if(!r.some(o=>o.params.replace(/["']/g,"")===e)){let o=R$1.atRule({name:"import",params:`"${e}"`,raws:{semicolon:!0,before:`
`}});if(r.length>0){let a=r[r.length-1];t.insertAfter(a,o);}else i?(t.insertBefore(i,o),t.insertBefore(i,R$1.comment({text:"---break---"}))):(t.prepend(o),t.insertAfter(o,R$1.comment({text:"---break---"})));}}}}function zr(e){return {postcssPlugin:"update-tailwind-config",Once(t){if(!e?.plugins)return;let i=Ur(t)==="single"?"'":'"',n=t.nodes.filter(a=>a.type==="atrule"&&a.name==="plugin"),o=n[n.length-1]||t.nodes[0];for(let a of e.plugins){let s=a.replace(/^require\(["']|["']\)$/g,"");if(n.some(c=>c.params.replace(/["']/g,"")===s))continue;let l=R$1.atRule({name:"plugin",params:`${i}${s}${i}`,raws:{semicolon:!0,before:`
`}});t.insertAfter(o,l),t.insertBefore(l,R$1.comment({text:"---break---"}));}}}}function Wr(e){return {postcssPlugin:"update-tailwind-config-keyframes",Once(t){if(!e?.theme?.extend?.keyframes)return;let r=ve(t),i=r.nodes?.filter(o=>o.type==="atrule"&&o.name==="keyframes"),n=z.record(z.string(),z.record(z.string(),z.string()));for(let[o,a]of Object.entries(e.theme.extend.keyframes)){if(typeof o!="string")continue;let s=n.safeParse(a);if(!s.success||i?.find(c=>c.type==="atrule"&&c.name==="keyframes"&&c.params===o))continue;let l=R$1.atRule({name:"keyframes",params:o,nodes:[],raws:{semicolon:!0,between:" ",before:`
`}});for(let[c,p]of Object.entries(s.data)){let m=R$1.rule({selector:c,nodes:Object.entries(p).map(([u,w])=>R$1.decl({prop:u,value:w,raws:{semicolon:!0,before:`
`,between:": "}})),raws:{semicolon:!0,between:" ",before:`
`}});l.append(m);}r.append(l),r.insertBefore(l,R$1.comment({text:"---break---"}));}}}}function Br(e){return {postcssPlugin:"update-tailwind-config-animation",Once(t){if(!e?.theme?.extend?.animation)return;let r=ve(t),i=r.nodes?.filter(o=>o.type==="decl"&&o.prop.startsWith("--animate-")),n=z.record(z.string(),z.string()).safeParse(e.theme.extend.animation);if(n.success)for(let[o,a]of Object.entries(n.data)){let s=`--animate-${o}`;if(i?.find(c=>c.prop===s))continue;let l=R$1.decl({prop:s,value:a,raws:{semicolon:!0,between:": ",before:`
`}});r.append(l);}}}}function Ur(e){return e.nodes[0].toString().includes("'")?"single":"double"}function Kt(e){if(e.startsWith("hsl")||e.startsWith("rgb")||e.startsWith("#")||e.startsWith("oklch"))return !1;let t=e.split(" ");return t.length===3&&t.slice(1,3).every(r=>r.includes("%"))}function Kr(e){return e.startsWith("hsl")||e.startsWith("rgb")||e.startsWith("#")||e.startsWith("oklch")}async function Se(e,{withFallback:t}={withFallback:!1}){let r=await detect({programmatic:!0,cwd:e});if(r==="yarn@berry")return "yarn";if(r==="pnpm@6")return "pnpm";if(r==="bun")return "bun";if(r==="deno")return "deno";if(!t)return r??"npm";let i=process.env.npm_config_user_agent||"";return i.startsWith("yarn")?"yarn":i.startsWith("pnpm")?"pnpm":i.startsWith("bun")?"bun":"npm"}async function Q(e,t,r$1,i){if(e=Array.from(new Set(e)),t=Array.from(new Set(t)),!e?.length&&!t?.length)return;i={silent:!1,...i};let n=s("Installing dependencies.",{silent:i.silent})?.start(),o=await qr(r$1),a="";if(Yr(r$1)&&o==="npm")if(i.silent)a="force";else {n.stopAndPersist(),r.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=await rt([{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&&(a=s.flag);}n?.start(),await Hr(o,e,t,r$1.resolvedPaths.cwd,a),n?.succeed();}function Yr(e){let t=n(e.resolvedPaths.cwd,!1);if(!t?.dependencies?.react)return !1;let r=/^(?:\^|~)?19(?:\.\d+)*(?:-.*)?$/.test(t.dependencies.react),i=t.dependencies["react-day-picker"]?.startsWith("8");return r&&i}async function qr(e){return n(e.resolvedPaths.cwd,!1)?.dependencies?.expo?"expo":Se(e.resolvedPaths.cwd)}async function Hr(e,t,r,i,n){if(e==="npm")return Xr(t,r,i,n);if(e==="deno")return Qr(t,r,i);if(e==="expo")return Zr(t,r,i);t?.length&&await execa(e,["add",...t],{cwd:i}),r?.length&&await execa(e,["add","-D",...r],{cwd:i});}async function Xr(e,t,r,i){e.length&&await execa("npm",["install",...i?[`--${i}`]:[],...e],{cwd:r}),t.length&&await execa("npm",["install",...i?[`--${i}`]:[],"-D",...t],{cwd:r});}async function Qr(e,t,r){e?.length&&await execa("deno",["add",...e.map(i=>`npm:${i}`)],{cwd:r}),t?.length&&await execa("deno",["add","-D",...t.map(i=>`npm:${i}`)],{cwd:r});}async function Zr(e,t,r){e.length&&await execa("npx",["expo","install",...e],{cwd:r}),t.length&&await execa("npx",["expo","install","-- -D",...t],{cwd:r});}function Z(e){let t=b__default.basename(e);return /^\.env(\.|$)/.test(t)}function Re(e){let t=[".env.local",".env",".env.development.local",".env.development"];for(let r of t){let i=b__default.join(e,r);if(existsSync(i))return i}return null}function ne(e){let t=e.split(`
`),r={};for(let i of t){let n=i.trim();if(!n||n.startsWith("#"))continue;let o=n.indexOf("=");if(o===-1)continue;let a=n.substring(0,o).trim(),s=n.substring(o+1).trim();a&&(r[a]=s.replace(/^["']|["']$/g,""));}return r}function Ie(e,t){let r=ne(e),i=ne(t),n=[];for(let o of Object.keys(i))o in r||n.push(o);return n}function Pe(e,t){let r=ne(e),i=ne(t),n=e.trimEnd();n&&!n.endsWith(`
`)&&(n+=`
`);let o=[];for(let[a,s]of Object.entries(i))a in r||o.push(`${a}=${s}`);return o.length>0?(n&&(n+=`
`),n+=o.join(`
`),n+`
`):n&&!n.endsWith(`
`)?n+`
`:n}async function Xe(e,t,r$1){if(!e||Object.keys(e).length===0)return {envVarsAdded:[],envFileUpdated:null,envFileCreated:null};r$1={silent:!1,...r$1};let i=s("Adding environment variables.",{silent:r$1.silent})?.start(),n=t.resolvedPaths.cwd,o=b__default.join(n,".env.local"),a$1=Re(n);a$1&&(o=a$1);let s$1=existsSync(o),l=b__default.basename(o),c=Object.entries(e).map(([w,g])=>`${w}=${g}`).join(`
`),p=[],m=null,u=null;if(s$1){let w=await promises.readFile(o,"utf-8"),g=Pe(w,c);if(p=Ie(w,c),p.length>0){if(await promises.writeFile(o,g,"utf-8"),m=b__default.relative(n,o),i?.succeed(`Added the following variables to ${a.info(l)}:`),!r$1.silent)for(let h of p)r.log(` ${a.success("+")} ${h}`);}else i?.stop();}else if(await promises.writeFile(o,c+`
`,"utf-8"),u=b__default.relative(n,o),p=Object.keys(e),i?.succeed(`Added the following variables to ${a.info(l)}:`),!r$1.silent)for(let w of p)r.log(` ${a.success("+")} ${w}`);return !r$1.silent&&p.length>0&&r.break(),{envVarsAdded:p,envFileUpdated:m,envFileCreated:u}}var ke=async({sourceFile:e,config:t,baseColor:r})=>(t.tailwind?.cssVariables||!r?.inlineColors||e.getDescendantsOfKind(SyntaxKind.StringLiteral).forEach(i=>{let n=i.getText();if(n){let o=ni(n.replace(/"/g,""),r.inlineColors);i.replaceWithText(`"${o.trim()}"`);}}),e);function Qe(e){if(!e.includes("/")&&!e.includes(":"))return [null,e,null];let t=[],[r,i]=e.split("/");if(!r.includes(":"))return [null,r,i];let n=r.split(":"),o=n.pop(),a=n.join(":");return t.push(a??null,o??null,i??null),t}var ii=["bg-","text-","border-","ring-offset-","ring-"];function ni(e,t){e.includes(" border ")&&(e=e.replace(" border "," border border-border "));let r=e.split(" "),i=new Set,n=new Set;for(let o of r){let[a,s,l]=Qe(o),c=ii.find(m=>s?.startsWith(m));if(!c){i.has(o)||i.add(o);continue}let p=s?.replace(c,"");if(p&&p in t.light){i.add([a,`${c}${t.light[p]}`].filter(Boolean).join(":")+(l?`/${l}`:"")),n.add(["dark",a,`${c}${t.dark[p]}`].filter(Boolean).join(":")+(l?`/${l}`:""));continue}i.has(o)||i.add(o);}return [...Array.from(i),...Array.from(n)].join(" ").trim()}var D={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"}};var Jt="lucide",Ee=async({sourceFile:e,config:t})=>{if(!t.iconLibrary||!(t.iconLibrary in D))return e;let r=await R(),i=Jt,n=t.iconLibrary;if(i===n)return e;let o=[];for(let a of e.getImportDeclarations()??[])if(a.getModuleSpecifier()?.getText()===`"${D[Jt].import}"`){for(let s of a.getNamedImports()??[]){let l=s.getName(),c=r[l]?.[n];!c||o.includes(c)||(o.push(c),s.remove(),e.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement).filter(p=>p.getTagNameNode()?.getText()===l).forEach(p=>p.getTagNameNode()?.replaceWithText(c)));}a.getNamedImports()?.length===0&&a.remove();}if(o.length>0){let a=e.addImportDeclaration({moduleSpecifier:D[n]?.import,namedImports:o.map(s=>({name:s}))});si(e)||a.replaceWithText(a.getText().replace(";",""));}return e};function si(e){return e.getImportDeclarations()?.[0]?.getText().endsWith(";")??!1}var je=async({sourceFile:e,config:t,isRemote:r})=>{let n=`@${t.aliases?.utils?.split("/")[0]?.slice(1)}/lib/utils`,o=e.getImportDeclarations();if(![".tsx",".ts",".jsx",".js"].includes(e.getExtension()))return e;for(let a of o){let s=ai(a.getModuleSpecifierValue(),t,r);a.setModuleSpecifier(s),(n===s||s==="@/lib/utils")&&a.getNamedImports().find(p=>p.getName()==="cn")&&a.setModuleSpecifier(n===s?s.replace(n,t.aliases.utils):t.aliases.utils);}return e};function ai(e,t,r=!1){if(!e.startsWith("@/")&&!r)return e;if(r&&e.startsWith("@/")&&(e=e.replace(/^@\//,"@/registry/new-york/")),!e.startsWith("@/registry/")){let i=t.aliases.components.split("/")[0];return e.replace(/^@\//,`${i}/`)}return e.match(/^@\/registry\/(.+)\/ui/)?e.replace(/^@\/registry\/(.+)\/ui/,t.aliases.ui??`${t.aliases.components}/ui`):t.aliases.components&&e.match(/^@\/registry\/(.+)\/components/)?e.replace(/^@\/registry\/(.+)\/components/,t.aliases.components):t.aliases.lib&&e.match(/^@\/registry\/(.+)\/lib/)?e.replace(/^@\/registry\/(.+)\/lib/,t.aliases.lib):t.aliases.hooks&&e.match(/^@\/registry\/(.+)\/hooks/)?e.replace(/^@\/registry\/(.+)\/hooks/,t.aliases.hooks):e.replace(/^@\/registry\/[^/]+/,t.aliases.components)}var pi={sourceType:"module",allowImportExportEverywhere:!0,allowReturnOutsideFunction:!0,startLine:1,tokens:!0,plugins:["asyncGenerators","bigInt","classPrivateMethods","classPrivateProperties","classProperties","classStaticBlock","decimal","decorators-legacy","doExpressions","dynamicImport","exportDefaultFrom","exportNamespaceFrom","functionBind","functionSent","importAssertions","importMeta","nullishCoalescingOperator","numericSeparator","objectRestSpread","optionalCatchBinding","optionalChaining",["pipelineOperator",{proposal:"minimal"}],["recordAndTuple",{syntaxType:"hash"}],"throwExpressions","topLevelAwait","v8intrinsic","typescript","jsx"]},Yt=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let i=$e.parse(r,{parser:{parse:o=>parse(o,pi)}}),n=transformFromAstSync(i,r,{cloneInputAst:!1,code:!1,ast:!0,plugins:[fi],configFile:!1});if(!n||!n.ast)throw new Error("Failed to transform JSX");return $e.print(n.ast).code};var di=/^["']use client["']$/g,Te=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(SyntaxKind.ExpressionStatement);return r&&di.test(r.getText())&&r.remove(),e};var Oe=async({sourceFile:e,config:t})=>{if(!t.tailwind?.prefix)return e;let r=await q(t);return e.getDescendantsOfKind(SyntaxKind.CallExpression).filter(i=>i.getExpression().getText()==="cva").forEach(i=>{if(i.getArguments()[0]?.isKind(SyntaxKind.StringLiteral)){let n=i.getArguments()[0];n&&n.replaceWithText(`"${U(n.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);}i.getArguments()[1]?.isKind(SyntaxKind.ObjectLiteralExpression)&&i.getArguments()[1]?.getDescendantsOfKind(SyntaxKind.PropertyAssignment).find(n=>n.getName()==="variants")?.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach(n=>{n.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach(o=>{let a=o.getInitializerIfKind(SyntaxKind.StringLiteral);a&&a?.replaceWithText(`"${U(a.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);});});}),e.getDescendantsOfKind(SyntaxKind.JsxAttribute).forEach(i=>{if(i.getName()==="className"){if(i.getInitializer()?.isKind(SyntaxKind.StringLiteral)){let n=i.getInitializer();n&&n.replaceWithText(`"${U(n.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);}if(i.getInitializer()?.isKind(SyntaxKind.JsxExpression)){let n=i.getInitializer()?.getDescendantsOfKind(SyntaxKind.CallExpression).find(o=>o.getExpression().getText()==="cn");n&&n.getArguments().forEach(o=>{(o.isKind(SyntaxKind.ConditionalExpression)||o.isKind(SyntaxKind.BinaryExpression))&&o.getChildrenOfKind(SyntaxKind.StringLiteral).forEach(a=>{a.replaceWithText(`"${U(a.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);}),o.isKind(SyntaxKind.StringLiteral)&&o.replaceWithText(`"${U(o.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);});}}i.getName()==="classNames"&&i.getInitializer()?.isKind(SyntaxKind.JsxExpression)&&i.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach(n=>{if(n.getInitializer()?.isKind(SyntaxKind.CallExpression)){let o=n.getInitializerIfKind(SyntaxKind.CallExpression);o&&o.getArguments().forEach(a=>{a.isKind(SyntaxKind.ConditionalExpression)&&a.getChildrenOfKind(SyntaxKind.StringLiteral).forEach(s=>{s.replaceWithText(`"${U(s.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);}),a.isKind(SyntaxKind.StringLiteral)&&a.replaceWithText(`"${U(a.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);});}if(n.getInitializer()?.isKind(SyntaxKind.StringLiteral)&&n.getName()!=="variant"){let o=n.getInitializer();o&&o.replaceWithText(`"${U(o.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);}});}),e};function U(e,t="",r){return r==="v3"?e.split(" ").map(i=>{let[n,o,a]=Qe(i);return n?a?`${n}:${t}${o}/${a}`:`${n}:${t}${o}`:a?`${t}${o}/${a}`:`${t}${o}`}).join(" "):e.split(" ").map(i=>i.indexOf(`${t}:`)===0?i:`${t}:${i.trim()}`).join(" ")}var wi=new Project({compilerOptions:{}});async function xi(e){let t=await promises.mkdtemp(b__default.join(tmpdir(),"shadcn-"));return b__default.join(t,e)}async function Ne(e,t=[je,Te,ke,Oe,Ee]){let r=await xi(e.filename),i=wi.createSourceFile(r,e.raw,{scriptKind:ScriptKind.TSX});for(let n of t)await n({sourceFile:i,...e});return e.transformJsx?await Yt({sourceFile:i,...e}):i.getText()}async function Ze(e,t,r$1){if(!e?.length)return {filesCreated:[],filesUpdated:[],filesSkipped:[]};r$1={overwrite:!1,force:!1,silent:!1,isRemote:!1,...r$1};let i=s("Updating files.",{silent:r$1.silent})?.start(),[n,o$1]=await Promise.all([o(t.resolvedPaths.cwd),t.tailwind.baseColor?U$1(t.tailwind.baseColor):Promise.resolve(void 0)]),a$1=[],s$1=[],l=[],c=[],p=null;for(let g of e){if(!g.content)continue;let h=Pi(g,t,{isSrcDir:n?.isSrcDir,framework:n?.framework.name,commonRoot:ki(e.map(I=>I.path),g.path)});if(!h)continue;let y=basename(g.path),v=b__default.dirname(h);if(t.tsx||(h=h.replace(/\.tsx?$/,I=>I===".tsx"?".jsx":".js")),Z(h)&&!existsSync(h)){let I=Re(v);I&&(h=I);}let j=existsSync(h),S=Z(h)?g.content:await Ne({filename:g.path,raw:g.content,config:t,baseColor:o$1,transformJsx:!t.tsx,isRemote:r$1.isRemote},[je,Te,ke,Oe,Ee]);if(j&&!Z(h)){let I=await promises.readFile(h,"utf-8"),[E,_]=await Promise.all([Ht(I),Ht(S)]);if(E===_){l.push(b__default.relative(t.resolvedPaths.cwd,h));continue}}if(j&&!r$1.overwrite&&!Z(h)){i.stop(),r$1.rootSpinner&&r$1.rootSpinner.stop();let{overwrite:I}=await rt({type:"confirm",name:"overwrite",message:`The file ${a.info(y)} already exists. Would you like to overwrite?`,initial:!1});if(!I){l.push(b__default.relative(t.resolvedPaths.cwd,h)),r$1.rootSpinner&&r$1.rootSpinner.start();continue}i?.start(),r$1.rootSpinner&&r$1.rootSpinner.start();}if(existsSync(v)||await promises.mkdir(v,{recursive:!0}),Z(h)&&j){let I=await promises.readFile(h,"utf-8"),E=Pe(I,S);if(c=Ie(I,S),p=b__default.relative(t.resolvedPaths.cwd,h),!c.length){l.push(b__default.relative(t.resolvedPaths.cwd,h));continue}await promises.writeFile(h,E,"utf-8"),s$1.push(b__default.relative(t.resolvedPaths.cwd,h));continue}await promises.writeFile(h,S,"utf-8"),j?s$1.push(b__default.relative(t.resolvedPaths.cwd,h)):(a$1.push(b__default.relative(t.resolvedPaths.cwd,h)),Z(h)&&(c=Object.keys(ne(S)),p=b__default.relative(t.resolvedPaths.cwd,h)));}let m=[...a$1,...s$1,...l],u=await $i(m,t);if(s$1.push(...u),s$1=s$1.filter(g=>!a$1.includes(g)),!(a$1.length||s$1.length)&&!l.length&&i?.info("No files updated."),a$1=Array.from(new Set(a$1)),s$1=Array.from(new Set(s$1)),l=Array.from(new Set(l)),a$1.length){if(i?.succeed(`Created ${a$1.length} ${a$1.length===1?"file":"files"}:`),!r$1.silent)for(let g of a$1)r.log(` - ${g}`);}else i?.stop();if(s$1.length&&(s(`Updated ${s$1.length} ${s$1.length===1?"file":"files"}:`,{silent:r$1.silent})?.info(),!r$1.silent))for(let g of s$1)r.log(` - ${g}`);if(l.length&&(s(`Skipped ${l.length} ${s$1.length===1?"file":"files"}: (files might be identical, use --overwrite to overwrite)`,{silent:r$1.silent})?.info(),!r$1.silent))for(let g of l)r.log(` - ${g}`);if(c.length&&p&&(s(`Added the following variables to ${a.info(p)}:`)?.info(),!r$1.silent))for(let g of c)r.log(` ${a.success("+")} ${g}`);return r$1.silent||r.break(),{filesCreated:a$1,filesUpdated:s$1,filesSkipped:l}}function Pi(e,t,r){if(e.target){if(e.target.startsWith("~/"))return b__default.join(t.resolvedPaths.cwd,e.target.replace("~/",""));let o=e.target;return e.type==="registry:page"&&(o=ji(o,r.framework),!o)?"":r.isSrcDir?b__default.join(t.resolvedPaths.cwd,"src",o.replace("src/","")):b__default.join(t.resolvedPaths.cwd,o.replace("src/",""))}let i=Ci(e,t),n=Ei(e.path,i);return b__default.join(i,n)}function Ci(e,t){return e.type==="registry:ui"?t.resolvedPaths.ui:e.type==="registry:lib"?t.resolvedPaths.lib:e.type==="registry:block"||e.type==="registry:component"?t.resolvedPaths.components:e.type==="registry:hook"?t.resolvedPaths.hooks:t.resolvedPaths.components}function ki(e,t){let r=e.map(a=>a.replace(/^\//,"")),i=t.replace(/^\//,""),n=i.split("/").slice(0,-1).join("/");if(!n)return "";let o=n.split("/");for(let a=o.length;a>0;a--){let s=o.slice(0,a).join("/");if(r.some(c=>c!==i&&c.startsWith(s+"/")))return "/"+s}return "/"+n}function Ei(e,t){let r=e.replace(/^\/|\/$/g,""),i=t.replace(/^\/|\/$/g,""),n=r.split("/"),o=i.split("/"),a=o[o.length-1],s=n.findIndex(l=>l===a);return s===-1?n[n.length-1]:n.slice(s+1).join("/")}async function Ht(e){return e.replace(/\r\n/g,`
`).trim()}function ji(e,t){if(!t)return "";if(t==="next-app")return e;if(t==="next-pages"){let r=e.replace(/^app\//,"pages/");return r=r.replace(/\/page(\.[jt]sx?)$/,"$1"),r}if(t==="react-router"){let r=e.replace(/^app\//,"app/routes/");return r=r.replace(/\/page(\.[jt]sx?)$/,"$1"),r}if(t==="laravel"){let r=e.replace(/^app\//,"resources/js/pages/");return r=r.replace(/\/page(\.[jt]sx?)$/,"$1"),r}return ""}async function $i(e,t){let r=new Project({compilerOptions:{}}),i=await o(t.resolvedPaths.cwd),n=loadConfig(t.resolvedPaths.cwd),o$1=[];if(!i||n.resultType==="failed")return [];for(let a of e){let s=b__default.resolve(t.resolvedPaths.cwd,a);if(!existsSync(s))continue;let l=await promises.readFile(s,"utf-8"),c=await promises.mkdtemp(b__default.join(tmpdir(),"shadcn-")),p=r.createSourceFile(b__default.join(c,basename(s)),l,{scriptKind:ScriptKind.TSX});if(![".tsx",".ts",".jsx",".js"].includes(p.getExtension()))continue;let m=p.getImportDeclarations();for(let u of m){let w=u.getModuleSpecifierValue();if(i?.aliasPrefix&&!w.startsWith(`${i.aliasPrefix}/`))continue;let g=await b$1(w,n);if(!g)continue;let h=Ti(g,e,t);if(!h)continue;let y=Oi(h,t,i);!y||y===w||(u.setModuleSpecifier(y),await promises.writeFile(s,p.getFullText(),"utf-8"),o$1.push(a));}}return o$1}function Ti(e,t,r,i=[".tsx",".ts",".js",".jsx",".css"]){let n=b__default.normalize(r.resolvedPaths.cwd),o=t.map(y=>y.split(b__default.sep).join(b__default.posix.sep)),a=new Set(o),s=b__default.extname(e),l=s!=="",c=l?e.slice(0,-s.length):e,m=b__default.relative(n,c).split(b__default.sep).join(b__default.posix.sep),u=l?[s]:i,w=new Set;for(let y of u){let v=c+y,j=b__default.posix.normalize(b__default.relative(n,v));(a.has(j)||existsSync(v))&&w.add(j);let S=b__default.join(c,`index${y}`),I=b__default.posix.normalize(b__default.relative(n,S));(a.has(I)||existsSync(S))&&w.add(I);}let g=b__default.basename(c);for(let y of o)u.some(v=>y.endsWith(`/${g}${v}`))&&w.add(y);return w.size===0?null:Array.from(w).sort((y,v)=>{let j=b__default.posix.extname(y),S=b__default.posix.extname(v),I=u.indexOf(j)-u.indexOf(S);if(I!==0)return I;let E=m&&y.startsWith(m)?-1:1,_=m&&v.startsWith(m)?-1:1;return E-_})[0]}function Oi(e,t,r){let i=b__default.normalize(b__default.join(t.resolvedPaths.cwd,e)),n=Object.entries(t.resolvedPaths).filter(([,g])=>g&&i.startsWith(b__default.normalize(g+b__default.sep))).sort((g,h)=>h[1].length-g[1].length);if(n.length===0)return null;let[o,a]=n[0],s=b__default.relative(a,i);s=s.split(b__default.sep).join("/");let l=b__default.posix.extname(s),p=[".ts",".tsx",".js",".jsx"].includes(l)?"":l,m=s.slice(0,s.length-l.length);m.endsWith("/index")&&(m=m.slice(0,-6));let u=o==="cwd"?r.aliasPrefix:t.aliases[o];if(!u)return null;let w=m===""?"":`/${m}`;return w=w.replace("/src",""),`${u}${w}${p}`}async function ce(e,t,r){r={overwrite:!1,silent:!1,isNewProject:!1,style:"index",...r};let i=await j(t);return i&&i.ui&&i.ui.resolvedPaths.cwd!==t.resolvedPaths.cwd?await Fi(e,t,i,{...r,isRemote:e?.length===1&&!!e[0].match(/\/chat\/b\//)}):await Ni(e,t,r)}async function Ni(e,t,r$1){let i=s("Checking registry.",{silent:r$1.silent})?.start(),n=await _(e,t);if(!n)return i?.fail(),x(new Error("Failed to fetch components from registry."));try{er(n.files??[],t.resolvedPaths.cwd);}catch(s){return i?.fail(),x(s)}i?.succeed();let o=await q(t);await y(n.tailwind?.config,t,{silent:r$1.silent,tailwindVersion:o});let a=await Zt(e,t);await qe(n.cssVars,t,{cleanupDefaultNextStyles:r$1.isNewProject,silent:r$1.silent,tailwindVersion:o,tailwindConfig:n.tailwind?.config,overwriteCssVars:a,initIndex:r$1.style?r$1.style==="index":!1}),await Ye(n.css,t,{silent:r$1.silent}),await Xe(n.envVars,t,{silent:r$1.silent}),await Q(n.dependencies,n.devDependencies,t,{silent:r$1.silent}),await Ze(n.files,t,{overwrite:r$1.overwrite,silent:r$1.silent}),n.docs&&r.info(n.docs);}async function Fi(e,t,r$1,i){let n=s("Checking registry.",{silent:i.silent})?.start(),o=await ba(e,t),a=await Y(o),s$1=z.array(H).parse(a);if(!s$1)return n?.fail(),x(new Error("Failed to fetch components from registry."));n?.succeed();let l$1=da(s$1),c=ca(),p=[],m=[],u=[],w=s$1.flatMap(y=>y.files??[]);try{er(w,t.resolvedPaths.cwd);}catch(y){return x(y)}let g=s("Installing components.")?.start();for(let y$1 of s$1){let v=c.get(y$1.type),j=l$1.get(y$1.name);if(!v)continue;let S=y$1.type==="registry:ui"||j?.type==="registry:ui"?r$1.ui:t,I=await q(S),E=l(t.resolvedPaths.cwd,S.resolvedPaths.ui),_=await k(E,S.resolvedPaths.cwd)??S.resolvedPaths.cwd;if(y$1.tailwind?.config&&(await y(y$1.tailwind?.config,S,{silent:!0,tailwindVersion:I}),m.push(b__default.relative(E,S.resolvedPaths.tailwindConfig))),y$1.cssVars){let J=await Zt(e,t);await qe(y$1.cssVars,S,{silent:!0,tailwindVersion:I,tailwindConfig:y$1.tailwind?.config,overwriteCssVars:J}),m.push(b__default.relative(E,S.resolvedPaths.tailwindCss));}y$1.css&&(await Ye(y$1.css,S,{silent:!0}),m.push(b__default.relative(E,S.resolvedPaths.tailwindCss))),y$1.envVars&&await Xe(y$1.envVars,S,{silent:!0}),await Q(y$1.dependencies,y$1.devDependencies,S,{silent:!0});let ae=await Ze(y$1.files,S,{overwrite:i.overwrite,silent:!0,rootSpinner:g,isRemote:i.isRemote});p.push(...ae.filesCreated.map(J=>b__default.relative(E,b__default.join(_,J)))),m.push(...ae.filesUpdated.map(J=>b__default.relative(E,b__default.join(_,J)))),u.push(...ae.filesSkipped.map(J=>b__default.relative(E,b__default.join(_,J))));}if(g?.succeed(),p.sort(),m.sort(),u.sort(),!(p.length||m.length)&&!u.length&&s("No files updated.",{silent:i.silent})?.info(),p.length){s(`Created ${p.length} ${p.length===1?"file":"files"}:`,{silent:i.silent})?.succeed();for(let y of p)r.log(` - ${y}`);}if(m.length){s(`Updated ${m.length} ${m.length===1?"file":"files"}:`,{silent:i.silent})?.info();for(let y of m)r.log(` - ${y}`);}if(u.length){s(`Skipped ${u.length} ${m.length===1?"file":"files"}: (use --overwrite to overwrite)`,{silent:i.silent})?.info();for(let y of u)r.log(` - ${y}`);}}async function Zt(e,t){let r=await Promise.all(e.map(n=>S(n,t.style)));return z.array(H).parse(r).some(n=>n.type==="registry:theme"||n.type==="registry:style")}function er(e,t){for(let r of e)if(r?.target&&!Vt(r.target,t))throw new Error(`We found an unsafe file path "${r.target} in the registry item. Installation aborted.`)}var _i="https://codeload.github.com/shadcn-ui/ui/tar.gz/main",ee={next:"next","next-monorepo":"next-monorepo"};async function Ae(e){e={srcDir:!1,...e};let t=e.template&&ee[e.template]?e.template:"next",r$1=t===ee.next?"my-app":"my-monorepo",i="latest",n=e.components?.length===1&&!!e.components[0].match(/\/chat\/b\//);if(e.components&&n)try{let[s]=await Y(e.components),{meta:l}=z.object({meta:z.object({nextVersion:z.string()})}).parse(s);i=l.nextVersion,t=ee.next;}catch(s){r.break(),x(s);}if(!e.force){let{type:s,name:l}=await rt([{type:e.template||n?null:"select",name:"type",message:`The path ${a.info(e.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$1,format:c=>c.trim(),validate:c=>c.length>128?"Name should be less than 128 characters.":!0}]);t=s??t,r$1=l;}let o=await Se(e.cwd,{withFallback:!0}),a$1=`${e.cwd}/${r$1}`;try{await te.access(e.cwd,te.constants.W_OK);}catch{r.break(),r.error(`The path ${a.info(e.cwd)} is not writable.`),r.error(`It is likely you do not have write permissions for this folder or the path ${a.info(e.cwd)} does not exist.`),r.break(),process.exit(1);}return te.existsSync(b__default.resolve(e.cwd,r$1,"package.json"))&&(r.break(),r.error(`A project with the name ${a.info(r$1)} already exists.`),r.error("Please choose a different name and try again."),r.break(),process.exit(1)),t===ee.next&&await Li(a$1,{version:i,cwd:e.cwd,packageManager:o,srcDir:!!e.srcDir}),t===ee["next-monorepo"]&&await Vi(a$1,{packageManager:o}),{projectPath:a$1,projectName:r$1,template:t}}async function Li(e,t){let r$1=s("Creating a new Next.js project. This may take a few minutes.").start(),i=["--tailwind","--eslint","--typescript","--app",t.srcDir?"--src-dir":"--no-src-dir","--no-import-alias",`--use-${t.packageManager}`];(t.version.startsWith("15")||t.version.startsWith("latest")||t.version.startsWith("canary"))&&i.push("--turbopack");try{await execa("npx",[`create-next-app@${t.version}`,e,"--silent",...i],{cwd:t.cwd});}catch{r.break(),r.error("Something went wrong creating a new Next.js project. Please try again."),process.exit(1);}r$1?.succeed("Creating a new Next.js project.");}async function Vi(e,t){let r=s("Creating a new Next.js monorepo. This may take a few minutes.").start();try{let i=b__default.join(Ai.tmpdir(),`shadcn-template-${Date.now()}`);await te.ensureDir(i);let n=await fetch(_i);if(!n.ok)throw new Error(`Failed to download template: ${n.statusText}`);let o=b__default.resolve(i,"template.tar.gz");await te.writeFile(o,Buffer.from(await n.arrayBuffer())),await execa("tar",["-xzf",o,"-C",i,"--strip-components=2","ui-main/templates/monorepo-next"]);let a=b__default.resolve(i,"monorepo-next");await te.move(a,e),await te.remove(i),await execa(t.packageManager,["install"],{cwd:e});let s=process.cwd();await execa("git",["--version"],{cwd:e}),await execa("git",["init"],{cwd:e}),await execa("git",["add","-A"],{cwd:e}),await execa("git",["commit","-m","Initial commit"],{cwd:e}),await execa("cd",[s]),r?.succeed("Creating a new Next.js monorepo.");}catch(i){r?.fail("Something went wrong creating a new Next.js monorepo."),x(i);}}async function rr(e,t,r){if(!e)return;r={silent:!1,...r};let i=b__default.relative(t.resolvedPaths.cwd,t.resolvedPaths.tailwindConfig),n=s(`Updating ${a.info(i)}`,{silent:r.silent}).start(),o=await promises.readFile(t.resolvedPaths.tailwindConfig,"utf8"),a$1=await zi(o,e,t);await promises.writeFile(t.resolvedPaths.tailwindConfig,a$1,"utf8"),n?.succeed();}async function zi(e,t,r){let i=await z$1(e,r),n=i.getDescendantsOfKind(SyntaxKind.ObjectLiteralExpression).find(o=>o.getProperties().some(a=>a.isKind(SyntaxKind.PropertyAssignment)&&a.getName()==="content"));return n?(Wi(n,t),i.getFullText()):e}async function Wi(e,t){let r=A$1(e),i=e.getProperty("content");if(!i){let n={name:"content",initializer:`[${r}${t.join(`${r}, ${r}`)}${r}]`};return e.addPropertyAssignment(n),e}if(i.isKind(SyntaxKind.PropertyAssignment)){let n=i.getInitializer();if(n?.isKind(SyntaxKind.ArrayLiteralExpression))for(let o of t){let a=`${r}${o}${r}`;n.getElements().map(s=>s.getText()).includes(a)||n.addElement(a);}return e}return e}var Ki=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(e=>e?ee[e]:!0,{message:"Invalid template. Please use 'next' or 'next-monorepo'."}),baseColor:z.string().optional().refine(e=>e?O.find(t=>t.name===e):!0,{message:`Invalid base color. Please use '${O.map(e=>e.name).join("', '")}'`}),style:z.string()}),ir=new Command().name("init").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, next-monorepo)").option("-b, --base-color <base-color>","the base color to use. (neutral, gray, zinc, stone, slate)",void 0).option("-y, --yes","skip confirmation prompt.",!0).option("-d, --defaults,","use default configuration.",!1).option("-f, --force","force overwrite of existing configuration.",!1).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-s, --silent","mute output.",!1).option("--src-dir","use the src directory when creating a new project.",!1).option("--no-src-dir","do not use the src directory when creating a new project.").option("--css-variables","use css variables for theming.",!0).option("--no-css-variables","do not use css variables for theming.").action(async(e,t)=>{try{let r$1=Ki.parse({cwd:b__default.resolve(t.cwd),isNewProject:!1,components:e,style:"index",...t});if(e.length>0&&(u(e[0])||v(e[0]))){let i=await S(e[0],"");i?.type==="registry:style"&&(r$1.baseColor="neutral",r$1.style=i.extends??"index");}await _e(r$1),r.log(`${a.success("Success!")} Project initialization completed.
You may now add components.`),r.break();}catch(r$1){r.break(),x(r$1);}});async function _e(e){let t,r;if(e.skipPreflight)t=await o(e.cwd);else {let c=await Lt(e);if(c.errors[F]){let{projectPath:p,template:m}=await Ae(e);p||process.exit(1),e.cwd=p,e.isNewProject=!0,r=m;}t=c.projectInfo;}if(r==="next-monorepo")return e.cwd=b__default.resolve(e.cwd,"apps/web"),await h(e.cwd);let i$1=await p(e.cwd,t),n=i$1?await Ji(i$1,e):await Gi(await h(e.cwd));if(!e.yes){let{proceed:c}=await rt({type:"confirm",name:"proceed",message:`Write configuration to ${a.info("components.json")}. Proceed?`,initial:!0});c||process.exit(0);}let o$1=s("Writing components.json.").start(),a$1=b__default.resolve(e.cwd,"components.json");await promises.writeFile(a$1,JSON.stringify(n,null,2),"utf8"),o$1.succeed();let s$1=await i(e.cwd,n),l=[...e.style==="none"?[]:[e.style],...e.components??[]];return await ce(l,s$1,{overwrite:!0,silent:e.silent,style:e.style,isNewProject:e.isNewProject||t?.framework.name==="next-app"}),e.isNewProject&&e.srcDir&&await rr(["./src/**/*.{js,ts,jsx,tsx,mdx}"],s$1,{silent:e.silent}),s$1}async function Gi(e$1=null){let[t,r$1]=await Promise.all([Q$1(),T()]);r.info("");let i=await rt([{type:"toggle",name:"typescript",message:`Would you like to use ${a.info("TypeScript")} (recommended)?`,initial:e$1?.tsx??!0,active:"yes",inactive:"no"},{type:"select",name:"style",message:`Which ${a.info("style")} would you like to use?`,choices:t.map(n=>({title:n.label,value:n.name}))},{type:"select",name:"tailwindBaseColor",message:`Which color would you like to use as the ${a.info("base color")}?`,choices:r$1.map(n=>({title:n.label,value:n.name}))},{type:"text",name:"tailwindCss",message:`Where is your ${a.info("global CSS")} file?`,initial:e$1?.tailwind.css??e},{type:"toggle",name:"tailwindCssVariables",message:`Would you like to use ${a.info("CSS variables")} for theming?`,initial:e$1?.tailwind.cssVariables??!0,active:"yes",inactive:"no"},{type:"text",name:"tailwindPrefix",message:`Are you using a custom ${a.info("tailwind prefix eg. tw-")}? (Leave blank if not)`,initial:""},{type:"text",name:"tailwindConfig",message:`Where is your ${a.info("tailwind.config.js")} located?`,initial:e$1?.tailwind.config??f},{type:"text",name:"components",message:`Configure the import alias for ${a.info("components")}:`,initial:e$1?.aliases.components??c},{type:"text",name:"utils",message:`Configure the import alias for ${a.info("utils")}:`,initial:e$1?.aliases.utils??d},{type:"toggle",name:"rsc",message:`Are you using ${a.info("React Server Components")}?`,initial:e$1?.rsc??!0,active:"yes",inactive:"no"}]);return g.parse({$schema:"https://ui.shadcn.com/schema.json",style:i.style,tailwind:{config:i.tailwindConfig,css:i.tailwindCss,baseColor:i.tailwindBaseColor,cssVariables:i.tailwindCssVariables,prefix:i.tailwindPrefix},rsc:i.rsc,tsx:i.typescript,aliases:{utils:i.utils,components:i.components,lib:i.components.replace(/\/components$/,"lib"),hooks:i.components.replace(/\/components$/,"hooks")}})}async function Ji(e,t){let r=e.style,i=t.baseColor,n=e.tailwind.cssVariables;if(!t.defaults){let[o,a$1,s]=await Promise.all([Q$1(),T(),q(e)]),l=await rt([{type:s==="v4"?null:"select",name:"style",message:`Which ${a.info("style")} would you like to use?`,choices:o.map(c=>({title:c.name==="new-york"?"New York (Recommended)":c.label,value:c.name})),initial:0},{type:t.baseColor?null:"select",name:"tailwindBaseColor",message:`Which color would you like to use as the ${a.info("base color")}?`,choices:a$1.map(c=>({title:c.label,value:c.name}))}]);r=l.style??"new-york",i=l.tailwindBaseColor??i,n=t.cssVariables;}return g.parse({$schema:e?.$schema,style:r,tailwind:{...e?.tailwind,baseCo