shadcn 2.0.7 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +20 -20
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,26 +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.`),a.break(),process.exit(1)),i?.succeed(`Verifying framework. Found ${
|
|
6
|
-
`),
|
|
7
|
-
`),
|
|
8
|
-
If this is a remote registry, you may need to authenticate.`);if(n.status===404)throw new Error(`The component at ${
|
|
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 ${
|
|
10
|
-
If this is a remote registry, you may need to authenticate or a token.`);let o=await n.json(),
|
|
11
|
-
${
|
|
12
|
-
`),
|
|
13
|
-
`)}),Le.parse({dependencies:_.all(
|
|
14
|
-
`}}),e.append(r)),t.forEach(({selector:i,apply:n})=>{r?.nodes?.find(o=>o.type==="rule"&&o.selector===i)||r?.append(
|
|
2
|
+
import Mr from"path";import{promises as Lr}from"fs";import ct from"path";import $e 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 bt,green as St,red as Ct,yellow as Pt}from"kleur/colors";var c={error:Ct,warn:Pt,info:bt,success:St};import{createMatchPath as vt}from"tsconfig-paths";async function R(e,t){return vt(t.absoluteBaseUrl,t.paths)(e,void 0,()=>!0,[".ts",".tsx"])}import{cosmiconfig as Rt}from"cosmiconfig";import{loadConfig as Tt}from"tsconfig-paths";import{z as g}from"zod";var Re="@/components",Te="@/lib/utils",Ie="app/globals.css",ke="tailwind.config.js";var It=Rt("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(),kt=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 Et(e);return t?await D(e,t):null}async function D(e,t){let r=await Tt(e);if(r.resultType==="failed")throw new Error(`Failed to load ${t.tsx?"tsconfig":"jsconfig"}.json. ${r.message??""}`.trim());return kt.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 Et(e){try{let t=await It.search(e);return t?F.parse(t.config):null}catch{let r=`${e}/components.json`;throw new Error(`Invalid configuration found in ${c.info(r)}.`)}}import jt from"path";import $t from"fs-extra";function Ee(e="",t=!0){let r=jt.join(e,"package.json");return $t.readJSONSync(r,{throws:t})}import U from"fast-glob";import le from"fs-extra";import{loadConfig as Ot}from"tsconfig-paths";var G=["**/node_modules/**",".next","public","dist","build"];async function j(e){let[t,r,i,n,s,o,l]=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")),Dt(e),At(e),Nt(e),Ft(e),Ee(e,!1)]),f=await le.pathExists(ae.resolve(e,`${r?"src/":""}app`)),d={framework:v.manual,isSrcDir:r,isRSC:!1,isTsx:i,tailwindConfigFile:n,tailwindCssFile:s,aliasPrefix:o};return t.find(m=>m.startsWith("next.config."))?.length?(d.framework=f?v["next-app"]:v["next-pages"],d.isRSC=f,d):t.find(m=>m.startsWith("astro.config."))?.length?(d.framework=v.astro,d):t.find(m=>m.startsWith("gatsby-config."))?.length?(d.framework=v.gatsby,d):t.find(m=>m.startsWith("composer.json"))?.length?(d.framework=v.laravel,d):Object.keys(l?.dependencies??{}).find(m=>m.startsWith("@remix-run/"))?(d.framework=v.remix,d):(t.find(m=>m.startsWith("vite.config."))?.length&&(d.framework=v.vite),d)}async function Nt(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 At(e){let t=await U.glob("tailwind.config.*",{cwd:e,deep:3,ignore:G});return t.length?t[0]:null}async function Ft(e){let t=await Ot(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 Dt(e){return(await U.glob("tsconfig.*",{cwd:e,deep:1,ignore:G})).length>0}async function je(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 Lt from"ora";function h(e,t){return Lt({text:e,isSilent:t?.silent})}import ce from"fs-extra";async function Oe(e){let t={};if(!ce.existsSync(e.cwd)||!ce.existsSync($e.resolve(e.cwd,"package.json")))return t[T]=!0,{errors:t,projectInfo:null};let r=h("Preflight checks.",{silent:e.silent}).start();ce.existsSync($e.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 _t}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 _t.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 Xt from"path";import{z as p}from"zod";var Ne=p.enum(["registry:style","registry:lib","registry:example","registry:block","registry:component","registry:ui","registry:hook","registry:theme","registry:page"]),Ae=p.object({path:p.string(),content:p.string().optional(),type:Ne,target:p.string().optional()}),zt=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()}),Kt=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:Ne,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(Ae).optional(),tailwind:zt.optional(),cssVars:Kt.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(),Ae])).optional()})),Fe=p.array(p.object({name:p.string(),label:p.string()})),De=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()}),Le=N.pick({dependencies:!0,devDependencies:!0,files:!0,tailwind:!0,cssVars:!0,docs:!0});import{promises as me}from"fs";import{tmpdir as Wt}from"os";import L from"path";import Vt from"deepmerge";import Mt from"stringify-object";import{Project as Ut,QuoteKind as Gt,ScriptKind as _e,SyntaxKind as u}from"ts-morph";async function ze(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 Bt(s,e,t);await me.writeFile(t.resolvedPaths.tailwindConfig,o,"utf8"),n?.succeed()}async function Bt(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 Jt(n,{name:"darkMode",value:"class"},{quoteChar:s}),t.plugins?.forEach(o=>{Qt(n,o)}),t.theme&&await Yt(n,t.theme),i.getFullText()}function Jt(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 Yt(e,t){e.getProperty("theme")||e.addPropertyAssignment({name:"theme",initializer:"{}"}),Ke(e);let i=(e.getPropertyOrThrow("theme")?.asKindOrThrow(u.PropertyAssignment)).getInitializer();if(i?.isKind(u.ObjectLiteralExpression)){let n=i.getText(),s=await Ht(n),o=Vt(s,t),l=Mt(o).replace(/\'\"/g,"'").replace(/\"\'/g,"'").replace(/\'\[/g,"[").replace(/\]\'/g,"]").replace(/\'\\\'/g,"'").replace(/\\\'/g,"'").replace(/\\\'\'/g,"'").replace(/\'\'/g,"'");i.replaceWithText(l)}We(e)}function Qt(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(Wt(),"shadcn-")),i=t?.resolvedPaths?.tailwindConfig||"tailwind.config.ts",n=L.join(r,`shadcn-${L.basename(i)}`);return new Ut({compilerOptions:{}}).createSourceFile(n,e,{scriptKind:L.extname(i)===".ts"?_e.TS:_e.JS})}function fe(e){return e.getFirstDescendantByKind(u.StringLiteral)?.getQuoteKind()===Gt.Single?"'":'"'}function Ke(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)&&Ke(s.asKindOrThrow(u.ObjectLiteralExpression))}}}function We(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)&&We(s)}}}async function Ht(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 Ve(n)}throw new Error("Invalid input: not an object literal")}function Ve(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]=Ve(r.getInitializer()):t[i]=Me(r.getInitializer())}return t}function Me(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(Me);default:return e.getText()}}function Ue(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 Zt from"node-fetch";import{z as er}from"zod";var tr=process.env.REGISTRY_URL??"https://ui.shadcn.com/r",rr=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 Fe.parse(e)}catch(e){return a.error(`
|
|
7
|
+
`),x(e),[]}}async function Ge(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 De.parse(t)}catch(t){x(t)}}async function Be(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 Je(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?Xt.join(e.resolvedPaths[i],n):null}async function $(e){try{return await Promise.all(e.map(async r=>{let i=He(r),n=await Zt(i,{agent:rr});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 Ye(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 Qe(e,t){try{if(!await z())return null;e.includes("index")&&e.unshift("index");let i=[];for(let m of e){let w=await ir(m,t);i.push(...w)}let n=Array.from(new Set(i)),s=await $(n),o=er.array(N).parse(s);if(!o)return null;if(e.includes("index")&&t.tailwind.baseColor){let m=await nr(t.tailwind.baseColor,t);m&&o.unshift(m)}let l={};o.forEach(m=>{l=_(l,m.tailwind??{})});let f={};o.forEach(m=>{f=_(f,m.cssVars??{})});let d="";return o.forEach(m=>{m.docs&&(d+=`${m.docs}
|
|
13
|
+
`)}),Le.parse({dependencies:_.all(o.map(m=>m.dependencies??[])),devDependencies:_.all(o.map(m=>m.devDependencies??[])),files:_.all(o.map(m=>m.files??[])),tailwind:l,cssVars:f,docs:d})}catch(r){return x(r),null}}async function ir(e,t){let r=new Set,i=[];async function n(s){let o=He(ge(s)?s:`styles/${t.style}/${s}.json`);if(!r.has(o)){r.add(o);try{let[l]=await $([o]),f=N.parse(l);if(i.push(o),f.registryDependencies)for(let d of f.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 nr(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,...Ue(r.cssVars.dark)},i.cssVars={light:{...r.cssVars.light,...i.cssVars.light},dark:{...r.cssVars.dark,...i.cssVars.dark}}),i}function He(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`${tr}/${e}`}function ge(e){try{return new URL(e),!0}catch{return!1}}import{promises as Xe}from"fs";import sr from"path";import O from"postcss";import or from"postcss/lib/at-rule";async function Ze(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=sr.relative(t.resolvedPaths.cwd,i),s=h(`Updating ${c.info(n)}`,{silent:r.silent}).start(),o=await Xe.readFile(i,"utf8"),l=await ar(o,e,t,{cleanupDefaultNextStyles:r.cleanupDefaultNextStyles});await Xe.writeFile(i,l,"utf8"),s.succeed()}async function ar(e,t,r,i){i={cleanupDefaultNextStyles:!1,...i};let n=[cr(t)];return i.cleanupDefaultNextStyles&&n.push(pr()),r.tailwind.cssVariables&&n.push(lr()),(await O(n).process(e,{from:void 0})).css}function lr(){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:`
|
|
15
15
|
`}})],raws:{semicolon:!0,between:" ",before:`
|
|
16
|
-
`}}))})}}}function
|
|
17
|
-
`,between:" "}}),t.append(r)),r!==void 0&&Object.entries(e).forEach(([i,n])=>{let s=i==="light"?":root":`.${i}`;
|
|
18
|
-
`}}),e.append(i)),Object.entries(r).forEach(([n,s])=>{let o=`--${n.replace(/^--/,"")}`,c=$.decl({prop:o,value:s,raws:{semicolon:!0}}),p=i?.nodes.find(d=>d.type==="decl"&&d.prop===o);p?p.replaceWith(c):i?.append(c)})}import{detect as ar}from"@antfu/ni";async function Y(e,{withFallback:t}={withFallback:!1}){let r=await ar({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 lr}from"execa";async function qe(e,t,r){if(e=Array.from(new Set(e)),!e?.length)return;r={silent:!1,...r};let i=y("Installing dependencies.",{silent:r.silent})?.start(),n=await Y(t.resolvedPaths.cwd);await lr(n,[n==="npm"?"install":"add",...e],{cwd:t.resolvedPaths.cwd}),i?.succeed()}import{existsSync as tt,promises as rt}from"fs";import E,{basename as vr}from"path";import{promises as wr}from"fs";import{tmpdir as xr}from"os";import et from"path";import{SyntaxKind as cr}from"ts-morph";var Q=async({sourceFile:e,config:t,baseColor:r})=>(t.tailwind?.cssVariables||!r?.inlineColors||e.getDescendantsOfKind(cr.StringLiteral).forEach(i=>{let n=i.getText();if(n){let s=mr(n.replace(/"/g,""),r.inlineColors);i.replaceWithText(`"${s.trim()}"`)}}),e);function ye(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 pr=["bg-","text-","border-","ring-offset-","ring-"];function mr(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,c,p]=ye(s),d=pr.find(x=>c?.startsWith(x));if(!d){i.has(s)||i.add(s);continue}let g=c?.replace(d,"");if(g&&g in t.light){i.add([o,`${d}${t.light[g]}`].filter(Boolean).join(":")+(p?`/${p}`:"")),n.add(["dark",o,`${d}${t.dark[g]}`].filter(Boolean).join(":")+(p?`/${p}`:""));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=fr(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 fr(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 dr}from"@babel/core";import{parse as ur}from"@babel/parser";import gr from"@babel/plugin-transform-typescript";import*as X from"recast";var hr={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"]},Ze=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let i=X.parse(r,{parser:{parse:s=>ur(s,hr)}}),n=dr(i,r,{cloneInputAst:!1,code:!1,ast:!0,plugins:[gr],configFile:!1});if(!n||!n.ast)throw new Error("Failed to transform JSX");return X.print(n.ast).code};import{SyntaxKind as yr}from"ts-morph";var q=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(yr.ExpressionStatement);return r?.getText()==='"use client"'&&r.remove(),e};import{Project as br,ScriptKind as Sr}from"ts-morph";import{SyntaxKind as w}from"ts-morph";var Z=async({sourceFile:e,config:t})=>(t.tailwind?.prefix&&(e.getDescendantsOfKind(w.CallExpression).filter(r=>r.getExpression().getText()==="cva").forEach(r=>{if(r.getArguments()[0]?.isKind(w.StringLiteral)){let i=r.getArguments()[0];i&&i.replaceWithText(`"${k(i.getText()?.replace(/"/g,""),t.tailwind.prefix)}"`)}r.getArguments()[1]?.isKind(w.ObjectLiteralExpression)&&r.getArguments()[1]?.getDescendantsOfKind(w.PropertyAssignment).find(i=>i.getName()==="variants")?.getDescendantsOfKind(w.PropertyAssignment).forEach(i=>{i.getDescendantsOfKind(w.PropertyAssignment).forEach(n=>{let s=n.getInitializerIfKind(w.StringLiteral);s&&s?.replaceWithText(`"${k(s.getText()?.replace(/"/g,""),t.tailwind.prefix)}"`)})})}),e.getDescendantsOfKind(w.JsxAttribute).forEach(r=>{if(r.getName()==="className"){if(r.getInitializer()?.isKind(w.StringLiteral)){let i=r.getInitializer();i&&i.replaceWithText(`"${k(i.getText()?.replace(/"/g,""),t.tailwind.prefix)}"`)}if(r.getInitializer()?.isKind(w.JsxExpression)){let i=r.getInitializer()?.getDescendantsOfKind(w.CallExpression).find(n=>n.getExpression().getText()==="cn");i&&i.getArguments().forEach(n=>{(n.isKind(w.ConditionalExpression)||n.isKind(w.BinaryExpression))&&n.getChildrenOfKind(w.StringLiteral).forEach(s=>{s.replaceWithText(`"${k(s.getText()?.replace(/"/g,""),t.tailwind.prefix)}"`)}),n.isKind(w.StringLiteral)&&n.replaceWithText(`"${k(n.getText()?.replace(/"/g,""),t.tailwind.prefix)}"`)})}}r.getName()==="classNames"&&r.getInitializer()?.isKind(w.JsxExpression)&&r.getDescendantsOfKind(w.PropertyAssignment).forEach(i=>{if(i.getInitializer()?.isKind(w.CallExpression)){let n=i.getInitializerIfKind(w.CallExpression);n&&n.getArguments().forEach(s=>{s.isKind(w.ConditionalExpression)&&s.getChildrenOfKind(w.StringLiteral).forEach(o=>{o.replaceWithText(`"${k(o.getText()?.replace(/"/g,""),t.tailwind.prefix)}"`)}),s.isKind(w.StringLiteral)&&s.replaceWithText(`"${k(s.getText()?.replace(/"/g,""),t.tailwind.prefix)}"`)})}if(i.getInitializer()?.isKind(w.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,c]=ye(n);s?c?i.push(`${s}:${t}${o}/${c}`):i.push(`${s}:${t}${o}`):c?i.push(`${t}${o}/${c}`):i.push(`${t}${o}`)}return i.join(" ")}var Cr=new br({compilerOptions:{}});async function Pr(e){let t=await wr.mkdtemp(et.join(xr(),"shadcn-"));return et.join(t,e)}async function ee(e,t=[H,q,Q,Z]){let r=await Pr(e.filename),i=Cr.createSourceFile(r,e.raw,{scriptKind:Sr.TSX});for(let n of t)n({sourceFile:i,...e});return e.transformJsx?await Ze({sourceFile:i,...e}):i.getText()}import Tr from"prompts";function Ir(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 it(e,t,r){if(!e?.length)return;r={overwrite:!1,force:!1,silent:!1,...r};let i=y("Updating files.",{silent:r.silent})?.start(),[n,s]=await Promise.all([j(t.resolvedPaths.cwd),K(t.tailwind.baseColor)]),o=[],c=[],p=[];for(let g of e){if(!g.content)continue;let x=Je(g,t),f=vr(g.path),S=E.join(x,f);g.target&&(S=Ir(n,t,g.target),x=E.dirname(S)),t.tsx||(S=S.replace(/\.tsx?$/,se=>se===".tsx"?".jsx":".js"));let ve=tt(S);if(ve&&!r.overwrite){i.stop();let{overwrite:se}=await Tr({type:"confirm",name:"overwrite",message:`The file ${l.info(f)} already exists. Would you like to overwrite?`,initial:!1});if(!se){p.push(E.relative(t.resolvedPaths.cwd,S));continue}i?.start()}tt(x)||await rt.mkdir(x,{recursive:!0});let yt=await ee({filename:g.path,raw:g.content,config:t,baseColor:s,transformJsx:!t.tsx},[H,q,Q,Z]);await rt.writeFile(S,yt,"utf-8"),ve?c.push(E.relative(t.resolvedPaths.cwd,S)):o.push(E.relative(t.resolvedPaths.cwd,S))}if(!(o.length||c.length)&&!p.length&&i?.info("No files updated."),o.length){if(i?.succeed(`Created ${o.length} ${o.length===1?"file":"files"}:`),!r.silent)for(let g of o)a.log(` - ${g}`)}else i?.stop();if(c.length&&(y(`Updated ${c.length} ${c.length===1?"file":"files"}:`,{silent:r.silent})?.info(),!r.silent))for(let g of c)a.log(` - ${g}`);if(p.length&&(y(`Skipped ${p.length} ${c.length===1?"file":"files"}:`,{silent:r.silent})?.info(),!r.silent))for(let g of p)a.log(` - ${g}`);r.silent||a.break()}async function te(e,t,r){r={overwrite:!1,silent:!1,isNewProject:!1,...r};let i=y("Checking registry.",{silent:r.silent})?.start(),n=await Ye(e,t);if(!n)return i?.fail(),b(new Error("Failed to fetch components from registry."));i?.succeed(),await ze(n.tailwind?.config,t,{silent:r.silent}),await Xe(n.cssVars,t,{cleanupDefaultNextStyles:r.isNewProject,silent:r.silent}),await qe(n.dependencies,t,{silent:r.silent}),await it(n.files,t,{overwrite:r.overwrite,silent:r.silent}),n.docs&&a.info(n.docs)}import Rr from"path";import{execa as kr}from"execa";import we from"fs-extra";import nt from"prompts";async function re(e){if(e={srcDir:!1,...e},!e.force){let{proceed:o}=await nt({type:"confirm",name:"proceed",message:`The path ${l.info(e.cwd)} does not contain a package.json file. Would you like to start a new ${l.info("Next.js")} project?`,initial:!0});if(!o)return{projectPath:null,projectName:null}}let t=await Y(e.cwd),{name:r}=await nt({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 we.access(e.cwd,we.constants.W_OK)}catch{a.break(),a.error(`The path ${l.info(e.cwd)} is not writable.`),a.error(`It is likely you do not have write permissions for this folder or the path ${l.info(e.cwd)} does not exist.`),a.break(),process.exit(1)}we.existsSync(Rr.resolve(e.cwd,r,"package.json"))&&(a.break(),a.error(`A project with the name ${l.info(r)} already exists.`),a.error("Please choose a different name and try again."),a.break(),process.exit(1));let n=y("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 kr("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 st}from"fs";import Er from"path";import{SyntaxKind as ie}from"ts-morph";async function ot(e,t,r){if(!e)return;r={silent:!1,...r};let i=Er.relative(t.resolvedPaths.cwd,t.resolvedPaths.tailwindConfig),n=y(`Updating ${l.info(i)}`,{silent:r.silent}).start(),s=await st.readFile(t.resolvedPaths.tailwindConfig,"utf8"),o=await jr(s,e,t);await st.writeFile(t.resolvedPaths.tailwindConfig,o,"utf8"),n?.succeed()}async function jr(e,t,r){let i=await B(e,r),n=i.getDescendantsOfKind(ie.ObjectLiteralExpression).find(s=>s.getProperties().some(o=>o.isKind(ie.PropertyAssignment)&&o.getName()==="content"));return n?($r(n,t),i.getFullText()):e}async function $r(e,t){let r=de(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(ie.PropertyAssignment)){let n=i.getInitializer();if(n?.isKind(ie.ArrayLiteralExpression))for(let s of t){let o=`${r}${s}${r}`;n.getElements().map(c=>c.getText()).includes(o)||n.addElement(o)}return e}return e}import{Command as Nr}from"commander";import xe from"prompts";import{z as P}from"zod";var Ar=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()}),lt=new Nr().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=Ar.parse({cwd:at.resolve(t.cwd),isNewProject:!1,components:e,...t});await ne(r),a.log(`${l.success("Success!")} Project initialization completed.
|
|
19
|
-
You may now add components.`),a.break()}catch(r){a.break(),
|
|
20
|
-
Before you can add components, you must create a valid ${
|
|
16
|
+
`}}))})}}}function cr(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=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}`;mr(r,s,n)})}}}function qe(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 pr(){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()),qe(e);let r=e.nodes.find(i=>i.type==="atrule"&&i.params==="(prefers-color-scheme: dark)");r&&(qe(r),r.nodes.length===0&&r.remove())}}}function mr(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}}),f=i?.nodes.find(d=>d.type==="decl"&&d.prop===o);f?f.replaceWith(l):i?.append(l)})}import{detect as fr}from"@antfu/ni";async function J(e,{withFallback:t}={withFallback:!1}){let r=await fr({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 dr}from"execa";async function et(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 dr(n,[n==="npm"?"install":"add",...e],{cwd:t.resolvedPaths.cwd}),i?.succeed()}import{existsSync as it,promises as nt}from"fs";import E,{basename as Er}from"path";import{promises as Pr}from"fs";import{tmpdir as vr}from"os";import rt from"path";import{SyntaxKind as ur}from"ts-morph";var Y=async({sourceFile:e,config:t,baseColor:r})=>(t.tailwind?.cssVariables||!r?.inlineColors||e.getDescendantsOfKind(ur.StringLiteral).forEach(i=>{let n=i.getText();if(n){let s=hr(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 gr=["bg-","text-","border-","ring-offset-","ring-"];function hr(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,f]=he(s),d=gr.find(w=>l?.startsWith(w));if(!d){i.has(s)||i.add(s);continue}let m=l?.replace(d,"");if(m&&m in t.light){i.add([o,`${d}${t.light[m]}`].filter(Boolean).join(":")+(f?`/${f}`:"")),n.add(["dark",o,`${d}${t.dark[m]}`].filter(Boolean).join(":")+(f?`/${f}`:""));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=yr(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 yr(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 wr}from"@babel/core";import{parse as xr}from"@babel/parser";import br from"@babel/plugin-transform-typescript";import*as H from"recast";var Sr={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"]},tt=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let i=H.parse(r,{parser:{parse:s=>xr(s,Sr)}}),n=wr(i,r,{cloneInputAst:!1,code:!1,ast:!0,plugins:[br],configFile:!1});if(!n||!n.ast)throw new Error("Failed to transform JSX");return H.print(n.ast).code};import{SyntaxKind as Cr}from"ts-morph";var X=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(Cr.ExpressionStatement);return r?.getText()==='"use client"'&&r.remove(),e};import{Project as Rr,ScriptKind as Tr}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 Ir=new Rr({compilerOptions:{}});async function kr(e){let t=await Pr.mkdtemp(rt.join(vr(),"shadcn-"));return rt.join(t,e)}async function Z(e,t=[Q,X,Y,q]){let r=await kr(e.filename),i=Ir.createSourceFile(r,e.raw,{scriptKind:Tr.TSX});for(let n of t)n({sourceFile:i,...e});return e.transformJsx?await tt({sourceFile:i,...e}):i.getText()}import jr from"prompts";function $r(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 st(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=[],f=[];for(let m of e){if(!m.content)continue;let w=Ye(m,t),S=Er(m.path),C=E.join(w,S);m.target&&(C=$r(n,t,m.target),w=E.dirname(C)),t.tsx||(C=C.replace(/\.tsx?$/,ne=>ne===".tsx"?".jsx":".js"));let Pe=it(C);if(Pe&&!r.overwrite){i.stop();let{overwrite:ne}=await jr({type:"confirm",name:"overwrite",message:`The file ${c.info(S)} already exists. Would you like to overwrite?`,initial:!1});if(!ne){f.push(E.relative(t.resolvedPaths.cwd,C));continue}i?.start()}it(w)||await nt.mkdir(w,{recursive:!0});let xt=await Z({filename:m.path,raw:m.content,config:t,baseColor:s,transformJsx:!t.tsx},[Q,X,Y,q]);await nt.writeFile(C,xt,"utf-8"),Pe?l.push(E.relative(t.resolvedPaths.cwd,C)):o.push(E.relative(t.resolvedPaths.cwd,C))}if(!(o.length||l.length)&&!f.length&&i?.info("No files updated."),o.length){if(i?.succeed(`Created ${o.length} ${o.length===1?"file":"files"}:`),!r.silent)for(let m of o)a.log(` - ${m}`)}else i?.stop();if(l.length&&(h(`Updated ${l.length} ${l.length===1?"file":"files"}:`,{silent:r.silent})?.info(),!r.silent))for(let m of l)a.log(` - ${m}`);if(f.length&&(h(`Skipped ${f.length} ${l.length===1?"file":"files"}:`,{silent:r.silent})?.info(),!r.silent))for(let m of f)a.log(` - ${m}`);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 Qe(e,t);if(!n)return i?.fail(),x(new Error("Failed to fetch components from registry."));i?.succeed(),await ze(n.tailwind?.config,t,{silent:r.silent}),await Ze(n.cssVars,t,{cleanupDefaultNextStyles:r.isNewProject,silent:r.silent}),await et(n.dependencies,t,{silent:r.silent}),await st(n.files,t,{overwrite:r.overwrite,silent:r.silent}),n.docs&&a.info(n.docs)}import Or from"path";import{execa as Nr}from"execa";import ye from"fs-extra";import ot from"prompts";async function te(e){if(e={srcDir:!1,...e},!e.force){let{proceed:o}=await ot({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 ot({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(Or.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 Nr("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 at}from"fs";import Ar from"path";import{SyntaxKind as re}from"ts-morph";async function lt(e,t,r){if(!e)return;r={silent:!1,...r};let i=Ar.relative(t.resolvedPaths.cwd,t.resolvedPaths.tailwindConfig),n=h(`Updating ${c.info(i)}`,{silent:r.silent}).start(),s=await at.readFile(t.resolvedPaths.tailwindConfig,"utf8"),o=await Fr(s,e,t);await at.writeFile(t.resolvedPaths.tailwindConfig,o,"utf8"),n?.succeed()}async function Fr(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?(Dr(n,t),i.getFullText()):e}async function Dr(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 _r}from"commander";import we from"prompts";import{z as P}from"zod";var zr=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()}),pt=new _r().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=zr.parse({cwd:ct.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 f=await Oe(e);if(f.errors[T]){let{projectPath:d}=await te(e);d||process.exit(1),e.cwd=d,e.isNewProject=!0}t=f.projectInfo}let r=await je(e.cwd,t),i=r?await Wr(r,e):await Kr(await I(e.cwd));if(!e.yes){let{proceed:f}=await we({type:"confirm",name:"proceed",message:`Write configuration to ${c.info("components.json")}. Proceed?`,initial:!0});f||process.exit(0)}let n=h("Writing components.json.").start(),s=ct.resolve(e.cwd,"components.json");await Lr.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 lt(["./src/**/*.{js,ts,jsx,tsx,mdx}"],o,{silent:e.silent}),o}async function Kr(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 Wr(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(f=>({title:f.label,value:f.name})),initial:s.findIndex(f=>f.name===r)},{type:"select",name:"tailwindBaseColor",message:`Which color would you like to use as the ${c.info("base color")}?`,choices:o.map(f=>({title:f.label,value:f.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 mt from"path";import xe from"fs-extra";async function ft(e){let t={};if(!xe.existsSync(e.cwd)||!xe.existsSync(mt.resolve(e.cwd,"package.json")))return t[T]=!0,{errors:t,config:null};if(!xe.existsSync(mt.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 dt from"fs/promises";import Vr from"path";async function ut(e,t){let r=Vr.join(t.resolvedPaths.cwd,"app/page.tsx");if(!(await dt.stat(r)).isFile())return;let i=await Ge(e,t.style);if(!i?.meta?.importSpecifier||!i?.meta?.moduleSpecifier)return;let n=`import { ${i?.meta?.importSpecifier} } from "${i.meta.moduleSpecifier}"
|
|
21
21
|
|
|
22
22
|
export default function Page() {
|
|
23
23
|
return <${i?.meta?.importSpecifier} />
|
|
24
|
-
}`;await
|
|
25
|
-
Existing CSS variables will be overwritten. Continue?`)});
|
|
24
|
+
}`;await dt.writeFile(r,n,"utf8")}import{Command as Ur}from"commander";import be from"prompts";import{z as b}from"zod";var Gr=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()}),gt=new Ur().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=Gr.parse({components:e,cwd:Mr.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 Br(r));let{errors:n,config:s}=await ft(r);if(n[V]){let{proceed:l}=await be({type:"confirm",name:"proceed",message:`You need to create a ${c.info("components.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 ut(r.components[0],s)}catch(r){a.break(),x(r)}});async function Br(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 Jr}from"fs";import Ce from"path";import{Command as Yr}from"commander";import{diffLines as Qr}from"diff";import{z as W}from"zod";var Hr=W.object({component:W.string().optional(),yes:W.boolean(),cwd:W.string(),path:W.string().optional()}),yt=new Yr().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=Hr.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 f=n.resolvedPaths.components,d=s.filter(w=>{for(let S of w.files??[]){let C=Ce.resolve(f,typeof S=="string"?S:S.path);if(Se(C))return!0}return!1}),m=[];for(let w of d){let S=await ht(w,n);S.length&&m.push({name:w.name,changes:S})}m.length||(a.info("No updates found."),process.exit(0)),a.info("The following components have updates available:");for(let w of m){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(f=>f.name===r.component);o||(a.error(`The component ${c.success(r.component)} does not exist.`),process.exit(1));let l=await ht(o,n);l.length||(a.info(`No updates found for ${r.component}.`),process.exit(0));for(let f of l)a.info(`- ${f.filePath}`),await Xr(f.patch),a.info("")}catch(r){x(r)}});async function ht(e,t){let r=await Be(t.style,[e]),i=await K(t.tailwind.baseColor);if(!r)return[];let n=[];for(let s of r){let o=await Je(t,s);if(o)for(let l of s.files??[]){let f=Ce.resolve(o,typeof l=="string"?l:l.path);if(!Se(f))continue;let d=await Jr.readFile(f,"utf8");if(typeof l=="string"||!l.content)continue;let m=await Z({filename:l.path,raw:l.content,config:t,baseColor:i}),w=Qr(m,d);w.length>1&&n.push({filePath:f,patch:w})}}return n}async function Xr(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 Zr}from"commander";var wt={name:"shadcn",version:"2.1.0",description:"Add components to your apps.",publishConfig:{access:"public"},license:"MIT",author:{name:"shadcn",url:"https://twitter.com/shadcn"},repository:{type:"git",url:"https://github.com/shadcn/ui.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 ei(){let e=new Zr().name("shadcn").description("add components and dependencies to your project").version(wt.version||"1.0.0","-v, --version","display the version number");e.addCommand(pt).addCommand(gt).addCommand(yt),e.parse()}ei();
|
|
26
26
|
//# sourceMappingURL=index.js.map
|