shadcn 0.0.0-beta.dc293dd → 0.0.0-beta.f29aebd
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/index.js +20 -16
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# shadcn
|
|
1
|
+
# shadcn
|
|
2
2
|
|
|
3
3
|
A CLI for adding components to your project.
|
|
4
4
|
|
|
@@ -9,7 +9,7 @@ Use the `init` command to initialize dependencies for a new project.
|
|
|
9
9
|
The `init` command installs dependencies, adds the `cn` util, configures `tailwind.config.js`, and CSS variables for the project.
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
npx shadcn
|
|
12
|
+
npx shadcn init
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
## add
|
|
@@ -19,19 +19,19 @@ Use the `add` command to add components to your project.
|
|
|
19
19
|
The `add` command adds a component to your project and installs all required dependencies.
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
|
-
npx shadcn
|
|
22
|
+
npx shadcn add [component]
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
### Example
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
npx shadcn
|
|
28
|
+
npx shadcn add alert-dialog
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
You can also run the command without any arguments to view a list of all available components:
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
npx shadcn
|
|
34
|
+
npx shadcn add
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
## Documentation
|
package/dist/index.js
CHANGED
|
@@ -1,22 +1,26 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import
|
|
3
|
-
To start over, remove the ${
|
|
4
|
-
Visit ${
|
|
5
|
-
Once configured, you can use the cli to add components.`),
|
|
6
|
-
`),
|
|
7
|
-
`),
|
|
8
|
-
${c
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
import Kr from"path";import{promises as Ar}from"fs";import lt from"path";import je from"path";var T="1";var V="3";var se="5",oe="6",ve="7";import ae from"path";var v={"next-app":{name:"next-app",label:"Next.js",links:{installation:"https://ui.shadcn.com/docs/installation/next",tailwind:"https://tailwindcss.com/docs/guides/nextjs"}},"next-pages":{name:"next-pages",label:"Next.js",links:{installation:"https://ui.shadcn.com/docs/installation/next",tailwind:"https://tailwindcss.com/docs/guides/nextjs"}},remix:{name:"remix",label:"Remix",links:{installation:"https://ui.shadcn.com/docs/installation/remix",tailwind:"https://tailwindcss.com/docs/guides/remix"}},vite:{name:"vite",label:"Vite",links:{installation:"https://ui.shadcn.com/docs/installation/vite",tailwind:"https://tailwindcss.com/docs/guides/vite"}},astro:{name:"astro",label:"Astro",links:{installation:"https://ui.shadcn.com/docs/installation/astro",tailwind:"https://tailwindcss.com/docs/guides/astro"}},laravel:{name:"laravel",label:"Laravel",links:{installation:"https://ui.shadcn.com/docs/installation/laravel",tailwind:"https://tailwindcss.com/docs/guides/laravel"}},gatsby:{name:"gatsby",label:"Gatsby",links:{installation:"https://ui.shadcn.com/docs/installation/gatsby",tailwind:"https://tailwindcss.com/docs/guides/gatsby"}},manual:{name:"manual",label:"Manual",links:{installation:"https://ui.shadcn.com/docs/installation/manual",tailwind:"https://tailwindcss.com/docs/installation"}}};import A from"path";import{cyan as xt,green as bt,red as St,yellow as Ct}from"kleur/colors";var c={error:St,warn:Ct,info:xt,success:bt};import{createMatchPath as Pt}from"tsconfig-paths";async function R(e,t){return Pt(t.absoluteBaseUrl,t.paths)(e,void 0,()=>!0,[".ts",".tsx"])}import{cosmiconfig as vt}from"cosmiconfig";import{loadConfig as Rt}from"tsconfig-paths";import{z as g}from"zod";var Re="@/components",Te="@/lib/utils",Ie="app/globals.css",ke="tailwind.config.js";var Tt=vt("components",{searchPlaces:["components.json"]}),F=g.object({$schema:g.string().optional(),style:g.string(),rsc:g.coerce.boolean().default(!1),tsx:g.coerce.boolean().default(!0),tailwind:g.object({config:g.string(),css:g.string(),baseColor:g.string(),cssVariables:g.boolean().default(!0),prefix:g.string().default("").optional()}),aliases:g.object({components:g.string(),utils:g.string(),ui:g.string().optional(),lib:g.string().optional(),hooks:g.string().optional()})}).strict(),It=F.extend({resolvedPaths:g.object({cwd:g.string(),tailwindConfig:g.string(),tailwindCss:g.string(),utils:g.string(),components:g.string(),lib:g.string(),hooks:g.string(),ui:g.string()})});async function I(e){let t=await kt(e);return t?await D(e,t):null}async function D(e,t){let r=await Rt(e);if(r.resultType==="failed")throw new Error(`Failed to load ${t.tsx?"tsconfig":"jsconfig"}.json. ${r.message??""}`.trim());return It.parse({...t,resolvedPaths:{cwd:e,tailwindConfig:A.resolve(e,t.tailwind.config),tailwindCss:A.resolve(e,t.tailwind.css),utils:await R(t.aliases.utils,r),components:await R(t.aliases.components,r),ui:t.aliases.ui?await R(t.aliases.ui,r):A.resolve(await R(t.aliases.components,r)??e,"ui"),lib:t.aliases.lib?await R(t.aliases.lib,r):A.resolve(await R(t.aliases.utils,r)??e,".."),hooks:t.aliases.hooks?await R(t.aliases.hooks,r):A.resolve(await R(t.aliases.components,r)??e,"..","hooks")}})}async function kt(e){try{let t=await Tt.search(e);return t?F.parse(t.config):null}catch{let r=`${e}/component.json`;throw new Error(`Invalid configuration found in ${c.info(r)}.`)}}import U from"fast-glob";import le from"fs-extra";import{loadConfig as Et}from"tsconfig-paths";var G=["**/node_modules/**",".next","public","dist","build"];async function j(e){let[t,r,i,n,s,o]=await Promise.all([U.glob("**/{next,vite,astro}.config.*|gatsby-config.*|composer.json",{cwd:e,deep:3,ignore:G}),le.pathExists(ae.resolve(e,"src")),Nt(e),$t(e),jt(e),Ot(e)]),l=await le.pathExists(ae.resolve(e,`${r?"src/":""}app`)),m={framework:v.manual,isSrcDir:r,isRSC:!1,isTsx:i,tailwindConfigFile:n,tailwindCssFile:s,aliasPrefix:o};return t.length?t.find(d=>d.startsWith("next.config."))?.length?(m.framework=l?v["next-app"]:v["next-pages"],m.isRSC=l,m):t.find(d=>d.startsWith("astro.config."))?.length?(m.framework=v.astro,m):t.find(d=>d.startsWith("gatsby-config."))?.length?(m.framework=v.gatsby,m):t.find(d=>d.startsWith("composer.json"))?.length?(m.framework=v.laravel,m):(t.find(d=>d.startsWith("vite.config."))?.length&&(m.framework=l?v.remix:v.vite),m):m}async function jt(e){let t=await U.glob(["**/*.css","**/*.scss"],{cwd:e,deep:5,ignore:G});if(!t.length)return null;for(let r of t)if((await le.readFile(ae.resolve(e,r),"utf8")).includes("@tailwind base"))return r;return null}async function $t(e){let t=await U.glob("tailwind.config.*",{cwd:e,deep:3,ignore:G});return t.length?t[0]:null}async function Ot(e){let t=await Et(e);if(t?.resultType==="failed"||!t?.paths)return null;for(let[r,i]of Object.entries(t.paths))if(i.includes("./*")||i.includes("./src/*")||i.includes("./app/*")||i.includes("./resources/js/*"))return r.at(0)??null;return null}async function Nt(e){return(await U.glob("tsconfig.*",{cwd:e,deep:1,ignore:G})).length>0}async function Ee(e,t=null){let[r,i]=await Promise.all([I(e),t?Promise.resolve(t):j(e)]);if(r)return r;if(!i||!i.tailwindConfigFile||!i.tailwindCssFile)return null;let n={$schema:"https://ui.shadcn.com/schema.json",rsc:i.isRSC,tsx:i.isTsx,style:"new-york",tailwind:{config:i.tailwindConfigFile,baseColor:"zinc",css:i.tailwindCssFile,cssVariables:!0,prefix:""},aliases:{components:`${i.aliasPrefix}/components`,ui:`${i.aliasPrefix}/components/ui`,hooks:`${i.aliasPrefix}/hooks`,lib:`${i.aliasPrefix}/lib`,utils:`${i.aliasPrefix}/lib/utils`}};return await D(e,n)}var a={error(...e){console.log(c.error(e.join(" ")))},warn(...e){console.log(c.warn(e.join(" ")))},info(...e){console.log(c.info(e.join(" ")))},success(...e){console.log(c.success(e.join(" ")))},log(...e){console.log(e.join(" "))},break(){console.log("")}};import At from"ora";function h(e,t){return At({text:e,isSilent:t?.silent})}import ce from"fs-extra";async function $e(e){let t={};if(!ce.existsSync(e.cwd)||!ce.existsSync(je.resolve(e.cwd,"package.json")))return t[T]=!0,{errors:t,projectInfo:null};let r=h("Preflight checks.",{silent:e.silent}).start();ce.existsSync(je.resolve(e.cwd,"components.json"))&&!e.force&&(r?.fail(),a.break(),a.error(`A ${c.info("components.json")} file already exists at ${c.info(e.cwd)}.
|
|
3
|
+
To start over, remove the ${c.info("components.json")} file and run ${c.info("init")} again.`),a.break(),process.exit(1)),r?.succeed();let i=h("Verifying framework.",{silent:e.silent}).start(),n=await j(e.cwd);(!n||n?.framework.name==="manual")&&(t[ve]=!0,i?.fail(),a.break(),n?.framework.links.installation&&a.error(`We could not detect a supported framework at ${c.info(e.cwd)}.
|
|
4
|
+
Visit ${c.info(n?.framework.links.installation)} to manually configure your project.
|
|
5
|
+
Once configured, you can use the cli to add components.`),a.break(),process.exit(1)),i?.succeed(`Verifying framework. Found ${c.info(n.framework.label)}.`);let s=h("Validating Tailwind CSS.",{silent:e.silent}).start();!n?.tailwindConfigFile||!n?.tailwindCssFile?(t[se]=!0,s?.fail()):s?.succeed();let o=h("Validating import alias.",{silent:e.silent}).start();return n?.aliasPrefix?o?.succeed():(t[oe]=!0,o?.fail()),Object.keys(t).length>0&&(t[se]&&(a.break(),a.error(`No Tailwind CSS configuration found at ${c.info(e.cwd)}.`),a.error("It is likely you do not have Tailwind CSS installed or have an invalid configuration."),a.error("Install Tailwind CSS then try again."),n?.framework.links.tailwind&&a.error(`Visit ${c.info(n?.framework.links.tailwind)} to get started.`)),t[oe]&&(a.break(),a.error("No import alias found in your tsconfig.json file."),n?.framework.links.installation&&a.error(`Visit ${c.info(n?.framework.links.installation)} to learn how to set an import alias.`)),a.break(),process.exit(1)),{errors:t,projectInfo:n}}import{z as Ft}from"zod";function x(e){if(a.error("Something went wrong. Please check the error below for more details."),a.error("If the problem persists, please open an issue on GitHub."),a.error(""),typeof e=="string"&&(a.error(e),a.break(),process.exit(1)),e instanceof Ft.ZodError){a.error("Validation failed:");for(let[t,r]of Object.entries(e.flatten().fieldErrors))a.error(`- ${c.info(t)}: ${r}`);a.break(),process.exit(1)}e instanceof Error&&(a.error(e.message),a.break(),process.exit(1)),a.break(),process.exit(1)}import Yt from"path";import{z as p}from"zod";var Oe=p.enum(["registry:style","registry:lib","registry:example","registry:block","registry:component","registry:ui","registry:hook","registry:theme","registry:page"]),Ne=p.object({path:p.string(),content:p.string().optional(),type:Oe,target:p.string().optional()}),Dt=p.object({config:p.object({content:p.array(p.string()).optional(),theme:p.record(p.string(),p.any()).optional(),plugins:p.array(p.string()).optional()}).optional()}),Lt=p.object({light:p.record(p.string(),p.string()).optional(),dark:p.record(p.string(),p.string()).optional()}),N=p.object({name:p.string(),type:Oe,description:p.string().optional(),dependencies:p.array(p.string()).optional(),devDependencies:p.array(p.string()).optional(),registryDependencies:p.array(p.string()).optional(),files:p.array(Ne).optional(),tailwind:Dt.optional(),cssVars:Lt.optional(),meta:p.record(p.string(),p.any()).optional(),docs:p.string().optional()}),pe=p.array(N.extend({files:p.array(p.union([p.string(),Ne])).optional()})),Ae=p.array(p.object({name:p.string(),label:p.string()})),Fe=p.object({inlineColors:p.object({light:p.record(p.string(),p.string()),dark:p.record(p.string(),p.string())}),cssVars:p.object({light:p.record(p.string(),p.string()),dark:p.record(p.string(),p.string())}),inlineColorsTemplate:p.string(),cssVarsTemplate:p.string()}),De=N.pick({dependencies:!0,devDependencies:!0,files:!0,tailwind:!0,cssVars:!0,docs:!0});import{promises as me}from"fs";import{tmpdir as _t}from"os";import L from"path";import zt from"deepmerge";import Kt from"stringify-object";import{Project as Wt,QuoteKind as Vt,ScriptKind as Le,SyntaxKind as u}from"ts-morph";async function _e(e,t,r){if(!e)return;r={silent:!1,...r};let i=L.relative(t.resolvedPaths.cwd,t.resolvedPaths.tailwindConfig),n=h(`Updating ${c.info(i)}`,{silent:r.silent}).start(),s=await me.readFile(t.resolvedPaths.tailwindConfig,"utf8"),o=await Mt(s,e,t);await me.writeFile(t.resolvedPaths.tailwindConfig,o,"utf8"),n?.succeed()}async function Mt(e,t,r){let i=await B(e,r),n=i.getDescendantsOfKind(u.ObjectLiteralExpression).find(o=>o.getProperties().some(l=>l.isKind(u.PropertyAssignment)&&l.getName()==="content"));if(!n)return e;let s=fe(n);return Ut(n,{name:"darkMode",value:"class"},{quoteChar:s}),t.plugins?.forEach(o=>{Bt(n,o)}),t.theme&&await Gt(n,t.theme),i.getFullText()}function Ut(e,t,{quoteChar:r}){let i=e.getProperty("darkMode");if(!i){let n={name:t.name,initializer:`[${r}${t.value}${r}]`};return t.name==="darkMode"?(e.insertPropertyAssignment(0,n),e):(e.addPropertyAssignment(n),e)}if(i.isKind(u.PropertyAssignment)){let n=i.getInitializer(),s=`${r}${t.value}${r}`;if(n?.isKind(u.StringLiteral)){let o=n.getText();return n.replaceWithText(`[${o}, ${s}]`),e}if(n?.isKind(u.ArrayLiteralExpression)){if(n.getElements().map(o=>o.getText()).includes(s))return e;n.addElement(s)}return e}return e}async function Gt(e,t){e.getProperty("theme")||e.addPropertyAssignment({name:"theme",initializer:"{}"}),ze(e);let i=(e.getPropertyOrThrow("theme")?.asKindOrThrow(u.PropertyAssignment)).getInitializer();if(i?.isKind(u.ObjectLiteralExpression)){let n=i.getText(),s=await Jt(n),o=zt(s,t),l=Kt(o).replace(/\'\"/g,"'").replace(/\"\'/g,"'").replace(/\'\[/g,"[").replace(/\]\'/g,"]").replace(/\'\\\'/g,"'").replace(/\\\'/g,"'").replace(/\\\'\'/g,"'").replace(/\'\'/g,"'");i.replaceWithText(l)}Ke(e)}function Bt(e,t){let r=e.getProperty("plugins");if(!r)return e.addPropertyAssignment({name:"plugins",initializer:`[${t}]`}),e;if(r.isKind(u.PropertyAssignment)){let i=r.getInitializer();if(i?.isKind(u.ArrayLiteralExpression)){if(i.getElements().map(n=>n.getText().replace(/["']/g,"")).includes(t.replace(/["']/g,"")))return e;i.addElement(t)}return e}return e}async function B(e,t){let r=await me.mkdtemp(L.join(_t(),"shadcn-")),i=t?.resolvedPaths?.tailwindConfig||"tailwind.config.ts",n=L.join(r,`shadcn-${L.basename(i)}`);return new Wt({compilerOptions:{}}).createSourceFile(n,e,{scriptKind:L.extname(i)===".ts"?Le.TS:Le.JS})}function fe(e){return e.getFirstDescendantByKind(u.StringLiteral)?.getQuoteKind()===Vt.Single?"'":'"'}function ze(e){let t=e.getProperties();for(let r=0;r<t.length;r++){let i=t[r];if(i.isKind(u.SpreadAssignment)){let n=i.asKindOrThrow(u.SpreadAssignment),s=n.getExpression().getText();e.insertPropertyAssignment(r,{name:`___${s.replace(/^\.\.\./,"")}`,initializer:`"...${s.replace(/^\.\.\./,"")}"`}),n.remove()}else if(i.isKind(u.PropertyAssignment)){let s=i.asKindOrThrow(u.PropertyAssignment).getInitializer();s&&s.isKind(u.ObjectLiteralExpression)&&ze(s.asKindOrThrow(u.ObjectLiteralExpression))}}}function Ke(e){let t=e.getProperties();for(let r=0;r<t.length;r++){let i=t[r];if(i.isKind(u.PropertyAssignment)){let n=i,s=n.getInitializer();if(s?.isKind(u.StringLiteral)){let o=s.getLiteralValue();o.startsWith("...")&&(e.insertSpreadAssignment(r,{expression:o.slice(3)}),n.remove())}else s?.isKind(u.ObjectLiteralExpression)&&Ke(s)}}}async function Jt(e){let r=(await B(`const theme = ${e}`,null)).getStatements()[0];if(r?.getKind()===u.VariableStatement){let n=(r.getDeclarationList()?.getDeclarations()[0]).getInitializer();if(n?.isKind(u.ObjectLiteralExpression))return await We(n)}throw new Error("Invalid input: not an object literal")}function We(e){let t={};for(let r of e.getProperties())if(r.isKind(u.PropertyAssignment)){let i=r.getName().replace(/\'/g,"");r.getInitializer()?.isKind(u.ObjectLiteralExpression)?t[i]=We(r.getInitializer()):t[i]=Ve(r.getInitializer())}return t}function Ve(e){switch(e.kind){case u.StringLiteral:return e.text;case u.NumericLiteral:return Number(e.text);case u.TrueKeyword:return!0;case u.FalseKeyword:return!1;case u.NullKeyword:return null;case u.ArrayLiteralExpression:return e.elements.map(Ve);default:return e.getText()}}function Me(e){let t={};for(let r of Object.keys(e)){let i=r.split("-"),n=i[0],s=i.slice(1).join("-");s===""?typeof t[n]=="object"?t[n].DEFAULT=`hsl(var(--${r}))`:t[n]=`hsl(var(--${r}))`:(typeof t[n]!="object"&&(t[n]={DEFAULT:`hsl(var(--${n}))`}),t[n][s]=`hsl(var(--${r}))`)}for(let[r,i]of Object.entries(t))typeof i=="object"&&i.DEFAULT===`hsl(var(--${r}))`&&!(r in e)&&delete i.DEFAULT;return t}import _ from"deepmerge";import{HttpsProxyAgent as Qt}from"https-proxy-agent";import Ht from"node-fetch";import{z as Xt}from"zod";var qt=process.env.REGISTRY_URL??"https://ui.shadcn.com/r",Zt=process.env.https_proxy?new Qt(process.env.https_proxy):void 0;async function z(){try{let[e]=await $(["index.json"]);return pe.parse(e)}catch(e){a.error(`
|
|
6
|
+
`),x(e)}}async function de(){try{let[e]=await $(["styles/index.json"]);return Ae.parse(e)}catch(e){return a.error(`
|
|
7
|
+
`),x(e),[]}}async function Ue(e,t){try{let[r]=await $([ge(e)?e:`styles/${t}/${e}.json`]);return N.parse(r)}catch(r){return a.break(),x(r),null}}async function ue(){return[{name:"neutral",label:"Neutral"},{name:"gray",label:"Gray"},{name:"zinc",label:"Zinc"},{name:"stone",label:"Stone"},{name:"slate",label:"Slate"}]}async function K(e){try{let[t]=await $([`colors/${e}.json`]);return Fe.parse(t)}catch(t){x(t)}}async function Ge(e,t){try{let r=t.map(n=>`styles/${e}/${n.name}.json`),i=await $(r);return pe.parse(i)}catch(r){x(r)}}async function Be(e,t,r){if(r)return r;if(t.type==="registry:ui")return e.resolvedPaths.ui??e.resolvedPaths.components;let[i,n]=t.type?.split(":")??[];return i in e.resolvedPaths?Yt.join(e.resolvedPaths[i],n):null}async function $(e){try{return await Promise.all(e.map(async r=>{let i=Qe(r),n=await Ht(i,{agent:Zt});if(!n.ok){let s={400:"Bad request",401:"Unauthorized",403:"Forbidden",404:"Not found",500:"Internal server error"};if(n.status===401)throw new Error(`You are not authorized to access the component at ${c.info(i)}.
|
|
8
|
+
If this is a remote registry, you may need to authenticate.`);if(n.status===404)throw new Error(`The component at ${c.info(i)} was not found.
|
|
9
|
+
It may not exist at the registry. Please make sure it is a valid component.`);if(n.status===403)throw new Error(`You do not have access to the component at ${c.info(i)}.
|
|
10
|
+
If this is a remote registry, you may need to authenticate or a token.`);let o=await n.json(),l=o&&typeof o=="object"&&"error"in o?o.error:n.statusText||s[n.status];throw new Error(`Failed to fetch from ${c.info(i)}.
|
|
11
|
+
${l}`)}return n.json()}))}catch(t){return a.error(`
|
|
12
|
+
`),x(t),[]}}function Je(e,t,r){return r||(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:(e.type==="registry:page",t.resolvedPaths.components))}async function Ye(e,t){try{if(!await z())return null;e.includes("index")&&e.unshift("index");let i=[];for(let f of e){let w=await er(f,t);i.push(...w)}let n=Array.from(new Set(i)),s=await $(n),o=Xt.array(N).parse(s);if(!o)return null;if(e.includes("index")&&t.tailwind.baseColor){let f=await tr(t.tailwind.baseColor,t);f&&o.unshift(f)}let l={};o.forEach(f=>{l=_(l,f.tailwind??{})});let m={};o.forEach(f=>{m=_(m,f.cssVars??{})});let d="";return o.forEach(f=>{f.docs&&(d+=`${f.docs}
|
|
13
|
+
`)}),De.parse({dependencies:_.all(o.map(f=>f.dependencies??[])),devDependencies:_.all(o.map(f=>f.devDependencies??[])),files:_.all(o.map(f=>f.files??[])),tailwind:l,cssVars:m,docs:d})}catch(r){return x(r),null}}async function er(e,t){let r=new Set,i=[];async function n(s){let o=Qe(ge(s)?s:`styles/${t.style}/${s}.json`);if(!r.has(o)){r.add(o);try{let[l]=await $([o]),m=N.parse(l);if(i.push(o),m.registryDependencies)for(let d of m.registryDependencies)await n(d)}catch(l){console.error(`Error fetching or parsing registry item at ${s}:`,l)}}}return await n(e),Array.from(new Set(i))}async function tr(e,t){let r=await K(e);if(!r)return null;let i={name:e,type:"registry:theme",tailwind:{config:{theme:{extend:{borderRadius:{lg:"var(--radius)",md:"calc(var(--radius) - 2px)",sm:"calc(var(--radius) - 4px)"},colors:{}}}}},cssVars:{light:{radius:"0.5rem"},dark:{}}};return t.tailwind.cssVariables&&(i.tailwind.config.theme.extend.colors={...i.tailwind.config.theme.extend.colors,...Me(r.cssVars.dark)},i.cssVars={light:{...r.cssVars.light,...i.cssVars.light},dark:{...r.cssVars.dark,...i.cssVars.dark}}),i}function Qe(e){if(ge(e)){let t=new URL(e);return t.pathname.match(/\/chat\/b\//)&&!t.pathname.endsWith("/json")&&(t.pathname=`${t.pathname}/json`),t.toString()}return`${qt}/${e}`}function ge(e){try{return new URL(e),!0}catch{return!1}}import{promises as He}from"fs";import rr from"path";import O from"postcss";import ir from"postcss/lib/at-rule";async function qe(e,t,r){if(!e||!Object.keys(e).length||!t.resolvedPaths.tailwindCss)return;r={cleanupDefaultNextStyles:!1,silent:!1,...r};let i=t.resolvedPaths.tailwindCss,n=rr.relative(t.resolvedPaths.cwd,i),s=h(`Updating ${c.info(n)}`,{silent:r.silent}).start(),o=await He.readFile(i,"utf8"),l=await nr(o,e,t,{cleanupDefaultNextStyles:r.cleanupDefaultNextStyles});await He.writeFile(i,l,"utf8"),s.succeed()}async function nr(e,t,r,i){i={cleanupDefaultNextStyles:!1,...i};let n=[or(t)];return i.cleanupDefaultNextStyles&&n.push(ar()),r.tailwind.cssVariables&&n.push(sr()),(await O(n).process(e,{from:void 0})).css}function sr(){return{postcssPlugin:"update-base-layer",Once(e){let t=[{selector:"*",apply:"border-border"},{selector:"body",apply:"bg-background text-foreground"}],r=e.nodes.find(i=>i.type==="atrule"&&i.name==="layer"&&i.params==="base"&&t.every(({selector:n,apply:s})=>i.nodes?.some(o=>o.type==="rule"&&o.selector===n&&o.nodes.some(l=>l.type==="atrule"&&l.name==="apply"&&l.params===s))));r||(r=O.atRule({name:"layer",params:"base",raws:{semicolon:!0,between:" ",before:`
|
|
14
|
+
`}}),e.append(r)),t.forEach(({selector:i,apply:n})=>{r?.nodes?.find(o=>o.type==="rule"&&o.selector===i)||r?.append(O.rule({selector:i,nodes:[O.atRule({name:"apply",params:n,raws:{semicolon:!0,before:`
|
|
11
15
|
`}})],raws:{semicolon:!0,between:" ",before:`
|
|
12
|
-
`}}))})}}}function
|
|
13
|
-
`,between:" "}}),t.append(r)),r!==void 0&&Object.entries(e).forEach(([i,n])=>{let s=i==="light"?":root":`.${i}`;
|
|
14
|
-
`}}),e.append(i)),Object.entries(r).forEach(([n,s])=>{let a=`--${n.replace(/^--/,"")}`,c=k.decl({prop:a,value:s,raws:{semicolon:!0}}),m=i?.nodes.find(f=>f.type==="decl"&&f.prop===a);m?m.replaceWith(c):i?.append(c)})}import{detect as ir}from"@antfu/ni";async function J(e,{withFallback:t}={withFallback:!1}){let r=await ir({programmatic:!0,cwd:e});if(r==="yarn@berry")return"yarn";if(r==="pnpm@6")return"pnpm";if(r==="bun")return"bun";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"}import{execa as nr}from"execa";async function He(e,t,r){if(e=Array.from(new Set(e)),!e?.length)return;r={silent:!1,...r};let i=w("Installing dependencies.",{silent:r.silent})?.start(),n=await J(t.resolvedPaths.cwd);await nr(n,[n==="npm"?"install":"add",...e],{cwd:t.resolvedPaths.cwd}),i?.succeed()}import{existsSync as Ze,promises as qe}from"fs";import j,{basename as br}from"path";import{promises as ur}from"fs";import{tmpdir as gr}from"os";import Xe from"path";import{SyntaxKind as sr}from"ts-morph";var Y=async({sourceFile:e,config:t,baseColor:r})=>(t.tailwind?.cssVariables||!r?.inlineColors||e.getDescendantsOfKind(sr.StringLiteral).forEach(i=>{let n=i.getText();if(n){let s=ar(n.replace(/"/g,""),r.inlineColors);i.replaceWithText(`"${s.trim()}"`)}}),e);function ue(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(":"),s=n.pop(),a=n.join(":");return t.push(a??null,s??null,i??null),t}var or=["bg-","text-","border-","ring-offset-","ring-"];function ar(e,t){e.includes(" border ")&&(e=e.replace(" border "," border border-border "));let r=e.split(" "),i=new Set,n=new Set;for(let s of r){let[a,c,m]=ue(s),f=or.find(d=>c?.startsWith(d));if(!f){i.has(s)||i.add(s);continue}let x=c?.replace(f,"");if(x&&x in t.light){i.add([a,`${f}${t.light[x]}`].filter(Boolean).join(":")+(m?`/${m}`:"")),n.add(["dark",a,`${f}${t.dark[x]}`].filter(Boolean).join(":")+(m?`/${m}`:""));continue}i.has(s)||i.add(s)}return[...Array.from(i),...Array.from(n)].join(" ").trim()}var H=async({sourceFile:e,config:t})=>{let r=e.getImportDeclarations();for(let i of r){let n=lr(i.getModuleSpecifierValue(),t);i.setModuleSpecifier(n),n=="@/lib/utils"&&i.getNamedImports().find(c=>c.getName()==="cn")&&i.setModuleSpecifier(n.replace(/^@\/lib\/utils/,t.aliases.utils))}return e};function lr(e,t){if(!e.startsWith("@/"))return e;if(!e.startsWith("@/registry/")){let r=t.aliases.components.charAt(0);return e.replace(/^@\//,`${r}/`)}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)}import{transformFromAstSync as cr}from"@babel/core";import{parse as pr}from"@babel/parser";import mr from"@babel/plugin-transform-typescript";import*as Q from"recast";var fr={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"]},Qe=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let i=Q.parse(r,{parser:{parse:s=>pr(s,fr)}}),n=cr(i,r,{cloneInputAst:!1,code:!1,ast:!0,plugins:[mr],configFile:!1});if(!n||!n.ast)throw new Error("Failed to transform JSX");return Q.print(n.ast).code};import{SyntaxKind as dr}from"ts-morph";var X=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(dr.ExpressionStatement);return r?.getText()==='"use client"'&&r.remove(),e};import{Project as hr,ScriptKind as yr}from"ts-morph";import{SyntaxKind as h}from"ts-morph";var Z=async({sourceFile:e,config:t})=>(t.tailwind?.prefix&&(e.getDescendantsOfKind(h.CallExpression).filter(r=>r.getExpression().getText()==="cva").forEach(r=>{if(r.getArguments()[0]?.isKind(h.StringLiteral)){let i=r.getArguments()[0];i&&i.replaceWithText(`"${I(i.getText()?.replace(/"/g,""),t.tailwind.prefix)}"`)}r.getArguments()[1]?.isKind(h.ObjectLiteralExpression)&&r.getArguments()[1]?.getDescendantsOfKind(h.PropertyAssignment).find(i=>i.getName()==="variants")?.getDescendantsOfKind(h.PropertyAssignment).forEach(i=>{i.getDescendantsOfKind(h.PropertyAssignment).forEach(n=>{let s=n.getInitializerIfKind(h.StringLiteral);s&&s?.replaceWithText(`"${I(s.getText()?.replace(/"/g,""),t.tailwind.prefix)}"`)})})}),e.getDescendantsOfKind(h.JsxAttribute).forEach(r=>{if(r.getName()==="className"){if(r.getInitializer()?.isKind(h.StringLiteral)){let i=r.getInitializer();i&&i.replaceWithText(`"${I(i.getText()?.replace(/"/g,""),t.tailwind.prefix)}"`)}if(r.getInitializer()?.isKind(h.JsxExpression)){let i=r.getInitializer()?.getDescendantsOfKind(h.CallExpression).find(n=>n.getExpression().getText()==="cn");i&&i.getArguments().forEach(n=>{(n.isKind(h.ConditionalExpression)||n.isKind(h.BinaryExpression))&&n.getChildrenOfKind(h.StringLiteral).forEach(s=>{s.replaceWithText(`"${I(s.getText()?.replace(/"/g,""),t.tailwind.prefix)}"`)}),n.isKind(h.StringLiteral)&&n.replaceWithText(`"${I(n.getText()?.replace(/"/g,""),t.tailwind.prefix)}"`)})}}r.getName()==="classNames"&&r.getInitializer()?.isKind(h.JsxExpression)&&r.getDescendantsOfKind(h.PropertyAssignment).forEach(i=>{if(i.getInitializer()?.isKind(h.CallExpression)){let n=i.getInitializerIfKind(h.CallExpression);n&&n.getArguments().forEach(s=>{s.isKind(h.ConditionalExpression)&&s.getChildrenOfKind(h.StringLiteral).forEach(a=>{a.replaceWithText(`"${I(a.getText()?.replace(/"/g,""),t.tailwind.prefix)}"`)}),s.isKind(h.StringLiteral)&&s.replaceWithText(`"${I(s.getText()?.replace(/"/g,""),t.tailwind.prefix)}"`)})}if(i.getInitializer()?.isKind(h.StringLiteral)&&i.getName()!=="variant"){let n=i.getInitializer();n&&n.replaceWithText(`"${I(n.getText()?.replace(/"/g,""),t.tailwind.prefix)}"`)}})})),e);function I(e,t=""){let r=e.split(" "),i=[];for(let n of r){let[s,a,c]=ue(n);s?c?i.push(`${s}:${t}${a}/${c}`):i.push(`${s}:${t}${a}`):c?i.push(`${t}${a}/${c}`):i.push(`${t}${a}`)}return i.join(" ")}var wr=new hr({compilerOptions:{}});async function xr(e){let t=await ur.mkdtemp(Xe.join(gr(),"shadcn-"));return Xe.join(t,e)}async function q(e,t=[H,X,Y,Z]){let r=await xr(e.filename),i=wr.createSourceFile(r,e.raw,{scriptKind:yr.TSX});for(let n of t)n({sourceFile:i,...e});return e.transformJsx?await Qe({sourceFile:i,...e}):i.getText()}import Sr from"prompts";async function et(e,t,r){if(!e?.length)return;r={overwrite:!1,force:!1,silent:!1,...r};let i=w("Updating files.",{silent:r.silent})?.start(),n=await z(t.tailwind.baseColor),s=[],a=[],c=[];for(let f of e){if(!f.content)continue;let x=Ue(f,t),d=br(f.path),y=j.join(x,d);f.target&&(y=j.join(t.resolvedPaths.cwd,f.target),x=j.dirname(y)),t.tsx||(y=y.replace(/\.tsx?$/,ie=>ie===".tsx"?".jsx":".js"));let W=Ze(y);if(W&&!r.overwrite){i.stop();let{overwrite:ie}=await Sr({type:"confirm",name:"overwrite",message:`The file ${l.info(d)} already exists. Would you like to overwrite?`,initial:!1});if(!ie){c.push(j.relative(t.resolvedPaths.cwd,y));continue}i?.start()}Ze(x)||await qe.mkdir(x,{recursive:!0});let ft=await q({filename:f.path,raw:f.content,config:t,baseColor:n,transformJsx:!t.tsx},[H,X,Y,Z]);await qe.writeFile(y,ft,"utf-8"),W?a.push(j.relative(t.resolvedPaths.cwd,y)):s.push(j.relative(t.resolvedPaths.cwd,y))}if(!(s.length||a.length)&&!c.length&&i?.info("No files updated."),s.length){if(i?.succeed(`Created ${s.length} ${s.length===1?"file":"files"}:`),!r.silent)for(let f of s)o.log(` - ${f}`)}else i?.stop();if(a.length&&(w(`Updated ${a.length} ${a.length===1?"file":"files"}:`,{silent:r.silent})?.info(),!r.silent))for(let f of a)o.log(` - ${f}`);if(c.length&&(w(`Skipped ${c.length} ${a.length===1?"file":"files"}:`,{silent:r.silent})?.info(),!r.silent))for(let f of c)o.log(` - ${f}`);r.silent||o.break()}async function ee(e,t,r){r={overwrite:!1,silent:!1,isNewProject:!1,...r};let i=w("Checking registry.",{silent:r.silent})?.start(),n=await Ge(e,t);if(!n)return i?.fail(),b(new Error("Failed to fetch components from registry."));i?.succeed(),await Fe(n.tailwind?.config,t,{silent:r.silent}),await Ye(n.cssVars,t,{cleanupDefaultNextStyles:r.isNewProject,silent:r.silent}),await He(n.dependencies,t,{silent:r.silent}),await et(n.files,t,{overwrite:r.overwrite,silent:r.silent})}import Cr from"path";import{execa as Pr}from"execa";import ge from"fs-extra";import tt from"prompts";async function te(e){if(!e.force){let{proceed:a}=await tt({type:"confirm",name:"proceed",message:`The path ${l.info(e.cwd)} is empty. Would you like to start a new ${l.info("Next.js")} project?`,initial:!0});if(!a)return{projectPath:null,projectName:null}}let t=await J(e.cwd),{name:r}=await tt({type:"text",name:"name",message:"What is your project named?",initial:"my-app",format:a=>a.trim(),validate:a=>a.length>128?"Name should be less than 128 characters.":!0}),i=`${e.cwd}/${r}`;try{await ge.access(e.cwd,ge.constants.W_OK)}catch{o.break(),o.error(`The path ${l.info(e.cwd)} is not writable.`),o.error(`It is likely you do not have write permissions for this folder or the path ${l.info(e.cwd)} does not exist.`),o.break(),process.exit(1)}ge.existsSync(Cr.resolve(e.cwd,r,"package.json"))&&(o.break(),o.error(`A project with the name ${l.info(r)} already exists.`),o.error("Please choose a different name and try again."),o.break(),process.exit(1));let n=w("Creating a new Next.js project. This may take a few minutes.").start(),s=["--tailwind","--eslint","--typescript","--app","--no-src-dir","--no-import-alias",`--use-${t}`];try{await Pr("npx",["create-next-app@latest",i,"--silent",...s],{cwd:e.cwd})}catch{o.break(),o.error("Something went wront creating a new Next.js project. Please try again."),process.exit(1)}return n?.succeed("Creating a new Next.js project."),{projectPath:i,projectName:r}}import{Command as Rr}from"commander";import he from"prompts";import{z as v}from"zod";var Tr=v.object({cwd:v.string(),components:v.array(v.string()).optional(),yes:v.boolean(),defaults:v.boolean(),force:v.boolean(),silent:v.boolean(),isNewProject:v.boolean()}),it=new Rr().name("init").description("initialize your project and install dependencies").argument("[components...]","the components to add or a url to the component.").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).action(async(e,t)=>{try{let r=Tr.parse({cwd:rt.resolve(t.cwd),isNewProject:!1,components:e,...t});await re(r),o.log(`${l.success("Success!")} Project initialization completed.
|
|
15
|
-
You may now add components.`),
|
|
16
|
-
Before you can add components, you must create a valid ${
|
|
16
|
+
`}}))})}}}function or(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 ir||(r=O.atRule({name:"layer",params:"base",nodes:[],raws:{semicolon:!0,before:`
|
|
17
|
+
`,between:" "}}),t.append(r)),r!==void 0&&Object.entries(e).forEach(([i,n])=>{let s=i==="light"?":root":`.${i}`;lr(r,s,n)})}}}function Xe(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 ar(){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.length===0&&t.remove()),Xe(e);let r=e.nodes.find(i=>i.type==="atrule"&&i.params==="(prefers-color-scheme: dark)");r&&(Xe(r),r.nodes.length===0&&r.remove())}}}function lr(e,t,r){let i=e.nodes?.find(n=>n.type==="rule"&&n.selector===t);i||Object.keys(r).length>0&&(i=O.rule({selector:t,raws:{between:" ",before:`
|
|
18
|
+
`}}),e.append(i)),Object.entries(r).forEach(([n,s])=>{let o=`--${n.replace(/^--/,"")}`,l=O.decl({prop:o,value:s,raws:{semicolon:!0}}),m=i?.nodes.find(d=>d.type==="decl"&&d.prop===o);m?m.replaceWith(l):i?.append(l)})}import{detect as cr}from"@antfu/ni";async function J(e,{withFallback:t}={withFallback:!1}){let r=await cr({programmatic:!0,cwd:e});if(r==="yarn@berry")return"yarn";if(r==="pnpm@6")return"pnpm";if(r==="bun")return"bun";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"}import{execa as pr}from"execa";async function Ze(e,t,r){if(e=Array.from(new Set(e)),!e?.length)return;r={silent:!1,...r};let i=h("Installing dependencies.",{silent:r.silent})?.start(),n=await J(t.resolvedPaths.cwd);await pr(n,[n==="npm"?"install":"add",...e],{cwd:t.resolvedPaths.cwd}),i?.succeed()}import{existsSync as rt,promises as it}from"fs";import E,{basename as Tr}from"path";import{promises as br}from"fs";import{tmpdir as Sr}from"os";import tt from"path";import{SyntaxKind as mr}from"ts-morph";var Y=async({sourceFile:e,config:t,baseColor:r})=>(t.tailwind?.cssVariables||!r?.inlineColors||e.getDescendantsOfKind(mr.StringLiteral).forEach(i=>{let n=i.getText();if(n){let s=dr(n.replace(/"/g,""),r.inlineColors);i.replaceWithText(`"${s.trim()}"`)}}),e);function he(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(":"),s=n.pop(),o=n.join(":");return t.push(o??null,s??null,i??null),t}var fr=["bg-","text-","border-","ring-offset-","ring-"];function dr(e,t){e.includes(" border ")&&(e=e.replace(" border "," border border-border "));let r=e.split(" "),i=new Set,n=new Set;for(let s of r){let[o,l,m]=he(s),d=fr.find(w=>l?.startsWith(w));if(!d){i.has(s)||i.add(s);continue}let f=l?.replace(d,"");if(f&&f in t.light){i.add([o,`${d}${t.light[f]}`].filter(Boolean).join(":")+(m?`/${m}`:"")),n.add(["dark",o,`${d}${t.dark[f]}`].filter(Boolean).join(":")+(m?`/${m}`:""));continue}i.has(s)||i.add(s)}return[...Array.from(i),...Array.from(n)].join(" ").trim()}var Q=async({sourceFile:e,config:t})=>{let r=e.getImportDeclarations();for(let i of r){let n=ur(i.getModuleSpecifierValue(),t);i.setModuleSpecifier(n),n=="@/lib/utils"&&i.getNamedImports().find(l=>l.getName()==="cn")&&i.setModuleSpecifier(n.replace(/^@\/lib\/utils/,t.aliases.utils))}return e};function ur(e,t){if(!e.startsWith("@/"))return e;if(!e.startsWith("@/registry/")){let r=t.aliases.components.charAt(0);return e.replace(/^@\//,`${r}/`)}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)}import{transformFromAstSync as gr}from"@babel/core";import{parse as hr}from"@babel/parser";import yr from"@babel/plugin-transform-typescript";import*as H from"recast";var wr={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"]},et=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let i=H.parse(r,{parser:{parse:s=>hr(s,wr)}}),n=gr(i,r,{cloneInputAst:!1,code:!1,ast:!0,plugins:[yr],configFile:!1});if(!n||!n.ast)throw new Error("Failed to transform JSX");return H.print(n.ast).code};import{SyntaxKind as xr}from"ts-morph";var X=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(xr.ExpressionStatement);return r?.getText()==='"use client"'&&r.remove(),e};import{Project as Cr,ScriptKind as Pr}from"ts-morph";import{SyntaxKind as y}from"ts-morph";var q=async({sourceFile:e,config:t})=>(t.tailwind?.prefix&&(e.getDescendantsOfKind(y.CallExpression).filter(r=>r.getExpression().getText()==="cva").forEach(r=>{if(r.getArguments()[0]?.isKind(y.StringLiteral)){let i=r.getArguments()[0];i&&i.replaceWithText(`"${k(i.getText()?.replace(/"|'/g,""),t.tailwind.prefix)}"`)}r.getArguments()[1]?.isKind(y.ObjectLiteralExpression)&&r.getArguments()[1]?.getDescendantsOfKind(y.PropertyAssignment).find(i=>i.getName()==="variants")?.getDescendantsOfKind(y.PropertyAssignment).forEach(i=>{i.getDescendantsOfKind(y.PropertyAssignment).forEach(n=>{let s=n.getInitializerIfKind(y.StringLiteral);s&&s?.replaceWithText(`"${k(s.getText()?.replace(/"|'/g,""),t.tailwind.prefix)}"`)})})}),e.getDescendantsOfKind(y.JsxAttribute).forEach(r=>{if(r.getName()==="className"){if(r.getInitializer()?.isKind(y.StringLiteral)){let i=r.getInitializer();i&&i.replaceWithText(`"${k(i.getText()?.replace(/"|'/g,""),t.tailwind.prefix)}"`)}if(r.getInitializer()?.isKind(y.JsxExpression)){let i=r.getInitializer()?.getDescendantsOfKind(y.CallExpression).find(n=>n.getExpression().getText()==="cn");i&&i.getArguments().forEach(n=>{(n.isKind(y.ConditionalExpression)||n.isKind(y.BinaryExpression))&&n.getChildrenOfKind(y.StringLiteral).forEach(s=>{s.replaceWithText(`"${k(s.getText()?.replace(/"|'/g,""),t.tailwind.prefix)}"`)}),n.isKind(y.StringLiteral)&&n.replaceWithText(`"${k(n.getText()?.replace(/"|'/g,""),t.tailwind.prefix)}"`)})}}r.getName()==="classNames"&&r.getInitializer()?.isKind(y.JsxExpression)&&r.getDescendantsOfKind(y.PropertyAssignment).forEach(i=>{if(i.getInitializer()?.isKind(y.CallExpression)){let n=i.getInitializerIfKind(y.CallExpression);n&&n.getArguments().forEach(s=>{s.isKind(y.ConditionalExpression)&&s.getChildrenOfKind(y.StringLiteral).forEach(o=>{o.replaceWithText(`"${k(o.getText()?.replace(/"|'/g,""),t.tailwind.prefix)}"`)}),s.isKind(y.StringLiteral)&&s.replaceWithText(`"${k(s.getText()?.replace(/"|'/g,""),t.tailwind.prefix)}"`)})}if(i.getInitializer()?.isKind(y.StringLiteral)&&i.getName()!=="variant"){let n=i.getInitializer();n&&n.replaceWithText(`"${k(n.getText()?.replace(/"|'/g,""),t.tailwind.prefix)}"`)}})})),e);function k(e,t=""){let r=e.split(" "),i=[];for(let n of r){let[s,o,l]=he(n);s?l?i.push(`${s}:${t}${o}/${l}`):i.push(`${s}:${t}${o}`):l?i.push(`${t}${o}/${l}`):i.push(`${t}${o}`)}return i.join(" ")}var vr=new Cr({compilerOptions:{}});async function Rr(e){let t=await br.mkdtemp(tt.join(Sr(),"shadcn-"));return tt.join(t,e)}async function Z(e,t=[Q,X,Y,q]){let r=await Rr(e.filename),i=vr.createSourceFile(r,e.raw,{scriptKind:Pr.TSX});for(let n of t)n({sourceFile:i,...e});return e.transformJsx?await et({sourceFile:i,...e}):i.getText()}import Ir from"prompts";function kr(e,t,r){return r.startsWith("~/")?E.join(t.resolvedPaths.cwd,r.replace("~/","")):e?.isSrcDir?E.join(t.resolvedPaths.cwd,"src",r):E.join(t.resolvedPaths.cwd,r)}async function nt(e,t,r){if(!e?.length)return;r={overwrite:!1,force:!1,silent:!1,...r};let i=h("Updating files.",{silent:r.silent})?.start(),[n,s]=await Promise.all([j(t.resolvedPaths.cwd),K(t.tailwind.baseColor)]),o=[],l=[],m=[];for(let f of e){if(!f.content)continue;let w=Je(f,t),S=Tr(f.path),C=E.join(w,S);f.target&&(C=kr(n,t,f.target),w=E.dirname(C)),t.tsx||(C=C.replace(/\.tsx?$/,ne=>ne===".tsx"?".jsx":".js"));let Pe=rt(C);if(Pe&&!r.overwrite){i.stop();let{overwrite:ne}=await Ir({type:"confirm",name:"overwrite",message:`The file ${c.info(S)} already exists. Would you like to overwrite?`,initial:!1});if(!ne){m.push(E.relative(t.resolvedPaths.cwd,C));continue}i?.start()}rt(w)||await it.mkdir(w,{recursive:!0});let wt=await Z({filename:f.path,raw:f.content,config:t,baseColor:s,transformJsx:!t.tsx},[Q,X,Y,q]);await it.writeFile(C,wt,"utf-8"),Pe?l.push(E.relative(t.resolvedPaths.cwd,C)):o.push(E.relative(t.resolvedPaths.cwd,C))}if(!(o.length||l.length)&&!m.length&&i?.info("No files updated."),o.length){if(i?.succeed(`Created ${o.length} ${o.length===1?"file":"files"}:`),!r.silent)for(let f of o)a.log(` - ${f}`)}else i?.stop();if(l.length&&(h(`Updated ${l.length} ${l.length===1?"file":"files"}:`,{silent:r.silent})?.info(),!r.silent))for(let f of l)a.log(` - ${f}`);if(m.length&&(h(`Skipped ${m.length} ${l.length===1?"file":"files"}:`,{silent:r.silent})?.info(),!r.silent))for(let f of m)a.log(` - ${f}`);r.silent||a.break()}async function ee(e,t,r){r={overwrite:!1,silent:!1,isNewProject:!1,...r};let i=h("Checking registry.",{silent:r.silent})?.start(),n=await Ye(e,t);if(!n)return i?.fail(),x(new Error("Failed to fetch components from registry."));i?.succeed(),await _e(n.tailwind?.config,t,{silent:r.silent}),await qe(n.cssVars,t,{cleanupDefaultNextStyles:r.isNewProject,silent:r.silent}),await Ze(n.dependencies,t,{silent:r.silent}),await nt(n.files,t,{overwrite:r.overwrite,silent:r.silent}),n.docs&&a.info(n.docs)}import Er from"path";import{execa as jr}from"execa";import ye from"fs-extra";import st from"prompts";async function te(e){if(e={srcDir:!1,...e},!e.force){let{proceed:o}=await st({type:"confirm",name:"proceed",message:`The path ${c.info(e.cwd)} does not contain a package.json file. Would you like to start a new ${c.info("Next.js")} project?`,initial:!0});if(!o)return{projectPath:null,projectName:null}}let t=await J(e.cwd),{name:r}=await st({type:"text",name:"name",message:"What is your project named?",initial:"my-app",format:o=>o.trim(),validate:o=>o.length>128?"Name should be less than 128 characters.":!0}),i=`${e.cwd}/${r}`;try{await ye.access(e.cwd,ye.constants.W_OK)}catch{a.break(),a.error(`The path ${c.info(e.cwd)} is not writable.`),a.error(`It is likely you do not have write permissions for this folder or the path ${c.info(e.cwd)} does not exist.`),a.break(),process.exit(1)}ye.existsSync(Er.resolve(e.cwd,r,"package.json"))&&(a.break(),a.error(`A project with the name ${c.info(r)} already exists.`),a.error("Please choose a different name and try again."),a.break(),process.exit(1));let n=h("Creating a new Next.js project. This may take a few minutes.").start(),s=["--tailwind","--eslint","--typescript","--app",e.srcDir?"--src-dir":"--no-src-dir","--no-import-alias",`--use-${t}`];try{await jr("npx",["create-next-app@latest",i,"--silent",...s],{cwd:e.cwd})}catch{a.break(),a.error("Something went wrong creating a new Next.js project. Please try again."),process.exit(1)}return n?.succeed("Creating a new Next.js project."),{projectPath:i,projectName:r}}import{promises as ot}from"fs";import $r from"path";import{SyntaxKind as re}from"ts-morph";async function at(e,t,r){if(!e)return;r={silent:!1,...r};let i=$r.relative(t.resolvedPaths.cwd,t.resolvedPaths.tailwindConfig),n=h(`Updating ${c.info(i)}`,{silent:r.silent}).start(),s=await ot.readFile(t.resolvedPaths.tailwindConfig,"utf8"),o=await Or(s,e,t);await ot.writeFile(t.resolvedPaths.tailwindConfig,o,"utf8"),n?.succeed()}async function Or(e,t,r){let i=await B(e,r),n=i.getDescendantsOfKind(re.ObjectLiteralExpression).find(s=>s.getProperties().some(o=>o.isKind(re.PropertyAssignment)&&o.getName()==="content"));return n?(Nr(n,t),i.getFullText()):e}async function Nr(e,t){let r=fe(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(re.PropertyAssignment)){let n=i.getInitializer();if(n?.isKind(re.ArrayLiteralExpression))for(let s of t){let o=`${r}${s}${r}`;n.getElements().map(l=>l.getText()).includes(o)||n.addElement(o)}return e}return e}import{Command as Fr}from"commander";import we from"prompts";import{z as P}from"zod";var Dr=P.object({cwd:P.string(),components:P.array(P.string()).optional(),yes:P.boolean(),defaults:P.boolean(),force:P.boolean(),silent:P.boolean(),isNewProject:P.boolean(),srcDir:P.boolean().optional()}),ct=new Fr().name("init").description("initialize your project and install dependencies").argument("[components...]","the components to add or a url to the component.").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).action(async(e,t)=>{try{let r=Dr.parse({cwd:lt.resolve(t.cwd),isNewProject:!1,components:e,...t});await ie(r),a.log(`${c.success("Success!")} Project initialization completed.
|
|
19
|
+
You may now add components.`),a.break()}catch(r){a.break(),x(r)}});async function ie(e){let t;if(e.skipPreflight)t=await j(e.cwd);else{let m=await $e(e);if(m.errors[T]){let{projectPath:d}=await te(e);d||process.exit(1),e.cwd=d,e.isNewProject=!0}t=m.projectInfo}let r=await Ee(e.cwd,t),i=r?await _r(r,e):await Lr(await I(e.cwd));if(!e.yes){let{proceed:m}=await we({type:"confirm",name:"proceed",message:`Write configuration to ${c.info("components.json")}. Proceed?`,initial:!0});m||process.exit(0)}let n=h("Writing components.json.").start(),s=lt.resolve(e.cwd,"components.json");await Ar.writeFile(s,JSON.stringify(i,null,2),"utf8"),n.succeed();let o=await D(e.cwd,i),l=["index",...e.components||[]];return await ee(l,o,{overwrite:!0,silent:e.silent,isNewProject:e.isNewProject||t?.framework.name==="next-app"}),e.isNewProject&&e.srcDir&&await at(["./src/**/*.{js,ts,jsx,tsx,mdx}"],o,{silent:e.silent}),o}async function Lr(e=null){let[t,r]=await Promise.all([de(),ue()]);a.info("");let i=await we([{type:"toggle",name:"typescript",message:`Would you like to use ${c.info("TypeScript")} (recommended)?`,initial:e?.tsx??!0,active:"yes",inactive:"no"},{type:"select",name:"style",message:`Which ${c.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 ${c.info("base color")}?`,choices:r.map(n=>({title:n.label,value:n.name}))},{type:"text",name:"tailwindCss",message:`Where is your ${c.info("global CSS")} file?`,initial:e?.tailwind.css??Ie},{type:"toggle",name:"tailwindCssVariables",message:`Would you like to use ${c.info("CSS variables")} for theming?`,initial:e?.tailwind.cssVariables??!0,active:"yes",inactive:"no"},{type:"text",name:"tailwindPrefix",message:`Are you using a custom ${c.info("tailwind prefix eg. tw-")}? (Leave blank if not)`,initial:""},{type:"text",name:"tailwindConfig",message:`Where is your ${c.info("tailwind.config.js")} located?`,initial:e?.tailwind.config??ke},{type:"text",name:"components",message:`Configure the import alias for ${c.info("components")}:`,initial:e?.aliases.components??Re},{type:"text",name:"utils",message:`Configure the import alias for ${c.info("utils")}:`,initial:e?.aliases.utils??Te},{type:"toggle",name:"rsc",message:`Are you using ${c.info("React Server Components")}?`,initial:e?.rsc??!0,active:"yes",inactive:"no"}]);return F.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 _r(e,t){let r=e.style,i=e.tailwind.baseColor,n=e.tailwind.cssVariables;if(!t.defaults){let[s,o]=await Promise.all([de(),ue()]),l=await we([{type:"select",name:"style",message:`Which ${c.info("style")} would you like to use?`,choices:s.map(m=>({title:m.label,value:m.name})),initial:s.findIndex(m=>m.name===r)},{type:"select",name:"tailwindBaseColor",message:`Which color would you like to use as the ${c.info("base color")}?`,choices:o.map(m=>({title:m.label,value:m.name}))},{type:"toggle",name:"tailwindCssVariables",message:`Would you like to use ${c.info("CSS variables")} for theming?`,initial:e?.tailwind.cssVariables,active:"yes",inactive:"no"}]);r=l.style,i=l.tailwindBaseColor,n=l.tailwindCssVariables}return F.parse({$schema:e?.$schema,style:r,tailwind:{...e?.tailwind,baseColor:i,cssVariables:n},rsc:e?.rsc,tsx:e?.tsx,aliases:e?.aliases})}import pt from"path";import xe from"fs-extra";async function mt(e){let t={};if(!xe.existsSync(e.cwd)||!xe.existsSync(pt.resolve(e.cwd,"package.json")))return t[T]=!0,{errors:t,config:null};if(!xe.existsSync(pt.resolve(e.cwd,"components.json")))return t[V]=!0,{errors:t,config:null};try{let r=await I(e.cwd);return{errors:t,config:r}}catch{a.break(),a.error(`An invalid ${c.info("components.json")} file was found at ${c.info(e.cwd)}.
|
|
20
|
+
Before you can add components, you must create a valid ${c.info("components.json")} file by running the ${c.info("init")} command.`),a.error(`Learn more at ${c.info("https://ui.shadcn.com/docs/components-json")}.`),a.break(),process.exit(1)}}import ft from"fs/promises";import zr from"path";async function dt(e,t){let r=zr.join(t.resolvedPaths.cwd,"app/page.tsx");if(!(await ft.stat(r)).isFile())return;let i=await Ue(e,t.style);if(!i?.meta?.importSpecifier||!i?.meta?.moduleSpecifier)return;let n=`import { ${i?.meta?.importSpecifier} } from "${i.meta.moduleSpecifier}"
|
|
17
21
|
|
|
18
22
|
export default function Page() {
|
|
19
23
|
return <${i?.meta?.importSpecifier} />
|
|
20
|
-
}`;await
|
|
21
|
-
Existing CSS variables will be overwritten. Continue?`)});
|
|
24
|
+
}`;await ft.writeFile(r,n,"utf8")}import{Command as Wr}from"commander";import be from"prompts";import{z as b}from"zod";var Vr=b.object({components:b.array(b.string()).optional(),yes:b.boolean(),overwrite:b.boolean(),cwd:b.string(),all:b.boolean(),path:b.string().optional(),silent:b.boolean(),srcDir:b.boolean().optional()}),ut=new Wr().name("add").description("add a component to your project").argument("[components...]","the components to add or a url to the component.").option("-y, --yes","skip confirmation prompt.",!1).option("-o, --overwrite","overwrite existing files.",!1).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-a, --all","add all available components",!1).option("-p, --path <path>","the path to add the component to.").option("-s, --silent","mute output.",!1).option("--src-dir","use the src directory when creating a new project.",!1).action(async(e,t)=>{try{let r=Vr.parse({components:e,cwd:Kr.resolve(t.cwd),...t}),i=r.components?.some(l=>l.includes("theme-"));if(!r.yes&&i){a.break();let{confirm:l}=await be({type:"confirm",name:"confirm",message:c.warn(`You are about to install a new theme.
|
|
25
|
+
Existing CSS variables will be overwritten. Continue?`)});l||(a.break(),a.log("Theme installation cancelled."),a.break(),process.exit(1))}r.components?.length||(r.components=await Mr(r));let{errors:n,config:s}=await mt(r);if(n[V]){let{proceed:l}=await be({type:"confirm",name:"proceed",message:`You need to create a ${c.info("component.json")} file to add components. Proceed?`,initial:!0});l||(a.break(),process.exit(1)),s=await ie({cwd:r.cwd,yes:!0,force:!0,defaults:!1,skipPreflight:!1,silent:!0,isNewProject:!1,srcDir:r.srcDir})}let o=!1;if(n[T]){let{projectPath:l}=await te({cwd:r.cwd,force:r.overwrite,srcDir:r.srcDir});l||(a.break(),process.exit(1)),r.cwd=l,s=await ie({cwd:r.cwd,yes:!0,force:!0,defaults:!1,skipPreflight:!0,silent:!0,isNewProject:!0,srcDir:r.srcDir}),o=r.components?.length===1&&!!r.components[0].match(/\/chat\/b\//)}if(!s)throw new Error(`Failed to read config at ${c.info(r.cwd)}.`);await ee(r.components,s,r),o&&await dt(r.components[0],s)}catch(r){a.break(),x(r)}});async function Mr(e){let t=await z();if(!t)return a.break(),x(new Error("Failed to fetch registry index.")),[];if(e.all)return t.map(n=>n.name);if(e.components?.length)return e.components;let{components:r}=await be({type:"multiselect",name:"components",message:"Which components would you like to add?",hint:"Space to select. A to toggle all. Enter to submit.",instructions:!1,choices:t.filter(n=>n.type==="registry:ui").map(n=>({title:n.name,value:n.name,selected:e.all?!0:e.components?.includes(n.name)}))});r?.length||(a.warn("No components selected. Exiting."),a.info(""),process.exit(1));let i=b.array(b.string()).safeParse(r);return i.success?i.data:(a.error(""),x(new Error("Something went wrong. Please try again.")),[])}import{existsSync as Se,promises as Ur}from"fs";import Ce from"path";import{Command as Gr}from"commander";import{diffLines as Br}from"diff";import{z as W}from"zod";var Jr=W.object({component:W.string().optional(),yes:W.boolean(),cwd:W.string(),path:W.string().optional()}),ht=new Gr().name("diff").description("check for updates against the registry").argument("[component]","the component name").option("-y, --yes","skip confirmation prompt.",!1).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{try{let r=Jr.parse({component:e,...t}),i=Ce.resolve(r.cwd);Se(i)||(a.error(`The path ${i} does not exist. Please try again.`),process.exit(1));let n=await I(i);n||(a.warn(`Configuration is missing. Please run ${c.success("init")} to create a components.json file.`),process.exit(1));let s=await z();if(s||(x(new Error("Failed to fetch registry index.")),process.exit(1)),!r.component){let m=n.resolvedPaths.components,d=s.filter(w=>{for(let S of w.files??[]){let C=Ce.resolve(m,typeof S=="string"?S:S.path);if(Se(C))return!0}return!1}),f=[];for(let w of d){let S=await gt(w,n);S.length&&f.push({name:w.name,changes:S})}f.length||(a.info("No updates found."),process.exit(0)),a.info("The following components have updates available:");for(let w of f){a.info(`- ${w.name}`);for(let S of w.changes)a.info(` - ${S.filePath}`)}a.break(),a.info(`Run ${c.success("diff <component>")} to see the changes.`),process.exit(0)}let o=s.find(m=>m.name===r.component);o||(a.error(`The component ${c.success(r.component)} does not exist.`),process.exit(1));let l=await gt(o,n);l.length||(a.info(`No updates found for ${r.component}.`),process.exit(0));for(let m of l)a.info(`- ${m.filePath}`),await Yr(m.patch),a.info("")}catch(r){x(r)}});async function gt(e,t){let r=await Ge(t.style,[e]),i=await K(t.tailwind.baseColor);if(!r)return[];let n=[];for(let s of r){let o=await Be(t,s);if(o)for(let l of s.files??[]){let m=Ce.resolve(o,typeof l=="string"?l:l.path);if(!Se(m))continue;let d=await Ur.readFile(m,"utf8");if(typeof l=="string"||!l.content)continue;let f=await Z({filename:l.path,raw:l.content,config:t,baseColor:i}),w=Br(f,d);w.length>1&&n.push({filePath:m,patch:w})}}return n}async function Yr(e){e.forEach(t=>{if(t)return t.added?process.stdout.write(c.success(t.value)):t.removed?process.stdout.write(c.error(t.value)):process.stdout.write(t.value)})}import{Command as Hr}from"commander";var yt={name:"shadcn",version:"0.0.0-beta.f29aebd",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.git",directory:"packages/shadcn"},files:["dist"],keywords:["components","ui","tailwind","radix-ui","shadcn"],type:"module",exports:"./dist/index.js",bin:"./dist/index.js",scripts:{dev:"tsup --watch",build:"tsup",typecheck:"tsc --noEmit",clean:"rimraf dist && rimraf components","start:dev":"cross-env REGISTRY_URL=http://localhost:3333/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: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:3333/r vitest run"},dependencies:{"@antfu/ni":"^0.21.4","@babel/core":"^7.22.1","@babel/parser":"^7.22.6","@babel/plugin-transform-typescript":"^7.22.5",commander:"^10.0.0",cosmiconfig:"^8.1.3",deepmerge:"^4.3.1",diff:"^5.1.0",execa:"^7.0.0","fast-glob":"^3.3.2","fs-extra":"^11.1.0","https-proxy-agent":"^6.2.0",kleur:"^4.1.5","lodash.template":"^4.5.0","node-fetch":"^3.3.0",ora:"^6.1.2",postcss:"^8.4.24",prompts:"^2.4.2",recast:"^0.23.2","stringify-object":"^5.0.0","ts-morph":"^18.0.0","tsconfig-paths":"^4.2.0",zod:"^3.20.2"},devDependencies:{"@types/babel__core":"^7.20.1","@types/diff":"^5.0.3","@types/fs-extra":"^11.0.1","@types/lodash.template":"^4.5.1","@types/prompts":"^2.4.2","@types/stringify-object":"^4.0.5",rimraf:"^6.0.1",tsup:"^6.6.3","type-fest":"^3.8.0",typescript:"^4.9.3"}};process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function Xr(){let e=new Hr().name("shadcn").description("add components and dependencies to your project").version(yt.version||"1.0.0","-v, --version","display the version number");e.addCommand(ct).addCommand(ut).addCommand(ht),e.parse()}Xr();
|
|
22
26
|
//# sourceMappingURL=index.js.map
|