shadcn 0.0.0-beta.cc5eb95f → 0.0.0-beta.cc8f718f

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.
@@ -0,0 +1,37 @@
1
+ import { P, W, h } from './chunk-5WS7HUEG.js';
2
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
+ import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js';
4
+ import { z } from 'zod';
5
+ import { zodToJsonSchema } from 'zod-to-json-schema';
6
+
7
+ var p=new Server({name:"shadcn",version:"0.0.1"},{capabilities:{resources:{},tools:{}}});p.setRequestHandler(ListToolsRequestSchema,async()=>({tools:[{name:"init",description:"Initialize a new project using a registry style project structure.",inputSchema:zodToJsonSchema(z.object({}))},{name:"get_items",description:"List all the available items in the registry",inputSchema:zodToJsonSchema(z.object({}))},{name:"get_item",description:"Get an item from the registry",inputSchema:zodToJsonSchema(z.object({name:z.string().describe("The name of the item to get from the registry. This is required.")}))},{name:"add_item",description:"Add an item from the registry",inputSchema:zodToJsonSchema(z.object({name:z.string().describe("The name of the item to add to the registry. This is required.")}))}]}));p.setRequestHandler(CallToolRequestSchema,async r=>{try{if(!r.params.arguments)throw new Error("Arguments are required");let e=process.env.REGISTRY_URL;if(!e)throw new Error("REGISTRY_URL is not set");switch(r.params.name){case"init":{let t=await u(e),n=t.items.find(o=>o.type==="registry:style"),a="To initialize a new project, run the following command:\n ```bash\n npx shadcn@canary init\n ```\n - This will install all the dependencies and theme for the project.\n - If running the init command installs a rules i.e registry.mdc file, you should follow the instructions in the file to configure the project.\n ",l=t.items.find(o=>o.type==="registry:file"&&o.name==="rules");return l&&(a+=`
8
+ You should also install the rules for the project.
9
+ \`\`\`bash
10
+ npx shadcn@canary add ${s(l.name,e)}
11
+ \`\`\`
12
+ `),n?{content:[{type:"text",text:`To initialize a new project using the ${n.name} style, run the following command:
13
+ \`\`\`bash
14
+ npx shadcn@canary init ${s(n.name,e)}
15
+ \`\`\`
16
+ `}]}:{content:[{type:"text",text:a}]}}case"get_items":{let t=await u(e);return t.items?{content:[{type:"text",text:`The following items are available in the registry:
17
+ ${JSON.stringify(t.items.map(n=>`- ${n.name} (${n.type}): ${n.description}`),null,2)}.
18
+ - To install and use an item in your project, you run the following command:
19
+ \`\`\`bash
20
+ npx shadcn@canary add ${s("NAME_OF_THE_ITEM",e)}
21
+ \`\`\`
22
+ - Example: npx shadcn@canary add ${s(t.items[0].name,e)} to install the ${t.items[0].name} item.
23
+ - To install multiple registry.items, you can do the following:
24
+ \`\`\`bash
25
+ npx shadcn@canary add ${s("NAME_OF_THE_ITEM_1",e)} ${s("NAME_OF_THE_ITEM_2",e)}
26
+ \`\`\`
27
+ - Before using any item, you need to add it first.
28
+ - Adding the items will install all dependencies for the item and format the code as per the project.
29
+ - Example components should not be installed directly unless asked. These components should be used as a reference to build other components.
30
+ `}]}:{content:[{type:"text",text:"No items found in the registry"}]}}case"get_item":{let t=z.string().parse(r.params.arguments.name);if(!t)throw new Error("Name is required");let n=s(t,e),a=await P(n);return {content:[{type:"text",text:JSON.stringify(a,null,2)}]}}case"add_item":{let t=z.string().parse(r.params.arguments.name);if(!t)throw new Error("Name is required");let n=s(t,e);return await P(n)?{content:[{type:"text",text:`To install the ${t} item, run the following command:
31
+ \`\`\`bash
32
+ npx shadcn@canary add ${n}
33
+ \`\`\``}]}:{content:[{type:"text",text:`Item ${t} not found in the registry.`}]}}default:throw new Error(`Tool ${r.params.name} not found`)}}catch(e){throw e instanceof z.ZodError?new Error(`Invalid input: ${JSON.stringify(e.errors)}`):e}});async function u(r){let[e]=await W([r],{useCache:!1});return h.parse(e)}function s(r,e){return `${e.replace(/\/registry\.json$/,"")}/${r}.json`}
34
+
35
+ export { p as a };
36
+ //# sourceMappingURL=out.js.map
37
+ //# sourceMappingURL=chunk-4J3JYRZ4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/mcp/index.ts"],"names":["Server","CallToolRequestSchema","ListToolsRequestSchema","z","zodToJsonSchema","server","request","REGISTRY_URL","registry","getRegistry","style","item","text","rules","getRegistryItemUrl","name","itemUrl","getRegistryItem","error","registryUrl","registryJson","fetchRegistry","registrySchema","itemName"],"mappings":"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","sourcesContent":["import { registrySchema } from \"@/src/registry\"\nimport { fetchRegistry, getRegistryItem } from \"@/src/registry/api\"\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\"\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\"\nimport { z } from \"zod\"\nimport { zodToJsonSchema } from \"zod-to-json-schema\"\n\nexport const server = new Server(\n {\n name: \"shadcn\",\n version: \"0.0.1\",\n },\n {\n capabilities: {\n resources: {},\n tools: {},\n },\n }\n)\n\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: [\n {\n name: \"init\",\n description:\n \"Initialize a new project using a registry style project structure.\",\n inputSchema: zodToJsonSchema(z.object({})),\n },\n {\n name: \"get_items\",\n description: \"List all the available items in the registry\",\n inputSchema: zodToJsonSchema(z.object({})),\n },\n {\n name: \"get_item\",\n description: \"Get an item from the registry\",\n inputSchema: zodToJsonSchema(\n z.object({\n name: z\n .string()\n .describe(\n \"The name of the item to get from the registry. This is required.\"\n ),\n })\n ),\n },\n {\n name: \"add_item\",\n description: \"Add an item from the registry\",\n inputSchema: zodToJsonSchema(\n z.object({\n name: z\n .string()\n .describe(\n \"The name of the item to add to the registry. This is required.\"\n ),\n })\n ),\n },\n ],\n }\n})\n\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n try {\n if (!request.params.arguments) {\n throw new Error(\"Arguments are required\")\n }\n\n const REGISTRY_URL = process.env.REGISTRY_URL\n\n if (!REGISTRY_URL) {\n throw new Error(\"REGISTRY_URL is not set\")\n }\n\n switch (request.params.name) {\n case \"init\": {\n const registry = await getRegistry(REGISTRY_URL)\n const style = registry.items.find(\n (item) => item.type === \"registry:style\"\n )\n\n let text = `To initialize a new project, run the following command:\n \\`\\`\\`bash\n npx shadcn@canary init\n \\`\\`\\`\n - This will install all the dependencies and theme for the project.\n - If running the init command installs a rules i.e registry.mdc file, you should follow the instructions in the file to configure the project.\n `\n\n const rules = registry.items.find(\n (item) => item.type === \"registry:file\" && item.name === \"rules\"\n )\n\n if (rules) {\n text += `\n You should also install the rules for the project.\n \\`\\`\\`bash\n npx shadcn@canary add ${getRegistryItemUrl(\n rules.name,\n REGISTRY_URL\n )}\n \\`\\`\\`\n `\n }\n\n if (!style) {\n return {\n content: [\n {\n type: \"text\",\n text,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: `To initialize a new project using the ${\n style.name\n } style, run the following command:\n \\`\\`\\`bash\n npx shadcn@canary init ${getRegistryItemUrl(\n style.name,\n REGISTRY_URL\n )}\n \\`\\`\\`\n `,\n },\n ],\n }\n }\n case \"get_items\": {\n const registry = await getRegistry(REGISTRY_URL)\n\n if (!registry.items) {\n return {\n content: [\n {\n type: \"text\",\n text: \"No items found in the registry\",\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: `The following items are available in the registry:\n ${JSON.stringify(\n registry.items.map(\n (item) => `- ${item.name} (${item.type}): ${item.description}`\n ),\n null,\n 2\n )}.\n - To install and use an item in your project, you run the following command:\n \\`\\`\\`bash\n npx shadcn@canary add ${getRegistryItemUrl(\n \"NAME_OF_THE_ITEM\",\n REGISTRY_URL\n )}\n \\`\\`\\`\n - Example: npx shadcn@canary add ${getRegistryItemUrl(\n registry.items[0].name,\n REGISTRY_URL\n )} to install the ${registry.items[0].name} item.\n - To install multiple registry.items, you can do the following:\n \\`\\`\\`bash\n npx shadcn@canary add ${getRegistryItemUrl(\n \"NAME_OF_THE_ITEM_1\",\n REGISTRY_URL\n )} ${getRegistryItemUrl(\"NAME_OF_THE_ITEM_2\", REGISTRY_URL)}\n \\`\\`\\`\n - Before using any item, you need to add it first.\n - Adding the items will install all dependencies for the item and format the code as per the project.\n - Example components should not be installed directly unless asked. These components should be used as a reference to build other components.\n `,\n },\n ],\n }\n }\n\n case \"get_item\": {\n const name = z.string().parse(request.params.arguments.name)\n\n if (!name) {\n throw new Error(\"Name is required\")\n }\n\n const itemUrl = getRegistryItemUrl(name, REGISTRY_URL)\n const item = await getRegistryItem(itemUrl)\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(item, null, 2) }],\n }\n }\n\n case \"add_item\": {\n const name = z.string().parse(request.params.arguments.name)\n\n if (!name) {\n throw new Error(\"Name is required\")\n }\n\n const itemUrl = getRegistryItemUrl(name, REGISTRY_URL)\n const item = await getRegistryItem(itemUrl)\n\n if (!item) {\n return {\n content: [\n {\n type: \"text\",\n text: `Item ${name} not found in the registry.`,\n },\n ],\n }\n }\n return {\n content: [\n {\n type: \"text\",\n text: `To install the ${name} item, run the following command:\n \\`\\`\\`bash\n npx shadcn@canary add ${itemUrl}\n \\`\\`\\``,\n },\n ],\n }\n }\n default:\n throw new Error(`Tool ${request.params.name} not found`)\n }\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw new Error(`Invalid input: ${JSON.stringify(error.errors)}`)\n }\n\n throw error\n }\n})\n\nasync function getRegistry(registryUrl: string) {\n const [registryJson] = await fetchRegistry([registryUrl], {\n useCache: false,\n })\n return registrySchema.parse(registryJson)\n}\n\nfunction getRegistryItemUrl(itemName: string, registryUrl: string) {\n const registryBaseUrl = registryUrl.replace(/\\/registry\\.json$/, \"\")\n return `${registryBaseUrl}/${itemName}.json`\n}\n"]}
@@ -0,0 +1,88 @@
1
+ import { z as z$1 } from 'zod';
2
+ import { createHash } from 'crypto';
3
+ import { existsSync, promises } from 'fs';
4
+ import { tmpdir, homedir } from 'os';
5
+ import * as x from 'path';
6
+ import x__default, { basename } from 'path';
7
+ import * as H from 'fs/promises';
8
+ import { red, yellow, cyan, green } from 'kleur/colors';
9
+ import { loadConfig, createMatchPath } from 'tsconfig-paths';
10
+ import { cosmiconfig } from 'cosmiconfig';
11
+ import ve from 'fast-glob';
12
+ import we from 'fs-extra';
13
+ import gr from 'ora';
14
+ import { Project, ScriptKind, SyntaxKind, QuoteKind } from 'ts-morph';
15
+ import { transformFromAstSync } from '@babel/core';
16
+ import { parse } from '@babel/parser';
17
+ import Ir from '@babel/plugin-transform-typescript';
18
+ import * as Ce from 'recast';
19
+ import Lr from 'prompts';
20
+ import se from 'deepmerge';
21
+ import ns from 'stringify-object';
22
+ import { HttpsProxyAgent } from 'https-proxy-agent';
23
+ import ys from 'node-fetch';
24
+
25
+ var qe=z$1.enum(["registry:lib","registry:block","registry:component","registry:ui","registry:hook","registry:page","registry:file","registry:theme","registry:style","registry:item","registry:example","registry:internal"]),de=z$1.discriminatedUnion("type",[z$1.object({path:z$1.string(),content:z$1.string().optional(),type:z$1.enum(["registry:file","registry:page"]),target:z$1.string()}),z$1.object({path:z$1.string(),content:z$1.string().optional(),type:qe.exclude(["registry:file","registry:page"]),target:z$1.string().optional()})]),zt=z$1.object({config:z$1.object({content:z$1.array(z$1.string()).optional(),theme:z$1.record(z$1.string(),z$1.any()).optional(),plugins:z$1.array(z$1.string()).optional()}).optional()}),Fe=z$1.object({theme:z$1.record(z$1.string(),z$1.string()).optional(),light:z$1.record(z$1.string(),z$1.string()).optional(),dark:z$1.record(z$1.string(),z$1.string()).optional()}),Ot=z$1.record(z$1.string(),z$1.lazy(()=>z$1.union([z$1.string(),z$1.record(z$1.string(),z$1.union([z$1.string(),z$1.record(z$1.string(),z$1.string())]))]))),Dt=z$1.record(z$1.string(),z$1.string()),_=z$1.object({$schema:z$1.string().optional(),extends:z$1.string().optional(),name:z$1.string(),type:qe,title:z$1.string().optional(),author:z$1.string().min(2).optional(),description:z$1.string().optional(),dependencies:z$1.array(z$1.string()).optional(),devDependencies:z$1.array(z$1.string()).optional(),registryDependencies:z$1.array(z$1.string()).optional(),files:z$1.array(de).optional(),tailwind:zt.optional(),cssVars:Fe.optional(),css:Ot.optional(),envVars:Dt.optional(),meta:z$1.record(z$1.string(),z$1.any()).optional(),docs:z$1.string().optional(),categories:z$1.array(z$1.string()).optional()}),Ae=z$1.object({name:z$1.string(),homepage:z$1.string(),items:z$1.array(_)}),Le=z$1.array(_),Ye=z$1.array(z$1.object({name:z$1.string(),label:z$1.string()})),Qe=z$1.record(z$1.string(),z$1.record(z$1.string(),z$1.string())),Xe=z$1.object({inlineColors:z$1.object({light:z$1.record(z$1.string(),z$1.string()),dark:z$1.record(z$1.string(),z$1.string())}),cssVars:Fe,cssVarsV4:Fe.optional(),inlineColorsTemplate:z$1.string(),cssVarsTemplate:z$1.string()}),Ze=_.pick({dependencies:!0,devDependencies:!0,files:!0,tailwind:!0,cssVars:!0,css:!0,envVars:!0,docs:!0}),Kt=z$1.union([z$1.string().refine(e=>e.includes("{name}"),{message:"Registry URL must include {name} placeholder"}),z$1.object({url:z$1.string().refine(e=>e.includes("{name}"),{message:"Registry URL must include {name} placeholder"}),params:z$1.record(z$1.string(),z$1.string()).optional(),headers:z$1.record(z$1.string(),z$1.string()).optional()})]),Vt=z$1.record(z$1.string().refine(e=>e.startsWith("@"),{message:"Registry names must start with @ (e.g., @v0, @acme)"}),Kt),ze=z$1.object({$schema:z$1.string().optional(),style:z$1.string(),rsc:z$1.coerce.boolean().default(!1),tsx:z$1.coerce.boolean().default(!0),tailwind:z$1.object({config:z$1.string().optional(),css:z$1.string(),baseColor:z$1.string(),cssVariables:z$1.boolean().default(!0),prefix:z$1.string().default("").optional()}),iconLibrary:z$1.string().optional(),aliases:z$1.object({components:z$1.string(),utils:z$1.string(),ui:z$1.string().optional(),lib:z$1.string().optional(),hooks:z$1.string().optional()}),registries:Vt.optional()}).strict(),Oe=ze.extend({resolvedPaths:z$1.object({cwd:z$1.string(),tailwindConfig:z$1.string(),tailwindCss:z$1.string(),utils:z$1.string(),components:z$1.string(),lib:z$1.string(),hooks:z$1.string(),ui:z$1.string()})}),et=z$1.record(Oe);var Wt=/^(@[a-zA-Z0-9](?:[a-zA-Z0-9-_]*[a-zA-Z0-9])?)\/(.+)$/;function U(e){if(!e.startsWith("@"))return {registry:null,item:e};let t=e.match(Wt);return t?{registry:t[1],item:t[2]}:{registry:null,item:e}}function ne(e){return e.replace(/\${(\w+)}/g,(t,r)=>process.env[r]||"")}function ie(e){let t=[],r=/\${(\w+)}/g,s;for(;(s=r.exec(e))!==null;)t.push(s[1]);return t}function Nt(e){let t=new Set;return typeof e=="string"?ie(e).forEach(r=>t.add(r)):(ie(e.url).forEach(r=>t.add(r)),e.params&&Object.values(e.params).forEach(r=>{ie(r).forEach(s=>t.add(s));}),e.headers&&Object.values(e.headers).forEach(r=>{ie(r).forEach(s=>t.add(s));})),Array.from(t)}function tt(e,t){let s=Nt(t).filter(n=>!process.env[n]);if(s.length>0){let n=s.map(i=>i.includes("TOKEN")?`export ${i}="your-token-here"`:i.includes("KEY")?`export ${i}="your-api-key-here"`:i.includes("SECRET")?`export ${i}="your-secret-here"`:`export ${i}="your-value-here"`);throw new Error(`Registry "${e}" requires environment variables:
26
+
27
+ `+s.map(i=>` \u2022 ${i}`).join(`
28
+ `)+`
29
+
30
+ Set them in your environment:
31
+
32
+ `+n.map(i=>` ${i}`).join(`
33
+ `)+`
34
+
35
+ Or add them to a .env file in your project root.`)}}var rt="{name}",ge="{style}",st=/\${(\w+)}/g,nt="?",_t="&";function oe(e,t){let{registry:r,item:s}=U(e);if(!r)return null;let i=(t?.registries||{})[r];if(!i)throw new Error(`Unknown registry "${r}". Make sure it is defined in components.json as follows:
36
+ {
37
+ "registries": {
38
+ "${r}": "https://example.com/{name}.json"
39
+ }
40
+ }`);return tt(r,i),{url:Ut(s,i,t),headers:Mt(i)}}function Ut(e,t,r){if(typeof t=="string"){let n=t.replace(rt,e);return r?.style&&n.includes(ge)&&(n=n.replace(ge,r.style)),ne(n)}let s=t.url.replace(rt,e);return r?.style&&s.includes(ge)&&(s=s.replace(ge,r.style)),s=ne(s),t.params?Bt(s,t.params):s}function Mt(e){if(typeof e=="string"||!e.headers)return {};let t={};for(let[r,s]of Object.entries(e.headers)){let n=ne(s);Ht(s,n)&&(t[r]=n);}return t}function Bt(e,t){let r=new URLSearchParams;for(let[i,o]of Object.entries(t)){let l=ne(o);l&&r.append(i,l);}let s=r.toString();if(!s)return e;let n=e.includes(nt)?_t:nt;return `${e}${n}${s}`}function Ht(e,t){let r=t.trim();if(!r)return !1;if(e.includes("${")&&e.match(st)){let n=e.replace(st,"").trim();return r!==n}return !0}var De={headers:{}};function Ke(e){De.headers=e;}function it(e){return De.headers[e]||{}}function ot(){De.headers={};}function ue(e,t){let r={},s=[...e];if(!t?.registries)return Ke({}),s;for(let n=0;n<s.length;n++){let i=oe(s[n],t);i&&(s[n]=i.url,Object.keys(i.headers).length>0&&(r[i.url]=i.headers));}return Ke(r),s}var z={"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"}},"react-router":{name:"react-router",label:"React Router",links:{installation:"https://ui.shadcn.com/docs/installation/react-router",tailwind:"https://tailwindcss.com/docs/installation/framework-guides/react-router"}},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"}},"tanstack-start":{name:"tanstack-start",label:"TanStack Start",links:{installation:"https://ui.shadcn.com/docs/installation/tanstack",tailwind:"https://tailwindcss.com/docs/installation/using-postcss"}},gatsby:{name:"gatsby",label:"Gatsby",links:{installation:"https://ui.shadcn.com/docs/installation/gatsby",tailwind:"https://tailwindcss.com/docs/guides/gatsby"}},expo:{name:"expo",label:"Expo",links:{installation:"https://ui.shadcn.com/docs/installation/expo",tailwind:"https://www.nativewind.dev/docs/getting-started/installation"}},manual:{name:"manual",label:"Manual",links:{installation:"https://ui.shadcn.com/docs/installation/manual",tailwind:"https://tailwindcss.com/docs/installation"}}};var he=process.env.REGISTRY_URL??"https://ui.shadcn.com/r",ae={"@shadcn":`${he}/styles/{style}/{name}.json`};var T={error:red,warn:yellow,info:cyan,success:green};async function O(e,t){return createMatchPath(t.absoluteBaseUrl,t.paths)(e,void 0,()=>!0,[".ts",".tsx",".jsx",".js",".css"])}var nn="@/components",on="@/lib/utils",an="app/globals.css",ln="tailwind.config.js";var tr=cosmiconfig("components",{searchPlaces:["components.json"]});async function ye(e){let t=await rr(e);return t?(t.iconLibrary||(t.iconLibrary=t.style==="new-york"?"radix":"lucide"),await Ve(e,t)):null}async function Ve(e,t){t.registries={...ae,...t.registries||{}};let r=await loadConfig(e);if(r.resultType==="failed")throw new Error(`Failed to load ${t.tsx?"tsconfig":"jsconfig"}.json. ${r.message??""}`.trim());return Oe.parse({...t,resolvedPaths:{cwd:e,tailwindConfig:t.tailwind.config?x__default.resolve(e,t.tailwind.config):"",tailwindCss:x__default.resolve(e,t.tailwind.css),utils:await O(t.aliases.utils,r),components:await O(t.aliases.components,r),ui:t.aliases.ui?await O(t.aliases.ui,r):x__default.resolve(await O(t.aliases.components,r)??e,"ui"),lib:t.aliases.lib?await O(t.aliases.lib,r):x__default.resolve(await O(t.aliases.utils,r)??e,".."),hooks:t.aliases.hooks?await O(t.aliases.hooks,r):x__default.resolve(await O(t.aliases.components,r)??e,"..","hooks")}})}async function rr(e){try{let t=await tr.search(e);if(!t)return null;let r=ze.parse(t.config);if(r.registries){for(let s of Object.keys(r.registries))if(s in ae)throw new Error(`"${s}" is a built-in registry and cannot be overridden.`)}return r}catch(t){let r=`${e}/components.json`;throw t instanceof Error&&t.message.includes("reserved registry")?t:new Error(`Invalid configuration found in ${T.info(r)}.`)}}async function cn(e){let t={};for(let s of Object.keys(e.aliases)){if(!nr(s,e))continue;let n=e.resolvedPaths[s],i=await sr(e.resolvedPaths.cwd,n);if(!i){t[s]=e;continue}t[s]=await ye(i);}let r=et.safeParse(t);return r.success?r.data:null}async function sr(e,t){let r=ir(e,t),s=x__default.relative(r,t),i=(await ve.glob("**/package.json",{cwd:r,deep:3,ignore:["**/node_modules/**","**/dist/**","**/build/**","**/public/**"]})).map(o=>x__default.dirname(o)).find(o=>s.startsWith(o));return i?x__default.join(r,i):null}function nr(e,t){return Object.keys(t.resolvedPaths).filter(r=>r!=="utils").includes(e)}function ir(e,t){let r=e.split(x__default.sep),s=t.split(x__default.sep),n=[];for(let i=0;i<Math.min(r.length,s.length)&&r[i]===s[i];i++)n.push(r[i]);return n.join(x__default.sep)}async function at(e,t){return (await N(e))?.tailwindVersion==="v4"?"new-york-v4":t}function pn(e){let t={resolvedPaths:{cwd:process.cwd(),tailwindConfig:"",tailwindCss:"",utils:"",components:"",ui:"",lib:"",hooks:""},style:"",tailwind:{config:"",css:"",baseColor:"",cssVariables:!1},rsc:!1,tsx:!0,aliases:{components:"",utils:""},registries:{...ae}};return e?{...t,...e,resolvedPaths:{...t.resolvedPaths,...e.resolvedPaths||{}},tailwind:{...t.tailwind,...e.tailwind||{}},aliases:{...t.aliases,...e.aliases||{}}}:t}function We(e="",t=!0){let r=x__default.join(e,"package.json");return we.readJSONSync(r,{throws:t})}var Se=["**/node_modules/**",".next","public","dist","build"];z$1.object({compilerOptions:z$1.object({paths:z$1.record(z$1.string().or(z$1.array(z$1.string())))})});async function N(e){let[t,r,s,n,i,o,l,f]=await Promise.all([ve.glob("**/{next,vite,astro,app}.config.*|gatsby-config.*|composer.json|react-router.config.*",{cwd:e,deep:3,ignore:Se}),we.pathExists(x__default.resolve(e,"src")),mr(e),pr(e),cr(e),lt(e),fr(e),We(e,!1)]),p=await we.pathExists(x__default.resolve(e,`${r?"src/":""}app`)),c={framework:z.manual,isSrcDir:r,isRSC:!1,isTsx:s,tailwindConfigFile:n,tailwindCssFile:i,tailwindVersion:o,aliasPrefix:l};if(t.find(u=>u.startsWith("next.config."))?.length)return c.framework=p?z["next-app"]:z["next-pages"],c.isRSC=p,c;if(t.find(u=>u.startsWith("astro.config."))?.length)return c.framework=z.astro,c;if(t.find(u=>u.startsWith("gatsby-config."))?.length)return c.framework=z.gatsby,c;if(t.find(u=>u.startsWith("composer.json"))?.length)return c.framework=z.laravel,c;if(Object.keys(f?.dependencies??{}).find(u=>u.startsWith("@remix-run/")))return c.framework=z.remix,c;if([...Object.keys(f?.dependencies??{}),...Object.keys(f?.devDependencies??{})].find(u=>u.startsWith("@tanstack/react-start")))return c.framework=z["tanstack-start"],c;if(t.find(u=>u.startsWith("react-router.config."))?.length)return c.framework=z["react-router"],c;if(t.find(u=>u.startsWith("vite.config."))?.length)return c.framework=z.vite,c;let d=t.find(u=>u.startsWith("app.config"));return d?.length&&(await we.readFile(x__default.resolve(e,d),"utf8")).includes("defineConfig")?(c.framework=z.vite,c):(f?.dependencies?.expo&&(c.framework=z.expo),c)}async function lt(e){let[t,r]=await Promise.all([We(e,!1),ye(e)]);return r?.tailwind?.config===""?"v4":!t?.dependencies?.tailwindcss&&!t?.devDependencies?.tailwindcss?null:/^(?:\^|~)?3(?:\.\d+)*(?:-.*)?$/.test(t?.dependencies?.tailwindcss||t?.devDependencies?.tailwindcss||"")?"v3":"v4"}async function cr(e){let[t,r]=await Promise.all([ve.glob(["**/*.css","**/*.scss"],{cwd:e,deep:5,ignore:Se}),lt(e)]);if(!t.length)return null;for(let n of t){let i=await we.readFile(x__default.resolve(e,n),"utf8");if(i.includes('@import "tailwindcss"')||i.includes("@import 'tailwindcss'")||i.includes("@tailwind base"))return n}return null}async function pr(e){let t=await ve.glob("tailwind.config.*",{cwd:e,deep:3,ignore:Se});return t.length?t[0]:null}async function fr(e){let t=await loadConfig(e);if(t?.resultType==="failed"||!Object.entries(t?.paths).length)return null;for(let[r,s]of Object.entries(t.paths))if(s.includes("./*")||s.includes("./src/*")||s.includes("./app/*")||s.includes("./resources/js/*"))return r.replace(/\/\*$/,"")??null;return Object.keys(t?.paths)?.[0].replace(/\/\*$/,"")??null}async function mr(e){return (await ve.glob("tsconfig.*",{cwd:e,deep:1,ignore:Se})).length>0}async function Cn(e,t=null){let[r,s]=await Promise.all([ye(e),t?Promise.resolve(t):N(e)]);if(r)return r;if(!s||!s.tailwindCssFile||s.tailwindVersion==="v3"&&!s.tailwindConfigFile)return null;let n={$schema:"https://ui.shadcn.com/schema.json",rsc:s.isRSC,tsx:s.isTsx,style:"new-york",tailwind:{config:s.tailwindConfigFile??"",baseColor:"zinc",css:s.tailwindCssFile,cssVariables:!0,prefix:""},iconLibrary:"lucide",aliases:{components:`${s.aliasPrefix}/components`,ui:`${s.aliasPrefix}/components/ui`,hooks:`${s.aliasPrefix}/hooks`,lib:`${s.aliasPrefix}/lib`,utils:`${s.aliasPrefix}/lib/utils`}};return await Ve(e,n)}async function le(e){if(!e.resolvedPaths?.cwd)return "v3";let t=await N(e.resolvedPaths.cwd);return t?.tailwindVersion?t.tailwindVersion:null}function ct(e,t,r={}){let{ignoreImports:s=!1}=r,n=e.replace(/\r\n/g,`
41
+ `).trim(),i=t.replace(/\r\n/g,`
42
+ `).trim();if(n===i)return !0;if(!s)return !1;let o=/^(import\s+(?:type\s+)?(?:\*\s+as\s+\w+|\{[^}]*\}|\w+)?(?:\s*,\s*(?:\{[^}]*\}|\w+))?\s+from\s+["'])([^"']+)(["'])/gm,l=c=>c.replace(o,(d,u,w,y)=>{if(w.startsWith("."))return `${u}${w}${y}`;let h=w.split("/"),v=h[h.length-1];return `${u}@normalized/${v}${y}`}),f=l(n),p=l(i);return f===p}function Q(e){let t=x__default.basename(e);return /^\.env(\.|$)/.test(t)}function ft(e){let t=[".env.local",".env",".env.development.local",".env.development"];for(let r of t){let s=x__default.join(e,r);if(existsSync(s))return s}return null}function te(e){let t=e.split(`
43
+ `),r={};for(let s of t){let n=s.trim();if(!n||n.startsWith("#"))continue;let i=n.indexOf("=");if(i===-1)continue;let o=n.substring(0,i).trim(),l=n.substring(i+1).trim();o&&(r[o]=l.replace(/^["']|["']$/g,""));}return r}function mt(e,t){let r=te(e),s=te(t),n=[];for(let i of Object.keys(s))i in r||n.push(i);return n}function dt(e,t){let r=te(e),s=te(t),n=e.trimEnd();n&&!n.endsWith(`
44
+ `)&&(n+=`
45
+ `);let i=[];for(let[o,l]of Object.entries(s))o in r||i.push(`${o}=${l}`);return i.length>0?(n&&(n+=`
46
+ `),n+=i.join(`
47
+ `),n+`
48
+ `):n&&!n.endsWith(`
49
+ `)?n+`
50
+ `:n}var S={error(...e){console.log(T.error(e.join(" ")));},warn(...e){console.log(T.warn(e.join(" ")));},info(...e){console.log(T.info(e.join(" ")));},success(...e){console.log(T.success(e.join(" ")));},log(...e){console.log(e.join(" "));},break(){console.log("");}};function X(e,t){return gr({text:e,isSilent:t?.silent})}var Pe=async({sourceFile:e,config:t,baseColor:r})=>(t.tailwind?.cssVariables||!r?.inlineColors||e.getDescendantsOfKind(SyntaxKind.StringLiteral).forEach(s=>{let n=s.getText();if(n){let i=yr(n.replace(/"/g,""),r.inlineColors);s.replaceWithText(`"${i.trim()}"`);}}),e);function Ne(e){if(!e.includes("/")&&!e.includes(":"))return [null,e,null];let t=[],[r,s]=e.split("/");if(!r.includes(":"))return [null,r,s];let n=r.split(":"),i=n.pop(),o=n.join(":");return t.push(o??null,i??null,s??null),t}var hr=["bg-","text-","border-","ring-offset-","ring-"];function yr(e,t){e.includes(" border ")&&(e=e.replace(" border "," border border-border "));let r=e.split(" "),s=new Set,n=new Set;for(let i of r){let[o,l,f]=Ne(i),p=hr.find(d=>l?.startsWith(d));if(!p){s.has(i)||s.add(i);continue}let c=l?.replace(p,"");if(c&&c in t.light){s.add([o,`${p}${t.light[c]}`].filter(Boolean).join(":")+(f?`/${f}`:"")),n.add(["dark",o,`${p}${t.dark[c]}`].filter(Boolean).join(":")+(f?`/${f}`:""));continue}s.has(i)||s.add(i);}return [...Array.from(s),...Array.from(n)].join(" ").trim()}var Ie={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 gt="lucide",Ee=async({sourceFile:e,config:t})=>{if(!t.iconLibrary||!(t.iconLibrary in Ie))return e;let r=await ut(),s=gt,n=t.iconLibrary;if(s===n)return e;let i=[];for(let o of e.getImportDeclarations()??[])if(o.getModuleSpecifier()?.getText()===`"${Ie[gt].import}"`){for(let l of o.getNamedImports()??[]){let f=l.getName(),p=r[f]?.[n];!p||i.includes(p)||(i.push(p),l.remove(),e.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement).filter(c=>c.getTagNameNode()?.getText()===f).forEach(c=>c.getTagNameNode()?.replaceWithText(p)));}o.getNamedImports()?.length===0&&o.remove();}if(i.length>0){let o=e.addImportDeclaration({moduleSpecifier:Ie[n]?.import,namedImports:i.map(l=>({name:l}))});wr(e)||o.replaceWithText(o.getText().replace(";",""));}return e};function wr(e){return e.getImportDeclarations()?.[0]?.getText().endsWith(";")??!1}var be=async({sourceFile:e,config:t,isRemote:r})=>{let n=`@${t.aliases?.utils?.split("/")[0]?.slice(1)}/lib/utils`,i=e.getImportDeclarations();if(![".tsx",".ts",".jsx",".js"].includes(e.getExtension()))return e;for(let o of i){let l=vr(o.getModuleSpecifierValue(),t,r);o.setModuleSpecifier(l),(n===l||l==="@/lib/utils")&&o.getNamedImports().find(c=>c.getName()==="cn")&&o.setModuleSpecifier(n===l?l.replace(n,t.aliases.utils):t.aliases.utils);}return e};function vr(e,t,r=!1){if(!e.startsWith("@/")&&!r)return e;if(r&&e.startsWith("@/")&&(e=e.replace(/^@\//,"@/registry/new-york/")),!e.startsWith("@/registry/")){let s=t.aliases.components.split("/")[0];return e.replace(/^@\//,`${s}/`)}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 Er={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"]},ht=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let s=Ce.parse(r,{parser:{parse:i=>parse(i,Er)}}),n=transformFromAstSync(s,r,{cloneInputAst:!1,code:!1,ast:!0,plugins:[Ir],configFile:!1});if(!n||!n.ast)throw new Error("Failed to transform JSX");return Ce.print(n.ast).code};var Cr=/^["']use client["']$/g,Te=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(SyntaxKind.ExpressionStatement);return r&&Cr.test(r.getText())&&r.remove(),e};var ke=async({sourceFile:e,config:t})=>{if(!t.tailwind?.prefix)return e;let r=await le(t);return e.getDescendantsOfKind(SyntaxKind.CallExpression).filter(s=>s.getExpression().getText()==="cva").forEach(s=>{if(s.getArguments()[0]?.isKind(SyntaxKind.StringLiteral)){let n=s.getArguments()[0];n&&n.replaceWithText(`"${M(n.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);}s.getArguments()[1]?.isKind(SyntaxKind.ObjectLiteralExpression)&&s.getArguments()[1]?.getDescendantsOfKind(SyntaxKind.PropertyAssignment).find(n=>n.getName()==="variants")?.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach(n=>{n.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach(i=>{let o=i.getInitializerIfKind(SyntaxKind.StringLiteral);o&&o?.replaceWithText(`"${M(o.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);});});}),e.getDescendantsOfKind(SyntaxKind.JsxAttribute).forEach(s=>{if(s.getName()==="className"){if(s.getInitializer()?.isKind(SyntaxKind.StringLiteral)){let n=s.getInitializer();n&&n.replaceWithText(`"${M(n.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);}if(s.getInitializer()?.isKind(SyntaxKind.JsxExpression)){let n=s.getInitializer()?.getDescendantsOfKind(SyntaxKind.CallExpression).find(i=>i.getExpression().getText()==="cn");n&&n.getArguments().forEach(i=>{(i.isKind(SyntaxKind.ConditionalExpression)||i.isKind(SyntaxKind.BinaryExpression))&&i.getChildrenOfKind(SyntaxKind.StringLiteral).forEach(o=>{o.replaceWithText(`"${M(o.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);}),i.isKind(SyntaxKind.StringLiteral)&&i.replaceWithText(`"${M(i.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);});}}s.getName()==="classNames"&&s.getInitializer()?.isKind(SyntaxKind.JsxExpression)&&s.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach(n=>{if(n.getInitializer()?.isKind(SyntaxKind.CallExpression)){let i=n.getInitializerIfKind(SyntaxKind.CallExpression);i&&i.getArguments().forEach(o=>{o.isKind(SyntaxKind.ConditionalExpression)&&o.getChildrenOfKind(SyntaxKind.StringLiteral).forEach(l=>{l.replaceWithText(`"${M(l.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);}),o.isKind(SyntaxKind.StringLiteral)&&o.replaceWithText(`"${M(o.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);});}if(n.getInitializer()?.isKind(SyntaxKind.StringLiteral)&&n.getName()!=="variant"){let i=n.getInitializer();i&&i.replaceWithText(`"${M(i.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);}});}),e};function M(e,t="",r){return r==="v3"?e.split(" ").map(s=>{let[n,i,o]=Ne(s);return n?o?`${n}:${t}${i}/${o}`:`${n}:${t}${i}`:o?`${t}${i}/${o}`:`${t}${i}`}).join(" "):e.split(" ").map(s=>s.indexOf(`${t}:`)===0?s:`${t}:${s.trim()}`).join(" ")}var $r=new Project({compilerOptions:{}});async function Fr(e){let t=await promises.mkdtemp(x__default.join(tmpdir(),"shadcn-"));return x__default.join(t,e)}async function xt(e,t=[be,Te,Pe,ke,Ee]){let r=await Fr(e.filename),s=$r.createSourceFile(r,e.raw,{scriptKind:ScriptKind.TSX});for(let n of t)await n({sourceFile:s,...e});return e.transformJsx?await ht({sourceFile:s,...e}):s.getText()}async function Oi(e,t,r){if(!e?.length)return {filesCreated:[],filesUpdated:[],filesSkipped:[]};r={overwrite:!1,force:!1,silent:!1,isRemote:!1,isWorkspace:!1,...r};let s=X("Updating files.",{silent:r.silent})?.start(),[n,i]=await Promise.all([N(t.resolvedPaths.cwd),t.tailwind.baseColor?Me(t.tailwind.baseColor):Promise.resolve(void 0)]),o=[],l=[],f=[],p=[],c=null;for(let y of e){if(!y.content)continue;let h=_e(y,t,{isSrcDir:n?.isSrcDir,framework:n?.framework.name,commonRoot:Ue(e.map(P=>P.path),y.path)});if(!h)continue;let v=basename(y.path),k=x__default.dirname(h);if(t.tsx||(h=h.replace(/\.tsx?$/,P=>P===".tsx"?".jsx":".js")),Q(h)&&!existsSync(h)){let P=ft(k);P&&(h=P);}let j=existsSync(h),E=Q(h)?y.content:await xt({filename:y.path,raw:y.content,config:t,baseColor:i,transformJsx:!t.tsx,isRemote:r.isRemote},[be,Te,Pe,ke,Ee]);if(j&&!Q(h)){let P=await promises.readFile(h,"utf-8");if(ct(P,E,{ignoreImports:r.isWorkspace})){f.push(x__default.relative(t.resolvedPaths.cwd,h));continue}}if(j&&!r.overwrite&&!Q(h)){s.stop(),r.rootSpinner&&r.rootSpinner.stop();let{overwrite:P}=await Lr({type:"confirm",name:"overwrite",message:`The file ${T.info(v)} already exists. Would you like to overwrite?`,initial:!1});if(!P){f.push(x__default.relative(t.resolvedPaths.cwd,h)),r.rootSpinner&&r.rootSpinner.start();continue}s?.start(),r.rootSpinner&&r.rootSpinner.start();}if(existsSync(k)||await promises.mkdir(k,{recursive:!0}),Q(h)&&j){let P=await promises.readFile(h,"utf-8"),Y=dt(P,E);if(p=mt(P,E),c=x__default.relative(t.resolvedPaths.cwd,h),!p.length){f.push(x__default.relative(t.resolvedPaths.cwd,h));continue}await promises.writeFile(h,Y,"utf-8"),l.push(x__default.relative(t.resolvedPaths.cwd,h));continue}await promises.writeFile(h,E,"utf-8"),j?l.push(x__default.relative(t.resolvedPaths.cwd,h)):(o.push(x__default.relative(t.resolvedPaths.cwd,h)),Q(h)&&(p=Object.keys(te(E)),c=x__default.relative(t.resolvedPaths.cwd,h)));}let d=[...o,...l,...f],u=await Nr(d,t);if(l.push(...u),l=l.filter(y=>!o.includes(y)),!(o.length||l.length)&&!f.length&&s?.info("No files updated."),o=Array.from(new Set(o)),l=Array.from(new Set(l)),f=Array.from(new Set(f)),o.length){if(s?.succeed(`Created ${o.length} ${o.length===1?"file":"files"}:`),!r.silent)for(let y of o)S.log(` - ${y}`);}else s?.stop();if(l.length&&(X(`Updated ${l.length} ${l.length===1?"file":"files"}:`,{silent:r.silent})?.info(),!r.silent))for(let y of l)S.log(` - ${y}`);if(f.length&&(X(`Skipped ${f.length} ${l.length===1?"file":"files"}: (files might be identical, use --overwrite to overwrite)`,{silent:r.silent})?.info(),!r.silent))for(let y of f)S.log(` - ${y}`);if(p.length&&c&&(X(`Added the following variables to ${T.info(c)}:`)?.info(),!r.silent))for(let y of p)S.log(` ${T.success("+")} ${y}`);return r.silent||S.break(),{filesCreated:o,filesUpdated:l,filesSkipped:f}}function _e(e,t,r){if(e.target){if(e.target.startsWith("~/"))return x__default.join(t.resolvedPaths.cwd,e.target.replace("~/",""));let i=e.target;return e.type==="registry:page"&&(i=Wr(i,r.framework),!i)?"":r.isSrcDir?x__default.join(t.resolvedPaths.cwd,"src",i.replace("src/","")):x__default.join(t.resolvedPaths.cwd,i.replace("src/",""))}let s=Kr(e,t),n=Vr(e.path,s);return x__default.join(s,n)}function Kr(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 Ue(e,t){let r=e.map(o=>o.replace(/^\//,"")),s=t.replace(/^\//,""),n=s.split("/").slice(0,-1).join("/");if(!n)return "";let i=n.split("/");for(let o=i.length;o>0;o--){let l=i.slice(0,o).join("/");if(r.some(p=>p!==s&&p.startsWith(l+"/")))return "/"+l}return "/"+n}function Vr(e,t){let r=e.replace(/^\/|\/$/g,""),s=t.replace(/^\/|\/$/g,""),n=r.split("/"),i=s.split("/"),o=i[i.length-1],l=n.findIndex(f=>f===o);return l===-1?n[n.length-1]:n.slice(l+1).join("/")}function Wr(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 Nr(e,t){let r=new Project({compilerOptions:{}}),s=await N(t.resolvedPaths.cwd),n=loadConfig(t.resolvedPaths.cwd),i=[];if(!s||n.resultType==="failed")return [];for(let o of e){let l=x__default.resolve(t.resolvedPaths.cwd,o);if(!existsSync(l))continue;let f=await promises.readFile(l,"utf-8"),p=await promises.mkdtemp(x__default.join(tmpdir(),"shadcn-")),c=r.createSourceFile(x__default.join(p,basename(l)),f,{scriptKind:ScriptKind.TSX});if(![".tsx",".ts",".jsx",".js"].includes(c.getExtension()))continue;let d=c.getImportDeclarations();for(let u of d){let w=u.getModuleSpecifierValue();if(s?.aliasPrefix&&!w.startsWith(`${s.aliasPrefix}/`))continue;let y=await O(w,n);if(!y)continue;let h=_r(y,e,t);if(!h)continue;let v=Ur(h,t,s);!v||v===w||(u.setModuleSpecifier(v),await promises.writeFile(l,c.getFullText(),"utf-8"),i.push(o));}}return i}function _r(e,t,r,s=[".tsx",".ts",".js",".jsx",".css"]){let n=x__default.normalize(r.resolvedPaths.cwd),i=t.map(v=>v.split(x__default.sep).join(x__default.posix.sep)),o=new Set(i),l=x__default.extname(e),f=l!=="",p=f?e.slice(0,-l.length):e,d=x__default.relative(n,p).split(x__default.sep).join(x__default.posix.sep),u=f?[l]:s,w=new Set;for(let v of u){let k=p+v,j=x__default.posix.normalize(x__default.relative(n,k));(o.has(j)||existsSync(k))&&w.add(j);let E=x__default.join(p,`index${v}`),P=x__default.posix.normalize(x__default.relative(n,E));(o.has(P)||existsSync(E))&&w.add(P);}let y=x__default.basename(p);for(let v of i)u.some(k=>v.endsWith(`/${y}${k}`))&&w.add(v);return w.size===0?null:Array.from(w).sort((v,k)=>{let j=x__default.posix.extname(v),E=x__default.posix.extname(k),P=u.indexOf(j)-u.indexOf(E);if(P!==0)return P;let Y=d&&v.startsWith(d)?-1:1,m=d&&k.startsWith(d)?-1:1;return Y-m})[0]}function Ur(e,t,r){let s=x__default.normalize(x__default.join(t.resolvedPaths.cwd,e)),n=Object.entries(t.resolvedPaths).filter(([,y])=>y&&s.startsWith(x__default.normalize(y+x__default.sep))).sort((y,h)=>h[1].length-y[1].length);if(n.length===0)return null;let[i,o]=n[0],l=x__default.relative(o,s);l=l.split(x__default.sep).join("/");let f=x__default.posix.extname(l),c=[".ts",".tsx",".js",".jsx"].includes(f)?"":f,d=l.slice(0,l.length-f.length);d.endsWith("/index")&&(d=d.slice(0,-6));let u=i==="cwd"?r.aliasPrefix:t.aliases[i];if(!u)return null;let w=d===""?"":`/${d}`;return w=w.replace("/src",""),`${u}${w}${c}`}var St=[".tsx",".ts",".jsx",".js",".css"],Pt=["lib/utils.ts"],Gr=[/^(react|react-dom|next)(\/.*)?$/,/^(node|jsr|npm):.*$/],qr=new Project({compilerOptions:{}});function Yr(e){if(Gr.some(t=>t.test(e)))return null;if(!e.startsWith("@")&&e.includes("/")&&(e=e.split("/")[0]),e.startsWith("@")){let t=e.split("/");t.length>2&&(e=t.slice(0,2).join("/"));}return e}async function Qr(e,t,r,s=new Set){let n=x.resolve(t.resolvedPaths.cwd,e),i=x.relative(t.resolvedPaths.cwd,n);if(Pt.includes(i))return {dependencies:[],files:[]};let o=x.extname(e);if(!St.includes(o))return {dependencies:[],files:[]};if(s.has(i))return {dependencies:[],files:[]};if(s.add(i),!(await H.stat(n)).isFile())return {dependencies:[],files:[]};let f=await H.readFile(n,"utf-8"),p=await Xr(x.basename(n)),c=qr.createSourceFile(p,f,{scriptKind:ScriptKind.TSX}),d=await loadConfig(t.resolvedPaths.cwd);if(d.resultType==="failed")return {dependencies:[],files:[]};let u=[],w=new Set,y=It(e),h={path:i,type:y,target:""};u.push(h);let v=c.getImportDeclarations();for(let j of v){let E=j.getModuleSpecifierValue(),P=E.startsWith(".");if(!E.startsWith(`${r.aliasPrefix}/`)&&!P){let C=Yr(E);C&&w.add(C);continue}let m=await O(E,d);if(P&&(m=x.resolve(x.dirname(n),E)),!m)continue;if(!x.extname(m))for(let C of St){let L=`${m}${C}`;try{await H.access(L),m=L;break}catch{continue}}let R=x.relative(t.resolvedPaths.cwd,m);if(s.has(R)||Pt.includes(R))continue;let $=It(E),V={path:R,type:$,target:""};($==="registry:page"||$==="registry:file")&&(V.target=E),u.push(V);let A=await Qr(R,t,r,s);if(A.files)for(let C of A.files)s.has(C.path)||(s.add(C.path),u.push(C));A.dependencies&&A.dependencies.forEach(C=>w.add(C));}let k=Array.from(new Map(u.map(j=>[j.path,j])).values());return {dependencies:Array.from(w),files:k}}async function Xr(e){let t=await H.mkdtemp(x.join(tmpdir(),"shadcn-"));return x.join(t,e)}function It(e){return e.includes("/ui/")?"registry:ui":e.includes("/lib/")?"registry:lib":e.includes("/hooks/")?"registry:hook":(e.includes("/components/"),"registry:component")}function Zr(e){try{return new URL(e),!0}catch{return !1}}function J(e){return e.endsWith(".json")&&!Zr(e)}function Ji(e){return !!e?.files?.length&&e.files.every(t=>!!t.target&&(t.type==="registry:file"||t.type==="registry:item"))}async function Et(e,t){if(!es(t))return z$1.array(de).parse(e.flat().filter(Boolean));let r=await N(t.resolvedPaths.cwd),s=new Map,n=z$1.array(de).parse(e.flat().filter(Boolean));return n.forEach(i=>{let o=_e(i,t,{isSrcDir:r?.isSrcDir,framework:r?.framework.name,commonRoot:Ue(n.map(l=>l.path),i.path)});o&&s.set(o,i);}),Array.from(s.values())}function es(e){return !!(e?.resolvedPaths?.cwd&&(e?.resolvedPaths?.ui||e?.resolvedPaths?.lib||e?.resolvedPaths?.components||e?.resolvedPaths?.hooks))}function K(e){if(S.break(),S.error("Something went wrong. Please check the error below for more details."),S.error("If the problem persists, please open an issue on GitHub."),S.error(""),typeof e=="string"&&(S.error(e),S.break(),process.exit(1)),e instanceof z$1.ZodError){S.error("Validation failed:");for(let[t,r]of Object.entries(e.flatten().fieldErrors))S.error(`- ${T.info(t)}: ${r}`);S.break(),process.exit(1);}e instanceof Error&&(S.error(e.message),S.break(),process.exit(1)),S.break(),process.exit(1);}async function fo(e,t,r){if(!e||(r={silent:!1,tailwindVersion:"v3",...r},r.tailwindVersion==="v4"))return;let s=x__default.relative(t.resolvedPaths.cwd,t.resolvedPaths.tailwindConfig),n=X(`Updating ${T.info(s)}`,{silent:r.silent}).start(),i=await promises.readFile(t.resolvedPaths.tailwindConfig,"utf8"),o=await as(i,e,t);await promises.writeFile(t.resolvedPaths.tailwindConfig,o,"utf8"),n?.succeed();}async function as(e,t,r){let s=await Ct(e,r),n=s.getDescendantsOfKind(SyntaxKind.ObjectLiteralExpression).find(o=>o.getProperties().some(l=>l.isKind(SyntaxKind.PropertyAssignment)&&l.getName()==="content"));if(!n)return e;let i=fs(n);return ls(n,{name:"darkMode",value:"class"},{quoteChar:i}),t.plugins?.forEach(o=>{ps(n,o);}),t.theme&&await cs(n,t.theme),s.getFullText()}function ls(e,t,{quoteChar:r}){let s=e.getProperty("darkMode");if(!s){let n={name:t.name,initializer:`[${r}${t.value}${r}]`};return t.name==="darkMode"?(e.insertPropertyAssignment(0,n),e):(e.addPropertyAssignment(n),e)}if(s.isKind(SyntaxKind.PropertyAssignment)){let n=s.getInitializer(),i=`${r}${t.value}${r}`;if(n?.isKind(SyntaxKind.StringLiteral)){let o=n.getText();return n.replaceWithText(`[${o}, ${i}]`),e}if(n?.isKind(SyntaxKind.ArrayLiteralExpression)){if(n.getElements().map(o=>o.getText()).includes(i))return e;n.addElement(i);}return e}return e}async function cs(e,t){e.getProperty("theme")||e.addPropertyAssignment({name:"theme",initializer:"{}"}),He(e);let s=(e.getPropertyOrThrow("theme")?.asKindOrThrow(SyntaxKind.PropertyAssignment)).getInitializer();if(s?.isKind(SyntaxKind.ObjectLiteralExpression)){let n=s.getText(),i=await ms(n),o=se(i,t,{arrayMerge:(f,p)=>p}),l=ns(o).replace(/\'\.\.\.(.*)\'/g,"...$1").replace(/\'\"/g,"'").replace(/\"\'/g,"'").replace(/\'\[/g,"[").replace(/\]\'/g,"]").replace(/\'\\\'/g,"'").replace(/\\\'/g,"'").replace(/\\\'\'/g,"'").replace(/\'\'/g,"'");s.replaceWithText(l);}Je(e);}function ps(e,t){let r=e.getProperty("plugins");if(!r)return e.addPropertyAssignment({name:"plugins",initializer:`[${t}]`}),e;if(r.isKind(SyntaxKind.PropertyAssignment)){let s=r.getInitializer();if(s?.isKind(SyntaxKind.ArrayLiteralExpression)){if(s.getElements().map(n=>n.getText().replace(/["']/g,"")).includes(t.replace(/["']/g,"")))return e;s.addElement(t);}return e}return e}async function Ct(e,t){let r=await promises.mkdtemp(x__default.join(tmpdir(),"shadcn-")),s=t?.resolvedPaths?.tailwindConfig||"tailwind.config.ts",n=x__default.join(r,`shadcn-${x__default.basename(s)}`);return new Project({compilerOptions:{}}).createSourceFile(n,e,{scriptKind:x__default.extname(s)===".ts"?ScriptKind.TS:ScriptKind.JS})}function fs(e){return e.getFirstDescendantByKind(SyntaxKind.StringLiteral)?.getQuoteKind()===QuoteKind.Single?"'":'"'}function He(e){let t=e.getProperties();for(let r=0;r<t.length;r++){let s=t[r];if(s.isKind(SyntaxKind.SpreadAssignment)){let n=s.asKindOrThrow(SyntaxKind.SpreadAssignment),i=n.getExpression().getText();e.insertPropertyAssignment(r,{name:`"___${i.replace(/^\.\.\./,"")}"`,initializer:`"...${i.replace(/^\.\.\./,"")}"`}),n.remove();}else if(s.isKind(SyntaxKind.PropertyAssignment)){let i=s.asKindOrThrow(SyntaxKind.PropertyAssignment).getInitializer();i&&i.isKind(SyntaxKind.ObjectLiteralExpression)?He(i.asKindOrThrow(SyntaxKind.ObjectLiteralExpression)):i&&i.isKind(SyntaxKind.ArrayLiteralExpression)&&Tt(i.asKindOrThrow(SyntaxKind.ArrayLiteralExpression));}}}function Tt(e){let t=e.getElements();for(let r=0;r<t.length;r++){let s=t[r];if(s.isKind(SyntaxKind.ObjectLiteralExpression))He(s.asKindOrThrow(SyntaxKind.ObjectLiteralExpression));else if(s.isKind(SyntaxKind.ArrayLiteralExpression))Tt(s.asKindOrThrow(SyntaxKind.ArrayLiteralExpression));else if(s.isKind(SyntaxKind.SpreadElement)){let n=s.getText();e.removeElement(r),e.insertElement(r,`"${n}"`);}}}function Je(e){let t=e.getProperties();for(let r=0;r<t.length;r++){let s=t[r];if(s.isKind(SyntaxKind.PropertyAssignment)){let n=s,i=n.getInitializer();if(i&&i.isKind(SyntaxKind.StringLiteral)){let o=i.asKindOrThrow(SyntaxKind.StringLiteral).getLiteralValue();o.startsWith("...")&&(e.insertSpreadAssignment(r,{expression:o.slice(3)}),n.remove());}else i?.isKind(SyntaxKind.ObjectLiteralExpression)?Je(i):i&&i.isKind(SyntaxKind.ArrayLiteralExpression)&&kt(i.asKindOrThrow(SyntaxKind.ArrayLiteralExpression));}}}function kt(e){let t=e.getElements();for(let r=0;r<t.length;r++){let s=t[r];if(s.isKind(SyntaxKind.ObjectLiteralExpression))Je(s.asKindOrThrow(SyntaxKind.ObjectLiteralExpression));else if(s.isKind(SyntaxKind.ArrayLiteralExpression))kt(s.asKindOrThrow(SyntaxKind.ArrayLiteralExpression));else if(s.isKind(SyntaxKind.StringLiteral)){let n=s.getText(),i=/(?:^['"])(\.\.\..*)(?:['"]$)/g;i.test(n)&&(e.removeElement(r),e.insertElement(r,n.replace(i,"$1")));}}}async function ms(e){let r=(await Ct(`const theme = ${e}`,null)).getStatements()[0];if(r?.getKind()===SyntaxKind.VariableStatement){let n=(r.getDeclarationList()?.getDeclarations()[0]).getInitializer();if(n?.isKind(SyntaxKind.ObjectLiteralExpression))return await je(n)}throw new Error("Invalid input: not an object literal")}function je(e){let t={};for(let r of e.getProperties())if(r.isKind(SyntaxKind.PropertyAssignment)){let s=r.getName().replace(/\'/g,"");r.getInitializer()?.isKind(SyntaxKind.ObjectLiteralExpression)?t[s]=je(r.getInitializer()):r.getInitializer()?.isKind(SyntaxKind.ArrayLiteralExpression)?t[s]=jt(r.getInitializer()):t[s]=Ge(r.getInitializer());}return t}function jt(e){let t=[];for(let r of e.getElements())r.isKind(SyntaxKind.ObjectLiteralExpression)?t.push(je(r.asKindOrThrow(SyntaxKind.ObjectLiteralExpression))):r.isKind(SyntaxKind.ArrayLiteralExpression)?t.push(jt(r.asKindOrThrow(SyntaxKind.ArrayLiteralExpression))):t.push(Ge(r));return t}function Ge(e){switch(e.getKind()){case SyntaxKind.StringLiteral:return e.getText();case SyntaxKind.NumericLiteral:return Number(e.getText());case SyntaxKind.TrueKeyword:return !0;case SyntaxKind.FalseKeyword:return !1;case SyntaxKind.NullKeyword:return null;case SyntaxKind.ArrayLiteralExpression:return e.getElements().map(Ge);case SyntaxKind.ObjectLiteralExpression:return je(e);default:return e.getText()}}function Rt(e){let t={};for(let r of Object.keys(e)){let s=r.split("-"),n=s[0],i=s.slice(1).join("-");i===""?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][i]=`hsl(var(--${r}))`);}for(let[r,s]of Object.entries(t))typeof s=="object"&&s.DEFAULT===`hsl(var(--${r}))`&&!(r in e)&&delete s.DEFAULT;return t}var xs=process.env.https_proxy?new HttpsProxyAgent(process.env.https_proxy):void 0,Re=new Map,ws=[{name:"neutral",label:"Neutral"},{name:"gray",label:"Gray"},{name:"zinc",label:"Zinc"},{name:"stone",label:"Stone"},{name:"slate",label:"Slate"}];async function vs(){try{let[e]=await q(["index.json"]);return Le.parse(e)}catch(e){S.error(`
51
+ `),K(e);}}async function Oo(){try{let[e]=await q(["styles/index.json"]);return Ye.parse(e)}catch(e){return S.error(`
52
+ `),K(e),[]}}async function ut(){try{let[e]=await q(["icons/index.json"]);return Qe.parse(e)}catch(e){return K(e),{}}}async function pe(e,t,r){r={useCache:!0,...r};try{if(J(e))return await Ss(e);if(W(e)){let[o]=await fe([e],t);return o}if(e.startsWith("@")&&t?.registries){let[o]=await fe([e],t,r);return o}let n=`styles/${await $e(t)??"new-york-v4"}/${e}.json`,[i]=await fe([n],t,r);return i}catch(s){return S.break(),K(s),null}}async function Ss(e){try{let t=e;e.startsWith("~/")&&(t=x__default.join(homedir(),e.slice(2)));let r=x__default.resolve(t),s=await promises.readFile(r,"utf8"),n=JSON.parse(s);return _.parse(n)}catch(t){return S.error(`Failed to read local registry file: ${e}`),K(t),null}}async function Do(e,t){try{let r=await fe([e],t,{useCache:!1});return r?.length?Ae.parse(r[0]):null}catch(r){return S.break(),K(r),null}}async function Ko(){return ws}async function Me(e){try{let[t]=await q([`colors/${e}.json`]);return Xe.parse(t)}catch(t){K(t);}}async function Ps(e,t){let r=[];for(let s of t){let n=e.find(i=>i.name===s);if(n&&(r.push(n),n.registryDependencies)){let i=await Ps(e,n.registryDependencies);r.push(...i);}}return r.filter((s,n,i)=>i.findIndex(o=>o.name===s.name)===n)}async function Vo(e,t){try{let r=t.map(n=>`styles/${e}/${n.name}.json`),s=await q(r);return Le.parse(s)}catch(r){K(r);}}async function Wo(e,t,r){if(r)return r;if(t.type==="registry:ui")return e.resolvedPaths.ui??e.resolvedPaths.components;let[s,n]=t.type?.split(":")??[];return s in e.resolvedPaths?x__default.join(e.resolvedPaths[s],n):null}async function q(e,t={}){t={useCache:!0,...t};try{return await Promise.all(e.map(async s=>{let n=Ft(s);if(t.useCache&&Re.has(n))return Re.get(n);let i=(async()=>{let o=it(n),l=await ys(n,{agent:xs,headers:{...o}});if(!l.ok){let f={400:"Bad request",401:"Unauthorized",403:"Forbidden",404:"Not found",500:"Internal server error"},p="";try{let c=await l.json();if(c&&typeof c=="object"){let d=[];"error"in c&&c.error&&d.push(`[${c.error}]: `),"message"in c&&c.message&&d.push(c.message),d.length>0&&(p=`
53
+
54
+ Server response:
55
+ ${d.join("")}`);}}catch{}throw l.status===401?new Error(`You are not authorized to access the component at ${T.info(n)}.
56
+ If this is a remote registry, you may need to authenticate.${p}`):l.status===404?new Error(`The component at ${T.info(n)} was not found.
57
+ It may not exist at the registry. Please make sure it is a valid component.${p}`):l.status===403?new Error(`You do not have access to the component at ${T.info(n)}.
58
+ If this is a remote registry, you may need to authenticate or a token.${p}`):new Error(`Failed to fetch from ${T.info(n)}.
59
+ ${p||l.statusText||f[l.status]}`)}return l.json()})();return t.useCache&&Re.set(n,i),i}))}catch(r){return S.error(`
60
+ `),K(r),[]}}function No(){Re.clear();}async function $e(e){return e?await le(e)==="v4"&&e.style==="new-york"?"new-york-v4":e.style:void 0}async function fe(e,t,r={}){ot();let s=await $e(t),n=t&&s?{...t,style:s}:t,i=n?ue(e,n):e;return (await q(i,r)).map((l,f)=>{let p=e[f],c=i[f];return p.endsWith("/registry")||c.endsWith("/registry.json")?Ae.parse(l):_.parse(l)})}async function Z(e,t,r=new Set){let s=[],n=[];for(let i of e)if(!r.has(i)){if(r.add(i),W(i)||J(i)){let o=await pe(i,t);if(o&&(s.push(o),o.registryDependencies)){let l=await Z(o.registryDependencies,t,r);s.push(...l.items),n.push(...l.registryNames);}}else if(i.startsWith("@")&&t?.registries){let{registry:o}=U(i);if(o&&!(o in t.registries))throw new Error(`The items you're adding depend on unknown registry ${o}.
61
+ Make sure it is defined in components.json as follows:
62
+ {
63
+ "registries": {
64
+ "${o}": "https://example.com/{name}.json"
65
+ }
66
+ }`);let l=await pe(i,t);if(l&&(s.push(l),l.registryDependencies)){let f=await Z(l.registryDependencies,t,r);s.push(...f.items),n.push(...f.registryNames);}}else if(n.push(i),t)try{let o=await pe(i,t);if(o&&o.registryDependencies){let l=await Z(o.registryDependencies,t,r);s.push(...l.items),n.push(...l.registryNames);}}catch{}}return {items:s,registryNames:n}}async function Is(e,t){try{let r=e.filter(m=>!J(m)&&!W(m)&&m.startsWith("@"));if(r.length>0&&!t?.registries){let{registry:m}=U(r[0]);throw new Error(`Unknown registry "${m}". Make sure it is defined in components.json as follows:
67
+ {
68
+ "registries": {
69
+ "${m}": "https://example.com/{name}.json"
70
+ }
71
+ }`)}let s=e.filter(m=>J(m)),n=e.filter(m=>W(m)),i=e.filter(m=>!J(m)&&!W(m)),o=[],l=[],f=[],p=await $e(t),c=t&&p?{...t,style:p}:t,d=Array.from(new Set(s)),u=Array.from(new Set(n));for(let m of d){let I=await pe(m);if(I){let R={...I,_source:m};if(o.push(R),I.registryDependencies){let $=I.registryDependencies;if(t?.registries)$=ue(I.registryDependencies,c);else {let C=I.registryDependencies.filter(L=>L.startsWith("@"));if(C.length>0){let{registry:L}=U(C[0]);throw new Error(`The items you're adding depend on unknown registry ${L}.
72
+ Make sure it is defined in components.json as follows:
73
+ {
74
+ "registries": {
75
+ "${L}": "https://example.com/{name}.json"
76
+ }
77
+ }`)}}let{items:V,registryNames:A}=await Z($,t,new Set);l.push(...V),f.push(...A);}}}for(let m of u){let I=await pe(m,t);if(I){let R={...I,_source:m};if(o.push(R),I.registryDependencies){let $=I.registryDependencies;if(t?.registries)$=ue(I.registryDependencies,c);else {let C=I.registryDependencies.filter(L=>L.startsWith("@"));if(C.length>0){let{registry:L}=U(C[0]);throw new Error(`The items you're adding depend on unknown registry ${L}.
78
+ Make sure it is defined in components.json as follows:
79
+ {
80
+ "registries": {
81
+ "${L}": "https://example.com/{name}.json"
82
+ }
83
+ }`)}}let{items:V,registryNames:A}=await Z($,t,new Set);l.push(...V),f.push(...A);}}}o.push(...l);let w=[...i,...f];if(w.length>0){let m=w.filter(R=>!R.startsWith("@")),I=w.filter(R=>R.startsWith("@"));if(I.length>0){let $=await fe(I,t),V=$.map((A,C)=>({...A,_source:I[C]}));o.push(...V);for(let A of $)if(A.registryDependencies){let{items:C,registryNames:L}=await Z(A.registryDependencies,t,new Set([...I]));o.push(...C);let At=L.filter(Lt=>!Lt.startsWith("@"));m.push(...At);}}if(m.length>0){let R=await vs();if(!R&&o.length===0)return null;if(R){let $=Array.from(new Set(m));$.includes("index")&&$.unshift("index");let V=await Cs($,t),A=await q(V),C=z$1.array(_).parse(A);o.push(...C);}}}if(!o.length)return null;if(w.includes("index")&&t.tailwind.baseColor){let m=await bs(t.tailwind.baseColor,t);m&&o.unshift(m);}let y=new Map;o.forEach(m=>{let I=m._source||m.name;y.set(m,I);}),o=ks(o,y),o.sort((m,I)=>m.type==="registry:theme"&&I.type!=="registry:theme"?-1:m.type!=="registry:theme"&&I.type==="registry:theme"?1:0);let h={};o.forEach(m=>{h=se(h,m.tailwind??{});});let v={};o.forEach(m=>{v=se(v,m.cssVars??{});});let k={};o.forEach(m=>{k=se(k,m.css??{});});let j="";o.forEach(m=>{m.docs&&(j+=`${m.docs}
84
+ `);});let E={};o.forEach(m=>{E=se(E,m.envVars??{});});let P=await Et(o.map(m=>m.files??[]),t),Y=Ze.parse({dependencies:se.all(o.map(m=>m.dependencies??[])),devDependencies:se.all(o.map(m=>m.devDependencies??[])),files:P,tailwind:h,cssVars:v,css:k,docs:j});return Object.keys(E).length>0&&(Y.envVars=E),Y}catch(r){return K(r),null}}async function Es(e,t){if(W(e))return [e];let{registryNames:r}=await Z([e],t,new Set),s=t.resolvedPaths?.cwd?await at(t.resolvedPaths.cwd,t.style):t.style,n=r.map(i=>Ft(W(i)?i:`styles/${s}/${i}.json`));return Array.from(new Set(n))}async function bs(e,t){let[r,s]=await Promise.all([Me(e),le(t)]);if(!r)return null;let n={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:{theme:{},light:{radius:"0.5rem"},dark:{}}};return t.tailwind.cssVariables&&(n.tailwind.config.theme.extend.colors={...n.tailwind.config.theme.extend.colors,...Rt(r.cssVars.dark??{})},n.cssVars={theme:{...r.cssVars.theme,...n.cssVars.theme},light:{...r.cssVars.light,...n.cssVars.light},dark:{...r.cssVars.dark,...n.cssVars.dark}},s==="v4"&&r.cssVarsV4&&(n.cssVars={theme:{...r.cssVarsV4.theme,...n.cssVars.theme},light:{radius:"0.625rem",...r.cssVarsV4.light},dark:{...r.cssVarsV4.dark}})),n}function Ft(e){if(W(e)){let t=new URL(e);return t.pathname.match(/\/chat\/b\//)&&!t.pathname.endsWith("/json")&&(t.pathname=`${t.pathname}/json`),t.toString()}return `${he}/${e}`}function W(e){try{return new URL(e),!0}catch{return !1}}async function Cs(e,t){let r=[],s=e.filter(i=>!J(i)&&!W(i)),n=await $e(t);for(let i of s){let o=i;if(t)try{let f=t&&n?{...t,style:n}:t,p=oe(i,f);p&&(o=p.url);}catch{}let l=await Es(o,t);r.push(...l);}return Array.from(new Set(r))}function _o(){return new Map([["registry:ui","ui"],["registry:lib","lib"],["registry:hook","hooks"],["registry:block","components"],["registry:component","components"]])}function Uo(e){let t=new Map;return e.forEach(r=>{r.registryDependencies&&r.registryDependencies.forEach(s=>{t.set(s,r);});}),t}_.extend({_source:z$1.string().optional()});function G(e,t){let r=t||e.name,s=createHash("sha256").update(r).digest("hex").substring(0,8);return `${e.name}::${s}`}function Ts(e){if(W(e)){let s=new URL(e).pathname,n=s.match(/\/([^/]+)\.json$/),i=n?n[1]:x__default.basename(s,".json");return {name:i,hash:G({name:i},e)}}if(J(e)){let r=e.match(/\/([^/]+)\.json$/),s=r?r[1]:x__default.basename(e,".json");return {name:s,hash:G({name:s},e)}}let{item:t}=U(e);return {name:t,hash:G({name:t},e)}}function ks(e,t){let r=new Map,s=new Map,n=new Map,i=new Map;e.forEach(p=>{let c=t.get(p)||p.name,d=G(p,c);r.set(d,p),s.set(d,p),n.set(d,0),i.set(d,[]);});let o=new Map;e.forEach(p=>{let c=t.get(p)||p.name,d=G(p,c);o.has(p.name)||o.set(p.name,[]),o.get(p.name).push(d),c!==p.name&&(o.has(c)||o.set(c,[]),o.get(c).push(d));}),e.forEach(p=>{let c=t.get(p)||p.name,d=G(p,c);p.registryDependencies&&p.registryDependencies.forEach(u=>{let w,y=o.get(u)||[];if(y.length===1)w=y[0];else if(y.length>1)w=y[0];else {let{name:h}=Ts(u),v=o.get(h)||[];v.length>0&&(w=v[0]);}w&&r.has(w)&&(i.get(w).push(d),n.set(d,n.get(d)+1));});});let l=[],f=[];for(n.forEach((p,c)=>{p===0&&l.push(c);});l.length>0;){let p=l.shift(),c=r.get(p);f.push(c),i.get(p).forEach(d=>{let u=n.get(d)-1;n.set(d,u),u===0&&l.push(d);});}if(f.length!==e.length){console.warn("Circular dependency detected in registry items");let p=new Set(f.map(c=>{let d=t.get(c)||c.name;return G(c,d)}));e.forEach(c=>{let d=t.get(c)||c.name,u=G(c,d);p.has(u)||f.push(c);});}return f}
85
+
86
+ export { W as $, Ie as A, xt as B, Oi as C, Qr as D, Ji as E, K as F, fo as G, Ct as H, fs as I, he as J, ae as K, ws as L, vs as M, Oo as N, ut as O, pe as P, Do as Q, Ko as R, Me as S, Ps as T, Vo as U, Wo as V, q as W, No as X, fe as Y, Is as Z, bs as _, qe as a, Cs as aa, de as b, _o as ba, zt as c, Uo as ca, Fe as d, nn as da, Ot as e, on as ea, Dt as f, an as fa, _ as g, ln as ga, Ae as h, ye as ha, Le as i, Ve as ia, Ye as j, cn as ja, Qe as k, sr as ka, Xe as l, ir as la, Ze as m, pn as ma, Kt as n, We as na, Vt as o, N as oa, ze as p, Cn as pa, Oe as q, le as qa, et as r, oe as s, ot as t, ft as u, mt as v, dt as w, T as x, S as y, X as z };
87
+ //# sourceMappingURL=out.js.map
88
+ //# sourceMappingURL=chunk-5WS7HUEG.js.map