dopx
Version:
Add beautiful components to your apps 🐳
74 lines (70 loc) • 72 kB
JavaScript
#!/usr/bin/env node
import { a as a$1 } from './chunk-RNFW37EL.js';
import { N, u, v, R, r, a, x as x$1, o, h, p, s, i, P, S, e, f, c, d, g, q as q$1, w, m, O, H as H$1, G, V, T, W, t, j, Z, y, aa, X as X$1, ca, ba, l, k, z as z$1, A as A$1, Q as Q$1, n, b } from './chunk-CAUXGYZZ.js';
export { N as BASE_COLORS, Y as clearRegistryCache, X as fetchRegistry, V as fetchTree, W as getItemTargetPath, T as getRegistryBaseColor, S as getRegistryBaseColors, Q as getRegistryIcons, O as getRegistryIndex, R as getRegistryItem, ca as getRegistryParentMap, P as getRegistryStyles, ba as getRegistryTypeAliasMap, $ as isUrl, _ as registryGetTheme, Z as registryResolveItemsTree, aa as resolveRegistryItems, U as resolveTree } from './chunk-CAUXGYZZ.js';
import Li, { promises, existsSync } from 'fs';
import * as x from 'path';
import x__default, { basename } from 'path';
import Q from 'fs-extra';
import S$1 from 'postcss';
import vr from 'postcss/lib/at-rule';
import { z } from 'zod';
import { detect } from '@antfu/ni';
import { execa } from 'execa';
import qe from 'prompts';
import Ii, { tmpdir } from 'os';
import { Project, ScriptKind, SyntaxKind } from 'ts-morph';
import { transformFromAstSync } from '@babel/core';
import { parse } from '@babel/parser';
import Zr from '@babel/plugin-transform-typescript';
import * as Ie from 'recast';
import { loadConfig } from 'tsconfig-paths';
import { Command } from 'commander';
import * as M from 'fs/promises';
import M__default from 'fs/promises';
import { diffLines } from 'diff';
import { randomBytes } from 'crypto';
import Qi from 'fast-glob';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
var A="1";var D="3";var se="5",ze="6",jt="7";var q="13";async function Et(e){let t={};if(!Q.existsSync(e.cwd)||!Q.existsSync(x__default.resolve(e.cwd,"package.json")))return t[A]=!0,{errors:t,projectInfo:null};let r$1=s("Preflight checks.",{silent:e.silent}).start();Q.existsSync(x__default.resolve(e.cwd,"components.json"))&&!e.force&&(r$1?.fail(),r.break(),r.error(`A ${a.info("components.json")} file already exists at ${a.info(e.cwd)}.
To start over, remove the ${a.info("components.json")} file and run ${a.info("init")} again.`),r.break(),process.exit(1)),r$1?.succeed();let i=s("Verifying framework.",{silent:e.silent}).start(),o$1=await o(e.cwd);(!o$1||o$1?.framework.name==="manual")&&(t[jt]=!0,i?.fail(),r.break(),o$1?.framework.links.installation&&r.error(`We could not detect a supported framework at ${a.info(e.cwd)}.
Visit ${a.info(o$1?.framework.links.installation)} to manually configure your project.
Once configured, you can use the cli to add components.`),r.break(),process.exit(1)),i?.succeed(`Verifying framework. Found ${a.info(o$1.framework.label)}.`);let n="Validating Tailwind CSS.";o$1.tailwindVersion==="v4"&&(n=`Validating Tailwind CSS config. Found ${a.info("v4")}.`);let a$1=s(n,{silent:e.silent}).start();o$1.tailwindVersion==="v3"&&(!o$1?.tailwindConfigFile||!o$1?.tailwindCssFile)?(t[se]=!0,a$1?.fail()):o$1.tailwindVersion==="v4"&&!o$1?.tailwindCssFile?(t[se]=!0,a$1?.fail()):o$1.tailwindVersion?a$1?.succeed():(t[se]=!0,a$1?.fail());let s$1=s("Validating import alias.",{silent:e.silent}).start();return o$1?.aliasPrefix?s$1?.succeed():(t[ze]=!0,s$1?.fail()),Object.keys(t).length>0&&(t[se]&&(r.break(),r.error(`No Tailwind CSS configuration found at ${a.info(e.cwd)}.`),r.error("It is likely you do not have Tailwind CSS installed or have an invalid configuration."),r.error("Install Tailwind CSS then try again."),o$1?.framework.links.tailwind&&r.error(`Visit ${a.info(o$1?.framework.links.tailwind)} to get started.`)),t[ze]&&(r.break(),r.error("No import alias found in your tsconfig.json file."),o$1?.framework.links.installation&&r.error(`Visit ${a.info(o$1?.framework.links.installation)} to learn how to set an import alias.`)),r.break(),process.exit(1)),{errors:t,projectInfo:o$1}}function $t(e,t){if(e.includes("\0"))return !1;let r;try{r=e;let u="";for(;r!==u&&r.includes("%");)u=r,r=decodeURIComponent(r);}catch{return !1}let i=x__default.normalize(r.replace(/\\/g,"/")),o=x__default.normalize(t),n=u=>u.replace(/\[\.\.\..*?\]/g,"").includes("..");if(n(i)||n(r)||n(e))return !1;let a=u=>u.replace(/\[\.\.\..*?\]/g,""),s=a(e),c=a(r);if([/\.\.[\/\\]/,/[\/\\]\.\./,/\.\./,/\.\.%/,/\x00/,/[\x01-\x1f]/].some(u=>u.test(s)||u.test(c))||(e.includes("~")||r.includes("~"))&&(e.includes("../")||r.includes("../")))return !1;if(/^[a-zA-Z]:[\/\\]/.test(r))return process.platform==="win32"?r.toLowerCase().startsWith(t.toLowerCase()):!1;if(x__default.isAbsolute(i))return i.startsWith(o+x__default.sep);let m=x__default.resolve(o,i);return m.startsWith(o+x__default.sep)||m===o}async function Be(e,t,r){if(!t.resolvedPaths.tailwindCss||!e||Object.keys(e).length===0)return;r={silent:!1,...r};let i=t.resolvedPaths.tailwindCss,o=x__default.relative(t.resolvedPaths.cwd,i),n=s(`Updating ${a.info(o)}`,{silent:r.silent}).start(),a$1=await promises.readFile(i,"utf8"),s$1=await br(a$1,e);await promises.writeFile(i,s$1,"utf8"),n.succeed();}async function br(e,t){let r=[Sr(t)],o=(await S$1(r).process(e,{from:void 0})).css;return o=o.replace(/\/\* ---break--- \*\//g,""),o=o.replace(/(\n\s*\n)+/g,`
`),o=o.trimEnd(),o}function Sr(e){return {postcssPlugin:"update-css",Once(t){for(let[r,i]of Object.entries(e))if(r.startsWith("@")){let o=r.match(/@([a-zA-Z-]+)\s*(.*)/);if(!o)continue;let[,n,a]=o;if(n==="plugin"){if(!t.nodes?.find(c=>c.type==="atrule"&&c.name==="plugin"&&c.params===a)){let c=S$1.atRule({name:"plugin",params:a,raws:{semicolon:!0,before:`
`}}),l=t.nodes?.filter(m=>m.type==="atrule"&&m.name==="import"),f=t.nodes?.filter(m=>m.type==="atrule"&&m.name==="plugin");if(f&&f.length>0){let m=f[f.length-1];t.insertAfter(m,c);}else if(l&&l.length>0){let m=l[l.length-1];t.insertAfter(m,c),t.insertBefore(c,S$1.comment({text:"---break---"})),t.insertAfter(c,S$1.comment({text:"---break---"}));}else t.prepend(c),t.insertBefore(c,S$1.comment({text:"---break---"})),t.insertAfter(c,S$1.comment({text:"---break---"}));}}else if(n==="keyframes"){let s=t.nodes?.find(l=>l.type==="atrule"&&l.name==="theme"&&l.params==="inline");s||(s=S$1.atRule({name:"theme",params:"inline",raws:{semicolon:!0,between:" ",before:`
`}}),t.append(s),t.insertBefore(s,S$1.comment({text:"---break---"})));let c=S$1.atRule({name:"keyframes",params:a,raws:{semicolon:!0,between:" ",before:`
`}});if(s.append(c),typeof i=="object")for(let[l,f]of Object.entries(i))te(c,l,f);}else if(n==="utility"){let s=t.nodes?.find(c=>c.type==="atrule"&&c.name===n&&c.params===a);if(s){if(typeof i=="object")for(let[c,l]of Object.entries(i))if(typeof l=="string"){let f=s.nodes?.find(u=>u.type==="decl"&&u.prop===c),m=S$1.decl({prop:c,value:l,raws:{semicolon:!0,before:`
`}});f?f.replaceWith(m):s.append(m);}else typeof l=="object"&&te(s,c,l);}else {let c=S$1.atRule({name:n,params:a,raws:{semicolon:!0,between:" ",before:`
`}});if(t.append(c),t.insertBefore(c,S$1.comment({text:"---break---"})),typeof i=="object")for(let[l,f]of Object.entries(i))if(typeof f=="string"){let m=S$1.decl({prop:l,value:f,raws:{semicolon:!0,before:`
`}});c.append(m);}else typeof f=="object"&&te(c,l,f);}}else Nt(t,n,a,i);}else te(t,r,i);}}}function Nt(e,t,r,i){let o=e.nodes?.find(n=>n.type==="atrule"&&n.name===t&&n.params===r);if(o||(o=S$1.atRule({name:t,params:r,raws:{semicolon:!0,between:" ",before:`
`}}),e.append(o),e.insertBefore(o,S$1.comment({text:"---break---"}))),typeof i=="object")for(let[n,a]of Object.entries(i))if(n.startsWith("@")){let s=n.match(/@([a-zA-Z-]+)\s*(.*)/);if(s){let[,c,l]=s;Nt(o,c,l,a);}}else te(o,n,a);else if(typeof i=="string")try{let a=S$1.parse(`.temp{${i}}`).first;if(a&&a.nodes){let s=S$1.rule({selector:"temp",raws:{semicolon:!0,between:" ",before:`
`}});a.nodes.forEach(c=>{if(c.type==="decl"){let l=c.clone();l.raws.before=`
`,s.append(l);}}),s.nodes?.length&&o.append(s);}}catch(n){throw console.error("Error parsing at-rule content:",i,n),n}}function te(e,t,r){let i=e.nodes?.find(o=>o.type==="rule"&&o.selector===t);if(i||(i=S$1.rule({selector:t,raws:{semicolon:!0,between:" ",before:`
`}}),e.append(i)),typeof r=="object"){for(let[o,n]of Object.entries(r))if(typeof n=="string"){let a=S$1.decl({prop:o,value:n,raws:{semicolon:!0,before:`
`}}),s=i.nodes?.find(c=>c.type==="decl"&&c.prop===o);s?s.replaceWith(a):i.append(a);}else if(typeof n=="object"){let a=o.startsWith("&")?t.replace(/^([^:]+)/,`$1${o.substring(1)}`):o;te(e,a,n);}}else if(typeof r=="string")try{let n=S$1.parse(`.temp{${r}}`).first;n&&n.nodes&&n.nodes.forEach(a=>{if(a.type==="decl"){let s=a.clone();s.raws.before=`
`,i?.append(s);}});}catch(o){throw console.error("Error parsing rule content:",t,r,o),o}}async function Ue(e,t,r){if(!t.resolvedPaths.tailwindCss||!Object.keys(e??{}).length)return;r={cleanupDefaultNextStyles:!1,silent:!1,tailwindVersion:"v3",overwriteCssVars:!1,initIndex:!0,...r};let i=t.resolvedPaths.tailwindCss,o=x__default.relative(t.resolvedPaths.cwd,i),n=s(`Updating CSS variables in ${a.info(o)}`,{silent:r.silent}).start(),a$1=await promises.readFile(i,"utf8"),s$1=await Ir(a$1,e??{},t,{cleanupDefaultNextStyles:r.cleanupDefaultNextStyles,tailwindVersion:r.tailwindVersion,tailwindConfig:r.tailwindConfig,overwriteCssVars:r.overwriteCssVars,initIndex:r.initIndex});await promises.writeFile(i,s$1,"utf8"),n.succeed();}async function Ir(e,t,r,i={cleanupDefaultNextStyles:!1,tailwindVersion:"v3",tailwindConfig:void 0,overwriteCssVars:!1,initIndex:!0}){i={cleanupDefaultNextStyles:!1,tailwindVersion:"v3",tailwindConfig:void 0,overwriteCssVars:!1,initIndex:!0,...i};let o=[Cr(t)];if(i.cleanupDefaultNextStyles&&o.push(Ft()),i.tailwindVersion==="v4"){if(o=[],r.resolvedPaths?.cwd){let s=n(r.resolvedPaths.cwd);!s?.dependencies?.["tailwindcss-animate"]&&!s?.devDependencies?.["tailwindcss-animate"]&&i.initIndex&&o.push($r({params:"tw-animate-css"}));}o.push(Er({params:"dark (&:is(.dark *))"})),i.cleanupDefaultNextStyles&&o.push(Ft()),o.push(jr(t,{overwriteCssVars:i.overwriteCssVars})),o.push(Tr(t)),i.tailwindConfig&&(o.push(Or(i.tailwindConfig)),o.push(Ar(i.tailwindConfig)),o.push(Nr(i.tailwindConfig)));}r.tailwind.cssVariables&&i.initIndex&&o.push(Pr({tailwindVersion:i.tailwindVersion}));let a=(await S$1(o).process(e,{from:void 0})).css;return a=a.replace(/\/\* ---break--- \*\//g,""),i.tailwindVersion==="v4"&&(a=a.replace(/(\n\s*\n)+/g,`
`)),a}function Pr({tailwindVersion:e}){return {postcssPlugin:"update-base-layer",Once(t){let r=[{selector:"*",apply:e==="v4"?"border-border outline-ring/50":"border-border"},{selector:"body",apply:"bg-background text-foreground"}],i=t.nodes.find(o=>o.type==="atrule"&&o.name==="layer"&&o.params==="base"&&r.every(({selector:n,apply:a})=>o.nodes?.some(s=>s.type==="rule"&&s.selector===n&&s.nodes.some(c=>c.type==="atrule"&&c.name==="apply"&&c.params===a))));i||(i=S$1.atRule({name:"layer",params:"base",raws:{semicolon:!0,between:" ",before:`
`}}),t.append(i),t.insertBefore(i,S$1.comment({text:"---break---"}))),r.forEach(({selector:o,apply:n})=>{i?.nodes?.find(s=>s.type==="rule"&&s.selector===o)||i?.append(S$1.rule({selector:o,nodes:[S$1.atRule({name:"apply",params:n,raws:{semicolon:!0,before:`
`}})],raws:{semicolon:!0,between:" ",before:`
`}}));});}}}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 vr||(r=S$1.atRule({name:"layer",params:"base",nodes:[],raws:{semicolon:!0,before:`
`,between:" "}}),t.append(r),t.insertBefore(r,S$1.comment({text:"---break---"}))),r!==void 0&&Object.entries(e).forEach(([i,o])=>{let n=i==="light"?":root":`.${i}`;kr(r,n,o);});}}}function Dt(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 Ft(){return {postcssPlugin:"cleanup-default-next-styles",Once(e){let t=e.nodes.find(i=>i.type==="rule"&&i.selector==="body");t&&(t.nodes.find(i=>i.type==="decl"&&i.prop==="color"&&["rgb(var(--foreground-rgb))","var(--foreground)"].includes(i.value))?.remove(),t.nodes.find(i=>i.type==="decl"&&i.prop==="background"&&(i.value.startsWith("linear-gradient")||i.value==="var(--background)"))?.remove(),t.nodes.find(i=>i.type==="decl"&&i.prop==="font-family"&&i.value==="Arial, Helvetica, sans-serif")?.remove(),t.nodes.length===0&&t.remove()),Dt(e);let r=e.nodes.find(i=>i.type==="atrule"&&i.params==="(prefers-color-scheme: dark)");r&&(Dt(r),r.nodes.length===0&&r.remove());}}}function kr(e,t,r){let i=e.nodes?.find(o=>o.type==="rule"&&o.selector===t);i||Object.keys(r).length>0&&(i=S$1.rule({selector:t,raws:{between:" ",before:`
`}}),e.append(i)),Object.entries(r).forEach(([o,n])=>{let a=`--${o.replace(/^--/,"")}`,s=S$1.decl({prop:a,value:n,raws:{semicolon:!0}}),c=i?.nodes.find(l=>l.type==="decl"&&l.prop===a);c?c.replaceWith(s):i?.append(s);});}function jr(e,t){return {postcssPlugin:"update-css-vars-v4",Once(r){Object.entries(e).forEach(([i,o])=>{let n=i==="light"?":root":`.${i}`;if(i==="theme"){n="@theme";let s=xe(r);Object.entries(o).forEach(([c,l])=>{let f=`--${c.replace(/^--/,"")}`,m=S$1.decl({prop:f,value:l,raws:{semicolon:!0}}),u=s?.nodes?.find(h=>h.type==="decl"&&h.prop===f);t.overwriteCssVars?u?u.replaceWith(m):s?.append(m):u||s?.append(m);});return}let a=r.nodes?.find(s=>s.type==="rule"&&s.selector===n);!a&&Object.keys(o).length>0&&(a=S$1.rule({selector:n,nodes:[],raws:{semicolon:!0,between:" ",before:`
`}}),r.append(a),r.insertBefore(a,S$1.comment({text:"---break---"}))),Object.entries(o).forEach(([s,c])=>{let l=`--${s.replace(/^--/,"")}`;l==="--sidebar-background"&&(l="--sidebar"),_t(c)&&(c=`hsl(${c})`);let f=S$1.decl({prop:l,value:c,raws:{semicolon:!0}}),m=a?.nodes.find(u=>u.type==="decl"&&u.prop===l);t.overwriteCssVars?m?m.replaceWith(f):a?.append(f):m||a?.append(f);});});}}}function Tr(e){return {postcssPlugin:"update-theme",Once(t){let r=Array.from(new Set(Object.keys(e).flatMap(n=>Object.keys(e[n]||{}))));if(!r.length)return;let i=xe(t),o=i.nodes?.filter(n=>n.type==="decl"&&n.prop.startsWith("--"));for(let n of r){let a=Object.values(e).find(m=>m[n])?.[n];if(!a)continue;if(n==="radius"){let m={sm:"calc(var(--radius) - 4px)",md:"calc(var(--radius) - 2px)",lg:"var(--radius)",xl:"calc(var(--radius) + 4px)"};for(let[u,h]of Object.entries(m)){let y=S$1.decl({prop:`--radius-${u}`,value:h,raws:{semicolon:!0}});i?.nodes?.find(R=>R.type==="decl"&&R.prop===y.prop)||i?.append(y);}continue}let s=_t(a)||Fr(a)?`--color-${n.replace(/^--/,"")}`:`--${n.replace(/^--/,"")}`;s==="--color-sidebar-background"&&(s="--color-sidebar");let c=`var(--${n})`;s==="--color-sidebar"&&(c="var(--sidebar)");let l=S$1.decl({prop:s,value:c,raws:{semicolon:!0}});i?.nodes?.find(m=>m.type==="decl"&&m.prop===l.prop)||(o?.length?i?.insertAfter(o[o.length-1],l):i?.append(l));}}}}function xe(e){let t=e.nodes.find(r=>r.type==="atrule"&&r.name==="theme"&&r.params==="inline");return t||(t=S$1.atRule({name:"theme",params:"inline",nodes:[],raws:{semicolon:!0,between:" ",before:`
`}}),e.append(t),e.insertBefore(t,S$1.comment({text:"---break---"}))),t}function Er({params:e}){return {postcssPlugin:"add-custom-variant",Once(t){if(!t.nodes.find(i=>i.type==="atrule"&&i.name==="custom-variant")){let i=t.nodes.filter(n=>n.type==="atrule"&&n.name==="import"),o=S$1.atRule({name:"custom-variant",params:e,raws:{semicolon:!0,before:`
`}});if(i.length>0){let n=i[i.length-1];t.insertAfter(n,o);}else t.insertAfter(t.nodes[0],o);t.insertBefore(o,S$1.comment({text:"---break---"}));}}}}function $r({params:e}){return {postcssPlugin:"add-custom-import",Once(t){let r=t.nodes.filter(n=>n.type==="atrule"&&n.name==="import"),i=t.nodes.find(n=>n.type==="atrule"&&n.name==="custom-variant");if(!r.some(n=>n.params.replace(/["']/g,"")===e)){let n=S$1.atRule({name:"import",params:`"${e}"`,raws:{semicolon:!0,before:`
`}});if(r.length>0){let a=r[r.length-1];t.insertAfter(a,n);}else i?(t.insertBefore(i,n),t.insertBefore(i,S$1.comment({text:"---break---"}))):(t.prepend(n),t.insertAfter(n,S$1.comment({text:"---break---"})));}}}}function Or(e){return {postcssPlugin:"update-tailwind-config",Once(t){if(!e?.plugins)return;let i=Dr(t)==="single"?"'":'"',o=t.nodes.filter(a=>a.type==="atrule"&&a.name==="plugin"),n=o[o.length-1]||t.nodes[0];for(let a of e.plugins){let s=a.replace(/^require\(["']|["']\)$/g,"");if(o.some(l=>l.params.replace(/["']/g,"")===s))continue;let c=S$1.atRule({name:"plugin",params:`${i}${s}${i}`,raws:{semicolon:!0,before:`
`}});t.insertAfter(n,c),t.insertBefore(c,S$1.comment({text:"---break---"}));}}}}function Nr(e){return {postcssPlugin:"update-tailwind-config-keyframes",Once(t){if(!e?.theme?.extend?.keyframes)return;let r=xe(t),i=r.nodes?.filter(n=>n.type==="atrule"&&n.name==="keyframes"),o=z.record(z.string(),z.record(z.string(),z.string()));for(let[n,a]of Object.entries(e.theme.extend.keyframes)){if(typeof n!="string")continue;let s=o.safeParse(a);if(!s.success||i?.find(l=>l.type==="atrule"&&l.name==="keyframes"&&l.params===n))continue;let c=S$1.atRule({name:"keyframes",params:n,nodes:[],raws:{semicolon:!0,between:" ",before:`
`}});for(let[l,f]of Object.entries(s.data)){let m=S$1.rule({selector:l,nodes:Object.entries(f).map(([u,h])=>S$1.decl({prop:u,value:h,raws:{semicolon:!0,before:`
`,between:": "}})),raws:{semicolon:!0,between:" ",before:`
`}});c.append(m);}r.append(c),r.insertBefore(c,S$1.comment({text:"---break---"}));}}}}function Ar(e){return {postcssPlugin:"update-tailwind-config-animation",Once(t){if(!e?.theme?.extend?.animation)return;let r=xe(t),i=r.nodes?.filter(n=>n.type==="decl"&&n.prop.startsWith("--animate-")),o=z.record(z.string(),z.string()).safeParse(e.theme.extend.animation);if(o.success)for(let[n,a]of Object.entries(o.data)){let s=`--animate-${n}`;if(i?.find(l=>l.prop===s))continue;let c=S$1.decl({prop:s,value:a,raws:{semicolon:!0,between:": ",before:`
`}});r.append(c);}}}}function Dr(e){return e.nodes[0].toString().includes("'")?"single":"double"}function _t(e){if(e.startsWith("hsl")||e.startsWith("rgb")||e.startsWith("#")||e.startsWith("oklch"))return !1;let t=e.split(" ");return t.length===3&&t.slice(1,3).every(r=>r.includes("%"))}function Fr(e){return e.startsWith("hsl")||e.startsWith("rgb")||e.startsWith("#")||e.startsWith("oklch")}async function be(e,{withFallback:t}={withFallback:!1}){let r=await detect({programmatic:!0,cwd:e});if(r==="yarn@berry")return "yarn";if(r==="pnpm@6")return "pnpm";if(r==="bun")return "bun";if(r==="deno")return "deno";if(!t)return r??"npm";let i=process.env.npm_config_user_agent||"";return i.startsWith("yarn")?"yarn":i.startsWith("pnpm")?"pnpm":i.startsWith("bun")?"bun":"npm"}async function H(e,t,r$1,i){if(e=Array.from(new Set(e)),t=Array.from(new Set(t)),!e?.length&&!t?.length)return;i={silent:!1,...i};let o=s("Installing dependencies.",{silent:i.silent})?.start(),n=await Mr(r$1),a="";if(Vr(r$1)&&n==="npm")if(i.silent)a="force";else {o.stopAndPersist(),r.warn(`
It looks like you are using React 19.
Some packages may fail to install due to peer dependency issues in npm (see https://dolphin-ui.com/react-19).
`);let s=await qe([{type:"select",name:"flag",message:"How would you like to proceed?",choices:[{title:"Use --force",value:"force"},{title:"Use --legacy-peer-deps",value:"legacy-peer-deps"}]}]);s&&(a=s.flag);}o?.start(),await zr(n,e,t,r$1.resolvedPaths.cwd,a),o?.succeed();}function Vr(e){let t=n(e.resolvedPaths.cwd,!1);if(!t?.dependencies?.react)return !1;let r=/^(?:\^|~)?19(?:\.\d+)*(?:-.*)?$/.test(t.dependencies.react),i=t.dependencies["react-day-picker"]?.startsWith("8");return r&&i}async function Mr(e){return n(e.resolvedPaths.cwd,!1)?.dependencies?.expo?"expo":be(e.resolvedPaths.cwd)}async function zr(e,t,r,i,o){if(e==="npm")return Wr(t,r,i,o);if(e==="deno")return Br(t,r,i);if(e==="expo")return Ur(t,r,i);t?.length&&await execa(e,["add",...t],{cwd:i}),r?.length&&await execa(e,["add","-D",...r],{cwd:i});}async function Wr(e,t,r,i){e.length&&await execa("npm",["install",...i?[`--${i}`]:[],...e],{cwd:r}),t.length&&await execa("npm",["install",...i?[`--${i}`]:[],"-D",...t],{cwd:r});}async function Br(e,t,r){e?.length&&await execa("deno",["add",...e.map(i=>`npm:${i}`)],{cwd:r}),t?.length&&await execa("deno",["add","-D",...t.map(i=>`npm:${i}`)],{cwd:r});}async function Ur(e,t,r){e.length&&await execa("npx",["expo","install",...e],{cwd:r}),t.length&&await execa("npx",["expo","install","-- -D",...t],{cwd:r});}var Se=async({sourceFile:e,config:t,baseColor:r})=>(t.tailwind?.cssVariables||!r?.inlineColors||e.getDescendantsOfKind(SyntaxKind.StringLiteral).forEach(i=>{let o=i.getText();if(o){let n=Jr(o.replace(/"/g,""),r.inlineColors);i.replaceWithText(`"${n.trim()}"`);}}),e);function Ke(e){if(!e.includes("/")&&!e.includes(":"))return [null,e,null];let t=[],[r,i]=e.split("/");if(!r.includes(":"))return [null,r,i];let o=r.split(":"),n=o.pop(),a=o.join(":");return t.push(a??null,n??null,i??null),t}var Gr=["bg-","text-","border-","ring-offset-","ring-"];function Jr(e,t){e.includes(" border ")&&(e=e.replace(" border "," border border-border "));let r=e.split(" "),i=new Set,o=new Set;for(let n of r){let[a,s,c]=Ke(n),l=Gr.find(m=>s?.startsWith(m));if(!l){i.has(n)||i.add(n);continue}let f=s?.replace(l,"");if(f&&f in t.light){i.add([a,`${l}${t.light[f]}`].filter(Boolean).join(":")+(c?`/${c}`:"")),o.add(["dark",a,`${l}${t.dark[f]}`].filter(Boolean).join(":")+(c?`/${c}`:""));continue}i.has(n)||i.add(n);}return [...Array.from(i),...Array.from(o)].join(" ").trim()}var F={lucide:{name:"lucide-react",package:"lucide-react",import:"lucide-react"},radix:{name:"@radix-ui/react-icons",package:"@radix-ui/react-icons",import:"@radix-ui/react-icons"}};var Lt="lucide",Re=async({sourceFile:e,config:t})=>{if(!t.iconLibrary||!(t.iconLibrary in F))return e;let r=await Q$1(),i=Lt,o=t.iconLibrary;if(i===o)return e;let n=[];for(let a of e.getImportDeclarations()??[])if(a.getModuleSpecifier()?.getText()===`"${F[Lt].import}"`){for(let s of a.getNamedImports()??[]){let c=s.getName(),l=r[c]?.[o];!l||n.includes(l)||(n.push(l),s.remove(),e.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement).filter(f=>f.getTagNameNode()?.getText()===c).forEach(f=>f.getTagNameNode()?.replaceWithText(l)));}a.getNamedImports()?.length===0&&a.remove();}if(n.length>0){let a=e.addImportDeclaration({moduleSpecifier:F[o]?.import,namedImports:n.map(s=>({name:s}))});qr(e)||a.replaceWithText(a.getText().replace(";",""));}return e};function qr(e){return e.getImportDeclarations()?.[0]?.getText().endsWith(";")??!1}var ve=async({sourceFile:e,config:t,isRemote:r})=>{let o=`@${t.aliases?.utils?.split("/")[0]?.slice(1)}/lib/utils`,n=e.getImportDeclarations();if(![".tsx",".ts",".jsx",".js"].includes(e.getExtension()))return e;for(let a of n){let s=Hr(a.getModuleSpecifierValue(),t,r);a.setModuleSpecifier(s),(o===s||s==="@/lib/utils")&&a.getNamedImports().find(f=>f.getName()==="cn")&&a.setModuleSpecifier(o===s?s.replace(o,t.aliases.utils):t.aliases.utils);}return e};function Hr(e,t,r=!1){if(!e.startsWith("@/")&&!r)return e;if(r&&e.startsWith("@/")&&(e=e.replace(/^@\//,"@/registry/new-york/")),!e.startsWith("@/registry/")){let i=t.aliases.components.split("/")[0];return e.replace(/^@\//,`${i}/`)}return e.match(/^@\/registry\/(.+)\/ui/)?e.replace(/^@\/registry\/(.+)\/ui/,t.aliases.ui??`${t.aliases.components}/ui`):t.aliases.components&&e.match(/^@\/registry\/(.+)\/components/)?e.replace(/^@\/registry\/(.+)\/components/,t.aliases.components):t.aliases.lib&&e.match(/^@\/registry\/(.+)\/lib/)?e.replace(/^@\/registry\/(.+)\/lib/,t.aliases.lib):t.aliases.hooks&&e.match(/^@\/registry\/(.+)\/hooks/)?e.replace(/^@\/registry\/(.+)\/hooks/,t.aliases.hooks):e.replace(/^@\/registry\/[^/]+/,t.aliases.components)}var ei={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"]},Vt=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let i=Ie.parse(r,{parser:{parse:n=>parse(n,ei)}}),o=transformFromAstSync(i,r,{cloneInputAst:!1,code:!1,ast:!0,plugins:[Zr],configFile:!1});if(!o||!o.ast)throw new Error("Failed to transform JSX");return Ie.print(o.ast).code};var ri=/^["']use client["']$/g,Pe=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(SyntaxKind.ExpressionStatement);return r&&ri.test(r.getText())&&r.remove(),e};var Ce=async({sourceFile:e,config:t})=>{if(!t.tailwind?.prefix)return e;let r=await q$1(t);return e.getDescendantsOfKind(SyntaxKind.CallExpression).filter(i=>i.getExpression().getText()==="cva").forEach(i=>{if(i.getArguments()[0]?.isKind(SyntaxKind.StringLiteral)){let o=i.getArguments()[0];o&&o.replaceWithText(`"${B(o.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);}i.getArguments()[1]?.isKind(SyntaxKind.ObjectLiteralExpression)&&i.getArguments()[1]?.getDescendantsOfKind(SyntaxKind.PropertyAssignment).find(o=>o.getName()==="variants")?.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach(o=>{o.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach(n=>{let a=n.getInitializerIfKind(SyntaxKind.StringLiteral);a&&a?.replaceWithText(`"${B(a.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);});});}),e.getDescendantsOfKind(SyntaxKind.JsxAttribute).forEach(i=>{if(i.getName()==="className"){if(i.getInitializer()?.isKind(SyntaxKind.StringLiteral)){let o=i.getInitializer();o&&o.replaceWithText(`"${B(o.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);}if(i.getInitializer()?.isKind(SyntaxKind.JsxExpression)){let o=i.getInitializer()?.getDescendantsOfKind(SyntaxKind.CallExpression).find(n=>n.getExpression().getText()==="cn");o&&o.getArguments().forEach(n=>{(n.isKind(SyntaxKind.ConditionalExpression)||n.isKind(SyntaxKind.BinaryExpression))&&n.getChildrenOfKind(SyntaxKind.StringLiteral).forEach(a=>{a.replaceWithText(`"${B(a.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);}),n.isKind(SyntaxKind.StringLiteral)&&n.replaceWithText(`"${B(n.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);});}}i.getName()==="classNames"&&i.getInitializer()?.isKind(SyntaxKind.JsxExpression)&&i.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach(o=>{if(o.getInitializer()?.isKind(SyntaxKind.CallExpression)){let n=o.getInitializerIfKind(SyntaxKind.CallExpression);n&&n.getArguments().forEach(a=>{a.isKind(SyntaxKind.ConditionalExpression)&&a.getChildrenOfKind(SyntaxKind.StringLiteral).forEach(s=>{s.replaceWithText(`"${B(s.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);}),a.isKind(SyntaxKind.StringLiteral)&&a.replaceWithText(`"${B(a.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);});}if(o.getInitializer()?.isKind(SyntaxKind.StringLiteral)&&o.getName()!=="variant"){let n=o.getInitializer();n&&n.replaceWithText(`"${B(n.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);}});}),e};function B(e,t="",r){return r==="v3"?e.split(" ").map(i=>{let[o,n,a]=Ke(i);return o?a?`${o}:${t}${n}/${a}`:`${o}:${t}${n}`:a?`${t}${n}/${a}`:`${t}${n}`}).join(" "):e.split(" ").map(i=>i.indexOf(`${t}:`)===0?i:`${t}:${i.trim()}`).join(" ")}var ai=new Project({compilerOptions:{}});async function ci(e){let t=await promises.mkdtemp(x__default.join(tmpdir(),"dopx-"));return x__default.join(t,e)}async function ke(e,t=[ve,Pe,Se,Ce,Re]){let r=await ci(e.filename),i=ai.createSourceFile(r,e.raw,{scriptKind:ScriptKind.TSX});for(let o of t)await o({sourceFile:i,...e});return e.transformJsx?await Vt({sourceFile:i,...e}):i.getText()}async function Ge(e,t,r$1){if(!e?.length)return {filesCreated:[],filesUpdated:[],filesSkipped:[]};r$1={overwrite:!1,force:!1,silent:!1,isRemote:!1,...r$1};let i=s("Updating files.",{silent:r$1.silent})?.start(),[o$1,n]=await Promise.all([o(t.resolvedPaths.cwd),t.tailwind.baseColor?T(t.tailwind.baseColor):Promise.resolve(void 0)]),a$1=[],s$1=[],c=[];for(let u of e){if(!u.content)continue;let h=ui(u,t,{isSrcDir:o$1?.isSrcDir,framework:o$1?.framework.name,commonRoot:hi(e.map(k=>k.path),u.path)});if(!h)continue;let y=basename(u.path),R=x__default.dirname(h);t.tsx||(h=h.replace(/\.tsx?$/,k=>k===".tsx"?".jsx":".js"));let g=existsSync(h),b=await ke({filename:u.path,raw:u.content,config:t,baseColor:n,transformJsx:!t.tsx,isRemote:r$1.isRemote},[ve,Pe,Se,Ce,Re]);if(g){let k=await promises.readFile(h,"utf-8"),[v,E]=await Promise.all([zt(k),zt(b)]);if(v===E){c.push(x__default.relative(t.resolvedPaths.cwd,h));continue}}if(g&&!r$1.overwrite){i.stop(),r$1.rootSpinner&&r$1.rootSpinner.stop();let{overwrite:k}=await qe({type:"confirm",name:"overwrite",message:`The file ${a.info(y)} already exists. Would you like to overwrite?`,initial:!1});if(!k){c.push(x__default.relative(t.resolvedPaths.cwd,h)),r$1.rootSpinner&&r$1.rootSpinner.start();continue}i?.start(),r$1.rootSpinner&&r$1.rootSpinner.start();}existsSync(R)||await promises.mkdir(R,{recursive:!0}),await promises.writeFile(h,b,"utf-8"),g?s$1.push(x__default.relative(t.resolvedPaths.cwd,h)):a$1.push(x__default.relative(t.resolvedPaths.cwd,h));}let l=[...a$1,...s$1,...c],f=await xi(l,t);if(s$1.push(...f),s$1=s$1.filter(u=>!a$1.includes(u)),!(a$1.length||s$1.length)&&!c.length&&i?.info("No files updated."),a$1=Array.from(new Set(a$1)),s$1=Array.from(new Set(s$1)),c=Array.from(new Set(c)),a$1.length){if(i?.succeed(`Created ${a$1.length} ${a$1.length===1?"file":"files"}:`),!r$1.silent)for(let u of a$1)r.log(` - ${u}`);}else i?.stop();if(s$1.length&&(s(`Updated ${s$1.length} ${s$1.length===1?"file":"files"}:`,{silent:r$1.silent})?.info(),!r$1.silent))for(let u of s$1)r.log(` - ${u}`);if(c.length&&(s(`Skipped ${c.length} ${s$1.length===1?"file":"files"}: (files might be identical, use --overwrite to overwrite)`,{silent:r$1.silent})?.info(),!r$1.silent))for(let u of c)r.log(` - ${u}`);return r$1.silent||r.break(),{filesCreated:a$1,filesUpdated:s$1,filesSkipped:c}}function ui(e,t,r){if(e.target){if(e.target.startsWith("~/"))return x__default.join(t.resolvedPaths.cwd,e.target.replace("~/",""));let n=e.target;return e.type==="registry:page"&&(n=wi(n,r.framework),!n)?"":r.isSrcDir?x__default.join(t.resolvedPaths.cwd,"src",n.replace("src/","")):x__default.join(t.resolvedPaths.cwd,n.replace("src/",""))}let i=gi(e,t),o=yi(e.path,i);return x__default.join(i,o)}function gi(e,t){return e.type==="registry:ui"?t.resolvedPaths.ui:e.type==="registry:lib"?t.resolvedPaths.lib:e.type==="registry:block"||e.type==="registry:component"?t.resolvedPaths.components:e.type==="registry:hook"?t.resolvedPaths.hooks:t.resolvedPaths.components}function hi(e,t){let r=e.map(a=>a.replace(/^\//,"")),i=t.replace(/^\//,""),o=i.split("/").slice(0,-1).join("/");if(!o)return "";let n=o.split("/");for(let a=n.length;a>0;a--){let s=n.slice(0,a).join("/");if(r.some(l=>l!==i&&l.startsWith(s+"/")))return "/"+s}return "/"+o}function yi(e,t){let r=e.replace(/^\/|\/$/g,""),i=t.replace(/^\/|\/$/g,""),o=r.split("/"),n=i.split("/"),a=n[n.length-1],s=o.findIndex(c=>c===a);return s===-1?o[o.length-1]:o.slice(s+1).join("/")}async function zt(e){return e.replace(/\r\n/g,`
`).trim()}function wi(e,t){if(!t)return "";if(t==="next-app")return e;if(t==="next-pages"){let r=e.replace(/^app\//,"pages/");return r=r.replace(/\/page(\.[jt]sx?)$/,"$1"),r}if(t==="react-router"){let r=e.replace(/^app\//,"app/routes/");return r=r.replace(/\/page(\.[jt]sx?)$/,"$1"),r}if(t==="laravel"){let r=e.replace(/^app\//,"resources/js/pages/");return r=r.replace(/\/page(\.[jt]sx?)$/,"$1"),r}return ""}async function xi(e,t){let r=new Project({compilerOptions:{}}),i=await o(t.resolvedPaths.cwd),o$1=await loadConfig(t.resolvedPaths.cwd),n=[];if(!i||o$1.resultType==="failed")return [];for(let a of e){let s=x__default.resolve(t.resolvedPaths.cwd,a);if(!existsSync(s))continue;let c=await promises.readFile(s,"utf-8"),l=await promises.mkdtemp(x__default.join(tmpdir(),"dopx-")),f=r.createSourceFile(x__default.join(l,basename(s)),c,{scriptKind:ScriptKind.TSX});if(![".tsx",".ts",".jsx",".js"].includes(f.getExtension()))continue;let m=f.getImportDeclarations();for(let u of m){let h=u.getModuleSpecifierValue();if(i?.aliasPrefix&&!h.startsWith(`${i.aliasPrefix}/`))continue;let y=await b(h,o$1);if(!y)continue;let R=bi(y,e,t);if(!R)continue;let g=Si(R,t,i);!g||g===h||(u.setModuleSpecifier(g),await promises.writeFile(s,f.getFullText(),"utf-8"),n.push(a));}}return n}function bi(e,t,r,i=[".tsx",".ts",".js",".jsx",".css"]){let o=x__default.normalize(r.resolvedPaths.cwd),n=t.map(g=>g.split(x__default.sep).join(x__default.posix.sep)),a=new Set(n),s=x__default.extname(e),c=s!=="",l=c?e.slice(0,-s.length):e,m=x__default.relative(o,l).split(x__default.sep).join(x__default.posix.sep),u=c?[s]:i,h=new Set;for(let g of u){let b=l+g,k=x__default.posix.normalize(x__default.relative(o,b));(a.has(k)||existsSync(b))&&h.add(k);let v=x__default.join(l,`index${g}`),E=x__default.posix.normalize(x__default.relative(o,v));(a.has(E)||existsSync(v))&&h.add(E);}let y=x__default.basename(l);for(let g of n)u.some(b=>g.endsWith(`/${y}${b}`))&&h.add(g);return h.size===0?null:Array.from(h).sort((g,b)=>{let k=x__default.posix.extname(g),v=x__default.posix.extname(b),E=u.indexOf(k)-u.indexOf(v);if(E!==0)return E;let j=m&&g.startsWith(m)?-1:1,_=m&&b.startsWith(m)?-1:1;return j-_})[0]}function Si(e,t,r){let i=x__default.normalize(x__default.join(t.resolvedPaths.cwd,e)),o=Object.entries(t.resolvedPaths).filter(([,y])=>y&&i.startsWith(x__default.normalize(y+x__default.sep))).sort((y,R)=>R[1].length-y[1].length);if(o.length===0)return null;let[n,a]=o[0],s=x__default.relative(a,i);s=s.split(x__default.sep).join("/");let c=x__default.posix.extname(s),f=[".ts",".tsx",".js",".jsx"].includes(c)?"":c,m=s.slice(0,s.length-c.length);m.endsWith("/index")&&(m=m.slice(0,-6));let u=n==="cwd"?r.aliasPrefix:t.aliases[n];if(!u)return null;let h=m===""?"":`/${m}`;return h=h.replace("/src",""),`${u}${h}${f}`}async function ce(e,t,r){r={overwrite:!1,silent:!1,isNewProject:!1,style:"index",...r};let i=await j(t);return i&&i.ui&&i.ui.resolvedPaths.cwd!==t.resolvedPaths.cwd?await vi(e,t,i,{...r,isRemote:e?.length===1&&!!e[0].match(/\/chat\/b\//)}):await Ri(e,t,r)}async function Ri(e,t,r$1){let i=s("Checking registry.",{silent:r$1.silent})?.start(),o=await Z(e,t);if(!o)return i?.fail(),x$1(new Error("Failed to fetch components from registry."));try{Kt(o.files??[],t.resolvedPaths.cwd);}catch(s){return i?.fail(),x$1(s)}i?.succeed();let n=await q$1(t);await y(o.tailwind?.config,t,{silent:r$1.silent,tailwindVersion:n});let a=await Ut(e,t);await Ue(o.cssVars,t,{cleanupDefaultNextStyles:r$1.isNewProject,silent:r$1.silent,tailwindVersion:n,tailwindConfig:o.tailwind?.config,overwriteCssVars:a,initIndex:r$1.style?r$1.style==="index":!1}),await Be(o.css,t,{silent:r$1.silent}),await H(o.dependencies,o.devDependencies,t,{silent:r$1.silent}),await Ge(o.files,t,{overwrite:r$1.overwrite,silent:r$1.silent}),o.docs&&r.info(o.docs);}async function vi(e,t,r$1,i){let o=s("Checking registry.",{silent:i.silent})?.start(),n=await aa(e,t),a=await X$1(n),s$1=z.array(G).parse(a);if(!s$1)return o?.fail(),x$1(new Error("Failed to fetch components from registry."));o?.succeed();let c=ca(s$1),l$1=ba(),f=[],m=[],u=[],h=s$1.flatMap(g=>g.files??[]);try{Kt(h,t.resolvedPaths.cwd);}catch(g){return x$1(g)}let y$1=s("Installing components.")?.start();for(let g of s$1){let b=l$1.get(g.type),k$1=c.get(g.name);if(!b)continue;let v=g.type==="registry:ui"||k$1?.type==="registry:ui"?r$1.ui:t,E=await q$1(v),j=l(t.resolvedPaths.cwd,v.resolvedPaths.ui),_=await k(j,v.resolvedPaths.cwd)??v.resolvedPaths.cwd;if(g.tailwind?.config&&(await y(g.tailwind?.config,v,{silent:!0,tailwindVersion:E}),m.push(x__default.relative(j,v.resolvedPaths.tailwindConfig))),g.cssVars){let K=await Ut(e,t);await Ue(g.cssVars,v,{silent:!0,tailwindVersion:E,tailwindConfig:g.tailwind?.config,overwriteCssVars:K}),m.push(x__default.relative(j,v.resolvedPaths.tailwindCss));}g.css&&(await Be(g.css,v,{silent:!0}),m.push(x__default.relative(j,v.resolvedPaths.tailwindCss))),await H(g.dependencies,g.devDependencies,v,{silent:!0});let oe=await Ge(g.files,v,{overwrite:i.overwrite,silent:!0,rootSpinner:y$1,isRemote:i.isRemote});f.push(...oe.filesCreated.map(K=>x__default.relative(j,x__default.join(_,K)))),m.push(...oe.filesUpdated.map(K=>x__default.relative(j,x__default.join(_,K)))),u.push(...oe.filesSkipped.map(K=>x__default.relative(j,x__default.join(_,K))));}if(y$1?.succeed(),f.sort(),m.sort(),u.sort(),!(f.length||m.length)&&!u.length&&s("No files updated.",{silent:i.silent})?.info(),f.length){s(`Created ${f.length} ${f.length===1?"file":"files"}:`,{silent:i.silent})?.succeed();for(let g of f)r.log(` - ${g}`);}if(m.length){s(`Updated ${m.length} ${m.length===1?"file":"files"}:`,{silent:i.silent})?.info();for(let g of m)r.log(` - ${g}`);}if(u.length){s(`Skipped ${u.length} ${m.length===1?"file":"files"}: (use --overwrite to overwrite)`,{silent:i.silent})?.info();for(let g of u)r.log(` - ${g}`);}}async function Ut(e,t){let r=await aa(e,t),i=await X$1(r);return z.array(G).parse(i).some(n=>n.type==="registry:theme"||n.type==="registry:style")}function Kt(e,t){for(let r of e)if(r?.target&&!$t(r.target,t))throw new Error(`We found an unsafe file path "${r.target} in the registry item. Installation aborted.`)}var Ci="https://codeload.github.com/shadcn-ui/ui/tar.gz/main",X={next:"next","next-monorepo":"next-monorepo"};async function Te(e){e={srcDir:!1,...e};let t=e.template&&X[e.template]?e.template:"next",r$1=t===X.next?"my-app":"my-monorepo",i="latest",o=e.components?.length===1&&!!e.components[0].match(/\/chat\/b\//);if(e.components&&o)try{let[s]=await X$1(e.components),{meta:c}=z.object({meta:z.object({nextVersion:z.string()})}).parse(s);i=c.nextVersion,t=X.next;}catch(s){r.break(),x$1(s);}if(!e.force){let{type:s,name:c}=await qe([{type:e.template||o?null:"select",name:"type",message:`The path ${a.info(e.cwd)} does not contain a package.json file.
Would you like to start a new project?`,choices:[{title:"Next.js",value:"next"},{title:"Next.js (Monorepo)",value:"next-monorepo"}],initial:0},{type:"text",name:"name",message:"What is your project named?",initial:r$1,format:l=>l.trim(),validate:l=>l.length>128?"Name should be less than 128 characters.":!0}]);t=s??t,r$1=c;}let n=await be(e.cwd,{withFallback:!0}),a$1=`${e.cwd}/${r$1}`;try{await Q.access(e.cwd,Q.constants.W_OK);}catch{r.break(),r.error(`The path ${a.info(e.cwd)} is not writable.`),r.error(`It is likely you do not have write permissions for this folder or the path ${a.info(e.cwd)} does not exist.`),r.break(),process.exit(1);}return Q.existsSync(x__default.resolve(e.cwd,r$1,"package.json"))&&(r.break(),r.error(`A project with the name ${a.info(r$1)} already exists.`),r.error("Please choose a different name and try again."),r.break(),process.exit(1)),t===X.next&&await ki(a$1,{version:i,cwd:e.cwd,packageManager:n,srcDir:!!e.srcDir}),t===X["next-monorepo"]&&await ji(a$1,{packageManager:n}),{projectPath:a$1,projectName:r$1,template:t}}async function ki(e,t){let r$1=s("Creating a new Next.js project. This may take a few minutes.").start(),i=["--tailwind","--eslint","--typescript","--app",t.srcDir?"--src-dir":"--no-src-dir","--no-import-alias",`--use-${t.packageManager}`];(t.version.startsWith("15")||t.version.startsWith("latest")||t.version.startsWith("canary"))&&i.push("--turbopack");try{await execa("npx",[`create-next-app@${t.version}`,e,"--silent",...i],{cwd:t.cwd});}catch{r.break(),r.error("Something went wrong creating a new Next.js project. Please try again."),process.exit(1);}r$1?.succeed("Creating a new Next.js project.");}async function ji(e,t){let r=s("Creating a new Next.js monorepo. This may take a few minutes.").start();try{let i=x__default.join(Ii.tmpdir(),`shadcn-template-${Date.now()}`);await Q.ensureDir(i);let o=await fetch(Ci);if(!o.ok)throw new Error(`Failed to download template: ${o.statusText}`);let n=x__default.resolve(i,"template.tar.gz");await Q.writeFile(n,Buffer.from(await o.arrayBuffer())),await execa("tar",["-xzf",n,"-C",i,"--strip-components=2","ui-main/templates/monorepo-next"]);let a=x__default.resolve(i,"monorepo-next");await Q.move(a,e),await Q.remove(i),await execa(t.packageManager,["install"],{cwd:e});let s=process.cwd();await execa("git",["--version"],{cwd:e}),await execa("git",["init"],{cwd:e}),await execa("git",["add","-A"],{cwd:e}),await execa("git",["commit","-m","Initial commit"],{cwd:e}),await execa("cd",[s]),r?.succeed("Creating a new Next.js monorepo.");}catch(i){r?.fail("Something went wrong creating a new Next.js monorepo."),x$1(i);}}async function Jt(e,t,r){if(!e)return;r={silent:!1,...r};let i=x__default.relative(t.resolvedPaths.cwd,t.resolvedPaths.tailwindConfig),o=s(`Updating ${a.info(i)}`,{silent:r.silent}).start(),n=await promises.readFile(t.resolvedPaths.tailwindConfig,"utf8"),a$1=await Ei(n,e,t);await promises.writeFile(t.resolvedPaths.tailwindConfig,a$1,"utf8"),o?.succeed();}async function Ei(e,t,r){let i=await z$1(e,r),o=i.getDescendantsOfKind(SyntaxKind.ObjectLiteralExpression).find(n=>n.getProperties().some(a=>a.isKind(SyntaxKind.PropertyAssignment)&&a.getName()==="content"));return o?($i(o,t),i.getFullText()):e}async function $i(e,t){let r=A$1(e),i=e.getProperty("content");if(!i){let o={name:"content",initializer:`[${r}${t.join(`${r}, ${r}`)}${r}]`};return e.addPropertyAssignment(o),e}if(i.isKind(SyntaxKind.PropertyAssignment)){let o=i.getInitializer();if(o?.isKind(SyntaxKind.ArrayLiteralExpression))for(let n of t){let a=`${r}${n}${r}`;o.getElements().map(s=>s.getText()).includes(a)||o.addElement(a);}return e}return e}var Ai=z.object({cwd:z.string(),components:z.array(z.string()).optional(),yes:z.boolean(),defaults:z.boolean(),force:z.boolean(),silent:z.boolean(),isNewProject:z.boolean(),srcDir:z.boolean().optional(),cssVariables:z.boolean(),template:z.string().optional().refine(e=>e?X[e]:!0,{message:"Invalid template. Please use 'next' or 'next-monorepo'."}),baseColor:z.string().optional().refine(e=>e?N.find(t=>t.name===e):!0,{message:`Invalid base color. Please use '${N.map(e=>e.name).join("', '")}'`}),style:z.string()}),Yt=new Command().name("init").description("initialize your project and install dependencies").argument("[components...]","names, url or local path to component").option("-t, --template <template>","the template to use. (next, next-monorepo)").option("-b, --base-color <base-color>","the base color to use. (neutral, gray, zinc, stone, slate)",void 0).option("-y, --yes","skip confirmation prompt.",!0).option("-d, --defaults,","use default configuration.",!1).option("-f, --force","force overwrite of existing configuration.",!1).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-s, --silent","mute output.",!1).option("--src-dir","use the src directory when creating a new project.",!1).option("--no-src-dir","do not use the src directory when creating a new project.").option("--css-variables","use css variables for theming.",!0).option("--no-css-variables","do not use css variables for theming.").action(async(e,t)=>{try{let r$1=Ai.parse({cwd:x__default.resolve(t.cwd),isNewProject:!1,components:e,style:"index",...t});if(e.length>0&&(u(e[0])||v(e[0]))){let i=await R(e[0],"");i?.type==="registry:style"&&(r$1.baseColor="neutral",r$1.style=i.extends??"index");}await $e(r$1),r.log(`${a.success("Success!")} Project initialization completed.
You may now add components.`),r.break();}catch(r$1){r.break(),x$1(r$1);}});async function $e(e){let t,r;if(e.skipPreflight)t=await o(e.cwd);else {let l=await Et(e);if(l.errors[A]){let{projectPath:f,template:m}=await Te(e);f||process.exit(1),e.cwd=f,e.isNewProject=!0,r=m;}t=l.projectInfo;}if(r==="next-monorepo")return e.cwd=x__default.resolve(e.cwd,"apps/web"),await h(e.cwd);let i$1=await p(e.cwd,t),o$1=i$1?await Fi(i$1,e):await Di(await h(e.cwd));if(!e.yes){let{proceed:l}=await qe({type:"confirm",name:"proceed",message:`Write configuration to ${a.info("components.json")}. Proceed?`,initial:!0});l||process.exit(0);}let n=s("Writing components.json.").start(),a$1=x__default.resolve(e.cwd,"components.json");await promises.writeFile(a$1,JSON.stringify(o$1,null,2),"utf8"),n.succeed();let s$1=await i(e.cwd,o$1),c=[...e.style==="none"?[]:[e.style],...e.components??[]];return await ce(c,s$1,{overwrite:!0,silent:e.silent,style:e.style,isNewProject:e.isNewProject||t?.framework.name==="next-app"}),e.isNewProject&&e.srcDir&&await Jt(["./src/**/*.{js,ts,jsx,tsx,mdx}"],s$1,{silent:e.silent}),s$1}async function Di(e$1=null){let[t,r$1]=await Promise.all([P(),S()]);r.info("");let i=await qe([{type:"toggle",name:"typescript",message:`Would you like to use ${a.info("TypeScript")} (recommended)?`,initial:e$1?.tsx??!0,active:"yes",inactive:"no"},{type:"select",name:"style",message:`Which ${a.info("style")} would you like to use?`,choices:t.map(o=>({title:o.label,value:o.name}))},{type:"select",name:"tailwindBaseColor",message:`Which color would you like to use as the ${a.info("base color")}?`,choices:r$1.map(o=>({title:o.label,value:o.name}))},{type:"text",name:"tailwindCss",message:`Where is your ${a.info("global CSS")} file?`,initial:e$1?.tailwind.css??e},{type:"toggle",name:"tailwindCssVariables",message:`Would you like to use ${a.info("CSS variables")} for theming?`,initial:e$1?.tailwind.cssVariables??!0,active:"yes",inactive:"no"},{type:"text",name:"tailwindPrefix",message:`Are you using a custom ${a.info("tailwind prefix eg. tw-")}? (Leave blank if not)`,initial:""},{type:"text",name:"tailwindConfig",message:`Where is your ${a.info("tailwind.config.js")} located?`,initial:e$1?.tailwind.config??f},{type:"text",name:"components",message:`Configure the import alias for ${a.info("components")}:`,initial:e$1?.aliases.components??c},{type:"text",name:"utils",message:`Configure the import alias for ${a.info("utils")}:`,initial:e$1?.aliases.utils??d},{type:"toggle",name:"rsc",message:`Are you using ${a.info("React Server Components")}?`,initial:e$1?.rsc??!0,active:"yes",inactive:"no"}]);return g.parse({$schema:"https://www.dolphin-ui.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 Fi(e,t){let r=e.style,i=t.baseColor,o=e.tailwind.cssVariables;if(!t.defaults){let[n,a$1,s]=await Promise.all([P(),S(),q$1(e)]),c=await qe([{type:s==="v4"?null:"select",name:"style",message:`Which ${a.info("style")} would you like to use?`,choices:n.map(l=>({title:l.name==="new-york"?"New York (Recommended)":l.label,value:l.name})),initial:0},{type:t.baseColor?null:"select",name:"tailwindBaseColor",message:`Which color would you like to use as the ${a.info("base color")}?`,choices:a$1.map(l=>({title:l.label,value:l.name}))}]);r=c.style??"new-york",i=c.tailwindBaseColor??i,o=t.cssVariables;}return g.parse({$schema:e?.$schema,style:r,tailwind:{...e?.tailwind,baseColor:i,cssVariables:o},rsc:e?.rsc,tsx:e?.tsx,aliases:e?.aliases,iconLibrary:e?.iconLibrary})}async function Ht(e){let t={};if(!Q.existsSync(e.cwd)||!Q.existsSync(x__default.resolve(e.cwd,"package.json")))return t[A]=!0,{errors:t,config:null};if(!Q.existsSync(x__default.resolve(e.cwd,"components.json")))return t[D]=!0,{errors:t,config:null};try{let r=await h(e.cwd);return {errors:t,config:r}}catch{r.break(),r.error(`An invalid ${a.info("components.json")} file was found at ${a.info(e.cwd)}.
Before you can add components, you must create a valid ${a.info("components.json")} file by running the ${a.info("init")} command.`),r.error(`Learn more at ${a.info("https://dolphin-ui.com/docs/components-json")}.`),r.break(),process.exit(1);}}async function Qt(e,t){let r=x__default.join(t.resolvedPaths.cwd,"app/page.tsx");if(!(await M__default.stat(r)).isFile())return;let i=await R(e,t.style);if(!i?.meta?.importSpecifier||!i?.meta?.moduleSpecifier)return;let o=`import { ${i?.meta?.importSpecifier} } from "${i.meta.moduleSpecifier}"
export default function Page() {
return <${i?.meta?.importSpecifier} />
}`;await M__default.writeFile(r,o,"utf8");}var Qe=[{name:"toast",deprecatedBy:"sonner",message:"The toast component is deprecated. Use the sonner component instead."},{name:"toaster",deprecatedBy:"sonner",message:"The toaster component is deprecated. Use the sonner component instead."}],Mi=z.object({components:z.array(z.string()).optional(),yes:z.boolean(),overwrite:z.boolean(),cwd:z.string(),all:z.boolean(),path:z.string().optional(),silent:z.boolean(),srcDir:z.boolean().optional(),cssVariables:z.boolean()}),er=new Command().name("add").description("add a component to your project").argument("[components...]","names, url or local path to 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).option("--no-src-dir","do not use the src directory when creating a new project.").option("--css-variables","use css variables for theming.",!0).option("--no-css-variables","do not use css variables for theming.").action(async(e,t)=>{try{let r$1=Mi.parse({components:e,cwd:x__default.resolve(t.cwd),...t}),i,o$1=null;if