hghcn 3.6.18 → 3.6.20

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.
@@ -1,4 +1,4 @@
1
- import {ma,_,u as u$1,aa}from'./chunk-I3JXSMK6.js';import {Server}from'@modelcontextprotocol/sdk/server/index.js';import {ListToolsRequestSchema,CallToolRequestSchema}from'@modelcontextprotocol/sdk/types.js';import a from'dedent';import {z}from'zod';import {zodToJsonSchema}from'zod-to-json-schema';import {detect}from'@antfu/ni';async function k(n,{withFallback:e}={withFallback:false}){let r=await detect({programmatic:true,cwd:n});if(r==="yarn@berry")return "yarn";if(r==="pnpm@6")return "pnpm";if(r==="bun")return "bun";if(r==="deno")return "deno";if(!e)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 b(n){let e=await k(n);return e==="pnpm"?"pnpm dlx":e==="bun"?"bunx":"npx"}var C="shadcn@latest";async function g(n){return `${await b(process.cwd())} ${C} ${n}`}async function u(n=process.cwd()){return {registries:(await aa(n,{useCache:false})).registries}}function y(n,e){let{query:r,registries:i}=e||{},s=n.items.map(c=>{let f=[`- ${c.name}`];return c.type&&f.push(`(${c.type})`),c.description&&f.push(`- ${c.description}`),c.registry&&f.push(`[${c.registry}]`),f.push(`
1
+ import {ea,S,d,U}from'./chunk-XYXOKYQL.js';import {Server}from'@modelcontextprotocol/sdk/server/index.js';import {ListToolsRequestSchema,CallToolRequestSchema}from'@modelcontextprotocol/sdk/types.js';import a from'dedent';import {z}from'zod';import {zodToJsonSchema}from'zod-to-json-schema';import {detect}from'@antfu/ni';async function k(n,{withFallback:e}={withFallback:false}){let r=await detect({programmatic:true,cwd:n});if(r==="yarn@berry")return "yarn";if(r==="pnpm@6")return "pnpm";if(r==="bun")return "bun";if(r==="deno")return "deno";if(!e)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 b(n){let e=await k(n);return e==="pnpm"?"pnpm dlx":e==="bun"?"bunx":"npx"}var C="shadcn@latest";async function g(n){return `${await b(process.cwd())} ${C} ${n}`}async function u(n=process.cwd()){return {registries:(await U(n,{useCache:false})).registries}}function y(n,e){let{query:r,registries:i}=e||{},s=n.items.map(c=>{let f=[`- ${c.name}`];return c.type&&f.push(`(${c.type})`),c.description&&f.push(`- ${c.description}`),c.registry&&f.push(`[${c.registry}]`),f.push(`
2
2
  Add command: \`${g(`add ${c.addCommandArgument}`)}\``),f.join(" ")}),o=`Found ${n.pagination.total} items`;r&&(o+=` matching "${r}"`),i&&i.length>0&&(o+=` in registries ${i.join(", ")}`),o+=":";let m=`Showing items ${n.pagination.offset+1}-${Math.min(n.pagination.offset+n.pagination.limit,n.pagination.total)} of ${n.pagination.total}:`,d=`${o}
3
3
 
4
4
  ${m}
@@ -34,7 +34,7 @@ Found ${n.length} example${n.length>1?"s":""} matching "${e}":
34
34
 
35
35
  To fix this:
36
36
  1. Use the \`init\` command to create a components.json file
37
- 2. Or manually create components.json with a registries section`}]}}case "search_items_in_registries":{let r=z.object({registries:z.array(z.string()),query:z.string(),limit:z.number().optional(),offset:z.number().optional()}).parse(n.params.arguments),i=await ma(r.registries,{query:r.query,limit:r.limit,offset:r.offset,config:await u(process.cwd()),useCache:!1});return i.items.length===0?{content:[{type:"text",text:a`No items found matching "${r.query}" in registries ${r.registries.join(", ")}, Try searching with a different query or registry.`}]}:{content:[{type:"text",text:y(i,{query:r.query,registries:r.registries})}]}}case "list_items_in_registries":{let r=z.object({registries:z.array(z.string()),limit:z.number().optional(),offset:z.number().optional(),cwd:z.string().optional()}).parse(n.params.arguments),i=await ma(r.registries,{limit:r.limit,offset:r.offset,config:await u(process.cwd()),useCache:!1});return i.items.length===0?{content:[{type:"text",text:a`No items found in registries ${r.registries.join(", ")}.`}]}:{content:[{type:"text",text:y(i,{registries:r.registries})}]}}case "view_items_in_registries":{let r=z.object({items:z.array(z.string())}).parse(n.params.arguments),i=await _(r.items,{config:await u(process.cwd()),useCache:!1});if(i?.length===0)return {content:[{type:"text",text:a`No items found for: ${r.items.join(", ")}
37
+ 2. Or manually create components.json with a registries section`}]}}case "search_items_in_registries":{let r=z.object({registries:z.array(z.string()),query:z.string(),limit:z.number().optional(),offset:z.number().optional()}).parse(n.params.arguments),i=await ea(r.registries,{query:r.query,limit:r.limit,offset:r.offset,config:await u(process.cwd()),useCache:!1});return i.items.length===0?{content:[{type:"text",text:a`No items found matching "${r.query}" in registries ${r.registries.join(", ")}, Try searching with a different query or registry.`}]}:{content:[{type:"text",text:y(i,{query:r.query,registries:r.registries})}]}}case "list_items_in_registries":{let r=z.object({registries:z.array(z.string()),limit:z.number().optional(),offset:z.number().optional(),cwd:z.string().optional()}).parse(n.params.arguments),i=await ea(r.registries,{limit:r.limit,offset:r.offset,config:await u(process.cwd()),useCache:!1});return i.items.length===0?{content:[{type:"text",text:a`No items found in registries ${r.registries.join(", ")}.`}]}:{content:[{type:"text",text:y(i,{registries:r.registries})}]}}case "view_items_in_registries":{let r=z.object({items:z.array(z.string())}).parse(n.params.arguments),i=await S(r.items,{config:await u(process.cwd()),useCache:!1});if(i?.length===0)return {content:[{type:"text",text:a`No items found for: ${r.items.join(", ")}
38
38
 
39
39
  Make sure the item names are correct and include the registry prefix (e.g., @shadcn/button).`}]};let s=w(i);return {content:[{type:"text",text:a`Item Details:
40
40
 
@@ -42,7 +42,7 @@ Found ${n.length} example${n.length>1?"s":""} matching "${e}":
42
42
 
43
43
  ---
44
44
 
45
- `)}`}]}}case "get_item_examples_from_registries":{let r=z.object({query:z.string(),registries:z.array(z.string())}).parse(n.params.arguments),i=await u(),s=await ma(r.registries,{query:r.query,config:i,useCache:!1});if(s.items.length===0)return {content:[{type:"text",text:a`No examples found for query "${r.query}".
45
+ `)}`}]}}case "get_item_examples_from_registries":{let r=z.object({query:z.string(),registries:z.array(z.string())}).parse(n.params.arguments),i=await u(),s=await ea(r.registries,{query:r.query,config:i,useCache:!1});if(s.items.length===0)return {content:[{type:"text",text:a`No examples found for query "${r.query}".
46
46
 
47
47
  Try searching with patterns like:
48
48
  - "accordion-demo" for accordion examples
@@ -51,7 +51,7 @@ Found ${n.length} example${n.length>1?"s":""} matching "${e}":
51
51
 
52
52
  You can also:
53
53
  1. Use search_items_in_registries to find all items matching your query
54
- 2. View the main component with view_items_in_registries for inline usage documentation`}]};let o=s.items.map(d=>d.addCommandArgument),m=await _(o,{config:i,useCache:!1});return {content:[{type:"text",text:$(m,r.query)}]}}case "get_add_command_for_items":{let e=z.object({items:z.array(z.string())}).parse(n.params.arguments);return {content:[{type:"text",text:await g(`add ${e.items.join(" ")}`)}]}}case "get_audit_checklist":return {content:[{type:"text",text:a`## Component Audit Checklist
54
+ 2. View the main component with view_items_in_registries for inline usage documentation`}]};let o=s.items.map(d=>d.addCommandArgument),m=await S(o,{config:i,useCache:!1});return {content:[{type:"text",text:$(m,r.query)}]}}case "get_add_command_for_items":{let e=z.object({items:z.array(z.string())}).parse(n.params.arguments);return {content:[{type:"text",text:await g(`add ${e.items.join(" ")}`)}]}}case "get_audit_checklist":return {content:[{type:"text",text:a`## Component Audit Checklist
55
55
 
56
56
  After adding or generating components, check the following common issues:
57
57
 
@@ -64,9 +64,9 @@ Found ${n.length} example${n.length>1?"s":""} matching "${e}":
64
64
  `}]};default:throw new Error(`Tool ${n.params.name} not found`)}}catch(e){if(e instanceof z.ZodError)return {content:[{type:"text",text:a`Invalid input parameters:
65
65
  ${e.errors.map(i=>`- ${i.path.join(".")}: ${i.message}`).join(`
66
66
  `)}
67
- `}],isError:true};if(e instanceof u$1){let i=e.message;return e.suggestion&&(i+=`
67
+ `}],isError:true};if(e instanceof d){let i=e.message;return e.suggestion&&(i+=`
68
68
 
69
69
  \u{1F4A1} ${e.suggestion}`),e.context&&(i+=`
70
70
 
71
- Context: ${JSON.stringify(e.context,null,2)}`),{content:[{type:"text",text:a`Error (${e.code}): ${i}`}],isError:true}}let r=e instanceof Error?e.message:String(e);return {content:[{type:"text",text:a`Error: ${r}`}],isError:true}}});export{k as a,j as b};//# sourceMappingURL=chunk-SSXFFJQN.js.map
72
- //# sourceMappingURL=chunk-SSXFFJQN.js.map
71
+ Context: ${JSON.stringify(e.context,null,2)}`),{content:[{type:"text",text:a`Error (${e.code}): ${i}`}],isError:true}}let r=e instanceof Error?e.message:String(e);return {content:[{type:"text",text:a`Error: ${r}`}],isError:true}}});export{k as a,j as b};//# sourceMappingURL=chunk-2NUTTJQY.js.map
72
+ //# sourceMappingURL=chunk-2NUTTJQY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/get-package-manager.ts","../src/mcp/utils.ts","../src/mcp/index.ts"],"names":["getPackageManager","targetDir","withFallback","packageManager","detect","userAgent","getPackageRunner","cwd","SHADCN_CLI_COMMAND","npxShadcn","command","getMcpConfig","getRegistriesConfig","formatSearchResultsWithPagination","results","options","query","registries","formattedItems","item","parts","header","showingRange","output","formatRegistryItems","items","formatItemExamples","sections","file","server","Server","ListToolsRequestSchema","zodToJsonSchema","z","CallToolRequestSchema","request","config","dedent","registry","args","searchRegistries","registryItems","getRegistryItems","itemNames","fullItems","error","e","RegistryError","errorMessage"],"mappings":"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","file":"chunk-SSXFFJQN.js","sourcesContent":["import { detect } from \"@antfu/ni\"\n\nexport async function getPackageManager(\n targetDir: string,\n { withFallback }: { withFallback?: boolean } = {\n withFallback: false,\n }\n): Promise<\"yarn\" | \"pnpm\" | \"bun\" | \"npm\" | \"deno\"> {\n const packageManager = await detect({ programmatic: true, cwd: targetDir })\n\n if (packageManager === \"yarn@berry\") return \"yarn\"\n if (packageManager === \"pnpm@6\") return \"pnpm\"\n if (packageManager === \"bun\") return \"bun\"\n if (packageManager === \"deno\") return \"deno\"\n if (!withFallback) {\n return packageManager ?? \"npm\"\n }\n\n // Fallback to user agent if not detected.\n const userAgent = process.env.npm_config_user_agent || \"\"\n\n if (userAgent.startsWith(\"yarn\")) {\n return \"yarn\"\n }\n\n if (userAgent.startsWith(\"pnpm\")) {\n return \"pnpm\"\n }\n\n if (userAgent.startsWith(\"bun\")) {\n return \"bun\"\n }\n\n return \"npm\"\n}\n\nexport async function getPackageRunner(cwd: string) {\n const packageManager = await getPackageManager(cwd)\n\n if (packageManager === \"pnpm\") return \"pnpm dlx\"\n\n if (packageManager === \"bun\") return \"bunx\"\n\n return \"npx\"\n}\n","import { getRegistriesConfig } from \"@/src/registry/api\"\nimport { registryItemSchema, searchResultsSchema } from \"@/src/schema\"\nimport { getPackageRunner } from \"@/src/utils/get-package-manager\"\nimport { z } from \"zod\"\n\nconst SHADCN_CLI_COMMAND = \"shadcn@latest\"\n\nexport async function npxShadcn(command: string) {\n const packageRunner = await getPackageRunner(process.cwd())\n return `${packageRunner} ${SHADCN_CLI_COMMAND} ${command}`\n}\n\nexport async function getMcpConfig(cwd = process.cwd()) {\n const config = await getRegistriesConfig(cwd, {\n useCache: false,\n })\n\n return {\n registries: config.registries,\n }\n}\n\nexport function formatSearchResultsWithPagination(\n results: z.infer<typeof searchResultsSchema>,\n options?: {\n query?: string\n registries?: string[]\n }\n) {\n const { query, registries } = options || {}\n\n const formattedItems = results.items.map((item) => {\n const parts: string[] = [`- ${item.name}`]\n\n if (item.type) {\n parts.push(`(${item.type})`)\n }\n\n if (item.description) {\n parts.push(`- ${item.description}`)\n }\n\n if (item.registry) {\n parts.push(`[${item.registry}]`)\n }\n\n parts.push(\n `\\n Add command: \\`${npxShadcn(`add ${item.addCommandArgument}`)}\\``\n )\n\n return parts.join(\" \")\n })\n\n let header = `Found ${results.pagination.total} items`\n if (query) {\n header += ` matching \"${query}\"`\n }\n if (registries && registries.length > 0) {\n header += ` in registries ${registries.join(\", \")}`\n }\n header += \":\"\n\n const showingRange = `Showing items ${\n results.pagination.offset + 1\n }-${Math.min(\n results.pagination.offset + results.pagination.limit,\n results.pagination.total\n )} of ${results.pagination.total}:`\n\n let output = `${header}\\n\\n${showingRange}\\n\\n${formattedItems.join(\"\\n\\n\")}`\n\n if (results.pagination.hasMore) {\n output += `\\n\\nMore items available. Use offset: ${\n results.pagination.offset + results.pagination.limit\n } to see the next page.`\n }\n\n return output\n}\n\nexport function formatRegistryItems(\n items: z.infer<typeof registryItemSchema>[]\n) {\n return items.map((item) => {\n const parts: string[] = [\n `## ${item.name}`,\n item.description ? `\\n${item.description}\\n` : \"\",\n item.type ? `**Type:** ${item.type}` : \"\",\n item.files && item.files.length > 0\n ? `**Files:** ${item.files.length} file(s)`\n : \"\",\n item.dependencies && item.dependencies.length > 0\n ? `**Dependencies:** ${item.dependencies.join(\", \")}`\n : \"\",\n item.devDependencies && item.devDependencies.length > 0\n ? `**Dev Dependencies:** ${item.devDependencies.join(\", \")}`\n : \"\",\n ]\n return parts.filter(Boolean).join(\"\\n\")\n })\n}\n\nexport function formatItemExamples(\n items: z.infer<typeof registryItemSchema>[],\n query: string\n) {\n const sections = items.map((item) => {\n const parts: string[] = [\n `## Example: ${item.name}`,\n item.description ? `\\n${item.description}\\n` : \"\",\n ]\n\n if (item.files?.length) {\n item.files.forEach((file) => {\n if (file.content) {\n parts.push(`### Code (${file.path}):\\n`)\n parts.push(\"```tsx\")\n parts.push(file.content)\n parts.push(\"```\")\n }\n })\n }\n\n return parts.filter(Boolean).join(\"\\n\")\n })\n\n const header = `# Usage Examples\\n\\nFound ${items.length} example${\n items.length > 1 ? \"s\" : \"\"\n } matching \"${query}\":\\n`\n\n return header + sections.join(\"\\n\\n---\\n\\n\")\n}\n","import { getRegistryItems, searchRegistries } from \"@/src/registry\"\nimport { RegistryError } from \"@/src/registry/errors\"\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\"\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\"\nimport dedent from \"dedent\"\nimport { z } from \"zod\"\nimport { zodToJsonSchema } from \"zod-to-json-schema\"\n\nimport {\n formatItemExamples,\n formatRegistryItems,\n formatSearchResultsWithPagination,\n getMcpConfig,\n npxShadcn,\n} from \"./utils\"\n\nexport const server = new Server(\n {\n name: \"shadcn\",\n version: \"1.0.0\",\n },\n {\n capabilities: {\n resources: {},\n tools: {},\n },\n }\n)\n\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: [\n {\n name: \"get_project_registries\",\n description:\n \"Get configured registry names from components.json - Returns error if no components.json exists (use init_project to create one)\",\n inputSchema: zodToJsonSchema(z.object({})),\n },\n {\n name: \"list_items_in_registries\",\n description:\n \"List items from registries (requires components.json - use init_project if missing)\",\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n \"Array of registry names to search (e.g., ['@shadcn', '@acme'])\"\n ),\n limit: z\n .number()\n .optional()\n .describe(\"Maximum number of items to return\"),\n offset: z\n .number()\n .optional()\n .describe(\"Number of items to skip for pagination\"),\n })\n ),\n },\n {\n name: \"search_items_in_registries\",\n description:\n \"Search for components in registries using fuzzy matching (requires components.json). After finding an item, use get_item_examples_from_registries to see usage examples.\",\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n \"Array of registry names to search (e.g., ['@shadcn', '@acme'])\"\n ),\n query: z\n .string()\n .describe(\n \"Search query string for fuzzy matching against item names and descriptions\"\n ),\n limit: z\n .number()\n .optional()\n .describe(\"Maximum number of items to return\"),\n offset: z\n .number()\n .optional()\n .describe(\"Number of items to skip for pagination\"),\n })\n ),\n },\n {\n name: \"view_items_in_registries\",\n description:\n \"View detailed information about specific registry items including the name, description, type and files content. For usage examples, use get_item_examples_from_registries instead.\",\n inputSchema: zodToJsonSchema(\n z.object({\n items: z\n .array(z.string())\n .describe(\n \"Array of item names with registry prefix (e.g., ['@shadcn/button', '@shadcn/card'])\"\n ),\n })\n ),\n },\n {\n name: \"get_item_examples_from_registries\",\n description:\n \"Find usage examples and demos with their complete code. Search for patterns like 'accordion-demo', 'button example', 'card-demo', etc. Returns full implementation code with dependencies.\",\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n \"Array of registry names to search (e.g., ['@shadcn', '@acme'])\"\n ),\n query: z\n .string()\n .describe(\n \"Search query for examples (e.g., 'accordion-demo', 'button demo', 'card example', 'tooltip-demo', 'example-booking-form', 'example-hero'). Common patterns: '{item-name}-demo', '{item-name} example', 'example {item-name}'\"\n ),\n })\n ),\n },\n {\n name: \"get_add_command_for_items\",\n description:\n \"Get the shadcn CLI add command for specific items in a registry. This is useful for adding one or more components to your project.\",\n inputSchema: zodToJsonSchema(\n z.object({\n items: z\n .array(z.string())\n .describe(\n \"Array of items to get the add command for prefixed with the registry name (e.g., ['@shadcn/button', '@shadcn/card'])\"\n ),\n })\n ),\n },\n {\n name: \"get_audit_checklist\",\n description:\n \"After creating new components or generating new code files, use this tool for a quick checklist to verify that everything is working as expected. Make sure to run the tool after all required steps have been completed.\",\n inputSchema: zodToJsonSchema(z.object({})),\n },\n ],\n }\n})\n\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n try {\n if (!request.params.arguments) {\n throw new Error(\"No tool arguments provided.\")\n }\n\n switch (request.params.name) {\n case \"get_project_registries\": {\n const config = await getMcpConfig(process.cwd())\n\n if (!config?.registries) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No components.json found or no registries configured.\n\n To fix this:\n 1. Use the \\`init\\` command to create a components.json file\n 2. Or manually create components.json with a registries section`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: dedent`The following registries are configured in the current project:\n\n ${Object.keys(config.registries)\n .map((registry) => `- ${registry}`)\n .join(\"\\n\")}\n\n You can view the items in a registry by running:\n \\`${await npxShadcn(\"view @name-of-registry\")}\\`\n\n For example: \\`${await npxShadcn(\n \"view @shadcn\"\n )}\\` or \\`${await npxShadcn(\n \"view @shadcn @acme\"\n )}\\` to view multiple registries.\n `,\n },\n ],\n }\n }\n\n case \"search_items_in_registries\": {\n const inputSchema = z.object({\n registries: z.array(z.string()),\n query: z.string(),\n limit: z.number().optional(),\n offset: z.number().optional(),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const results = await searchRegistries(args.registries, {\n query: args.query,\n limit: args.limit,\n offset: args.offset,\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No items found matching \"${\n args.query\n }\" in registries ${args.registries.join(\n \", \"\n )}, Try searching with a different query or registry.`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: formatSearchResultsWithPagination(results, {\n query: args.query,\n registries: args.registries,\n }),\n },\n ],\n }\n }\n\n case \"list_items_in_registries\": {\n const inputSchema = z.object({\n registries: z.array(z.string()),\n limit: z.number().optional(),\n offset: z.number().optional(),\n cwd: z.string().optional(),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const results = await searchRegistries(args.registries, {\n limit: args.limit,\n offset: args.offset,\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No items found in registries ${args.registries.join(\n \", \"\n )}.`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: formatSearchResultsWithPagination(results, {\n registries: args.registries,\n }),\n },\n ],\n }\n }\n\n case \"view_items_in_registries\": {\n const inputSchema = z.object({\n items: z.array(z.string()),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const registryItems = await getRegistryItems(args.items, {\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (registryItems?.length === 0) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No items found for: ${args.items.join(\", \")}\n\n Make sure the item names are correct and include the registry prefix (e.g., @shadcn/button).`,\n },\n ],\n }\n }\n\n const formattedItems = formatRegistryItems(registryItems)\n\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Item Details:\n\n ${formattedItems.join(\"\\n\\n---\\n\\n\")}`,\n },\n ],\n }\n }\n\n case \"get_item_examples_from_registries\": {\n const inputSchema = z.object({\n query: z.string(),\n registries: z.array(z.string()),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const config = await getMcpConfig()\n\n const results = await searchRegistries(args.registries, {\n query: args.query,\n config,\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No examples found for query \"${args.query}\".\n\n Try searching with patterns like:\n - \"accordion-demo\" for accordion examples\n - \"button demo\" or \"button example\"\n - Component name followed by \"-demo\" or \"example\"\n\n You can also:\n 1. Use search_items_in_registries to find all items matching your query\n 2. View the main component with view_items_in_registries for inline usage documentation`,\n },\n ],\n }\n }\n\n const itemNames = results.items.map((item) => item.addCommandArgument)\n const fullItems = await getRegistryItems(itemNames, {\n config,\n useCache: false,\n })\n\n return {\n content: [\n {\n type: \"text\",\n text: formatItemExamples(fullItems, args.query),\n },\n ],\n }\n }\n\n case \"get_add_command_for_items\": {\n const args = z\n .object({\n items: z.array(z.string()),\n })\n .parse(request.params.arguments)\n\n return {\n content: [\n {\n type: \"text\",\n text: await npxShadcn(`add ${args.items.join(\" \")}`),\n },\n ],\n }\n }\n\n case \"get_audit_checklist\": {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`## Component Audit Checklist\n\n After adding or generating components, check the following common issues:\n\n - [ ] Ensure imports are correct i.e named vs default imports\n - [ ] If using next/image, ensure images.remotePatterns next.config.js is configured correctly.\n - [ ] Ensure all dependencies are installed.\n - [ ] Check for linting errors or warnings\n - [ ] Check for TypeScript errors\n - [ ] Use the Playwright MCP if available.\n `,\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 return {\n content: [\n {\n type: \"text\",\n text: dedent`Invalid input parameters:\n ${error.errors\n .map((e) => `- ${e.path.join(\".\")}: ${e.message}`)\n .join(\"\\n\")}\n `,\n },\n ],\n isError: true,\n }\n }\n\n if (error instanceof RegistryError) {\n let errorMessage = error.message\n\n if (error.suggestion) {\n errorMessage += `\\n\\n💡 ${error.suggestion}`\n }\n\n if (error.context) {\n errorMessage += `\\n\\nContext: ${JSON.stringify(error.context, null, 2)}`\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Error (${error.code}): ${errorMessage}`,\n },\n ],\n isError: true,\n }\n }\n\n const errorMessage = error instanceof Error ? error.message : String(error)\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Error: ${errorMessage}`,\n },\n ],\n isError: true,\n }\n }\n})\n"]}
1
+ {"version":3,"sources":["../src/utils/get-package-manager.ts","../src/mcp/utils.ts","../src/mcp/index.ts"],"names":["getPackageManager","targetDir","withFallback","packageManager","detect","userAgent","getPackageRunner","cwd","SHADCN_CLI_COMMAND","npxShadcn","command","getMcpConfig","getRegistriesConfig","formatSearchResultsWithPagination","results","options","query","registries","formattedItems","item","parts","header","showingRange","output","formatRegistryItems","items","formatItemExamples","sections","file","server","Server","ListToolsRequestSchema","zodToJsonSchema","z","CallToolRequestSchema","request","config","dedent","registry","args","searchRegistries","registryItems","getRegistryItems","itemNames","fullItems","error","e","RegistryError","errorMessage"],"mappings":"kUAEA,eAAsBA,EACpBC,CAAAA,CACA,CAAE,YAAA,CAAAC,CAAa,CAAA,CAAgC,CAC7C,aAAc,KAChB,CAAA,CACmD,CACnD,IAAMC,CAAAA,CAAiB,MAAMC,OAAO,CAAE,YAAA,CAAc,IAAA,CAAM,GAAA,CAAKH,CAAU,CAAC,EAE1E,GAAIE,CAAAA,GAAmB,YAAA,CAAc,OAAO,MAAA,CAC5C,GAAIA,IAAmB,QAAA,CAAU,OAAO,OACxC,GAAIA,CAAAA,GAAmB,MAAO,OAAO,KAAA,CACrC,GAAIA,CAAAA,GAAmB,MAAA,CAAQ,OAAO,OACtC,GAAI,CAACD,CAAAA,CACH,OAAOC,CAAAA,EAAkB,KAAA,CAI3B,IAAME,CAAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,qBAAA,EAAyB,EAAA,CAEvD,OAAIA,EAAU,UAAA,CAAW,MAAM,CAAA,CACtB,MAAA,CAGLA,CAAAA,CAAU,UAAA,CAAW,MAAM,CAAA,CACtB,MAAA,CAGLA,CAAAA,CAAU,UAAA,CAAW,KAAK,CAAA,CACrB,MAGF,KACT,CAEA,eAAsBC,CAAAA,CAAiBC,CAAAA,CAAa,CAClD,IAAMJ,CAAAA,CAAiB,MAAMH,CAAAA,CAAkBO,CAAG,CAAA,CAElD,OAAIJ,IAAmB,MAAA,CAAe,UAAA,CAElCA,IAAmB,KAAA,CAAc,MAAA,CAE9B,KACT,CCvCA,IAAMK,CAAAA,CAAqB,eAAA,CAE3B,eAAsBC,CAAAA,CAAUC,EAAiB,CAE/C,OAAO,CAAA,EADe,MAAMJ,CAAAA,CAAiB,OAAA,CAAQ,KAAK,CACnC,CAAA,CAAA,EAAIE,CAAkB,CAAA,CAAA,EAAIE,CAAO,EAC1D,CAEA,eAAsBC,CAAAA,CAAaJ,CAAAA,CAAM,OAAA,CAAQ,GAAA,GAAO,CAKtD,OAAO,CACL,UAAA,CAAA,CALa,MAAMK,CAAAA,CAAoBL,EAAK,CAC5C,QAAA,CAAU,KACZ,CAAC,CAAA,EAGoB,UACrB,CACF,CAEO,SAASM,CAAAA,CACdC,CAAAA,CACAC,CAAAA,CAIA,CACA,GAAM,CAAE,KAAA,CAAAC,EAAO,UAAA,CAAAC,CAAW,EAAIF,CAAAA,EAAW,EAAC,CAEpCG,CAAAA,CAAiBJ,CAAAA,CAAQ,KAAA,CAAM,IAAKK,CAAAA,EAAS,CACjD,IAAMC,CAAAA,CAAkB,CAAC,CAAA,EAAA,EAAKD,EAAK,IAAI,CAAA,CAAE,CAAA,CAEzC,OAAIA,CAAAA,CAAK,IAAA,EACPC,EAAM,IAAA,CAAK,CAAA,CAAA,EAAID,CAAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA,CAGzBA,EAAK,WAAA,EACPC,CAAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAKD,CAAAA,CAAK,WAAW,EAAE,CAAA,CAGhCA,CAAAA,CAAK,QAAA,EACPC,CAAAA,CAAM,IAAA,CAAK,CAAA,CAAA,EAAID,EAAK,QAAQ,CAAA,CAAA,CAAG,CAAA,CAGjCC,CAAAA,CAAM,IAAA,CACJ;AAAA,iBAAA,EAAsBX,CAAAA,CAAU,CAAA,IAAA,EAAOU,CAAAA,CAAK,kBAAkB,CAAA,CAAE,CAAC,CAAA,EAAA,CACnE,CAAA,CAEOC,CAAAA,CAAM,IAAA,CAAK,GAAG,CACvB,CAAC,CAAA,CAEGC,CAAAA,CAAS,CAAA,MAAA,EAASP,CAAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,MAAA,CAAA,CAC1CE,CAAAA,GACFK,CAAAA,EAAU,CAAA,WAAA,EAAcL,CAAK,CAAA,CAAA,CAAA,CAAA,CAE3BC,CAAAA,EAAcA,CAAAA,CAAW,MAAA,CAAS,CAAA,GACpCI,GAAU,CAAA,eAAA,EAAkBJ,CAAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,CAEnDI,CAAAA,EAAU,GAAA,CAEV,IAAMC,CAAAA,CAAe,CAAA,cAAA,EACnBR,CAAAA,CAAQ,UAAA,CAAW,MAAA,CAAS,CAC9B,CAAA,CAAA,EAAI,KAAK,GAAA,CACPA,CAAAA,CAAQ,UAAA,CAAW,MAAA,CAASA,CAAAA,CAAQ,UAAA,CAAW,KAAA,CAC/CA,CAAAA,CAAQ,WAAW,KACrB,CAAC,CAAA,IAAA,EAAOA,CAAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,CAAA,CAAA,CAE5BS,CAAAA,CAAS,GAAGF,CAAM;;AAAA,EAAOC,CAAY;;AAAA,EAAOJ,EAAe,IAAA,CAAK;;AAAA,CAAM,CAAC,CAAA,CAAA,CAE3E,OAAIJ,CAAAA,CAAQ,UAAA,CAAW,UACrBS,CAAAA,EAAU;;AAAA,kCAAA,EACRT,CAAAA,CAAQ,WAAW,MAAA,CAASA,CAAAA,CAAQ,WAAW,KACjD,CAAA,sBAAA,CAAA,CAAA,CAGKS,CACT,CAEO,SAASC,CAAAA,CACdC,EACA,CACA,OAAOA,CAAAA,CAAM,GAAA,CAAKN,CAAAA,EACQ,CACtB,MAAMA,CAAAA,CAAK,IAAI,CAAA,CAAA,CACfA,CAAAA,CAAK,WAAA,CAAc;AAAA,EAAKA,EAAK,WAAW;AAAA,CAAA,CAAO,EAAA,CAC/CA,CAAAA,CAAK,IAAA,CAAO,CAAA,UAAA,EAAaA,CAAAA,CAAK,IAAI,CAAA,CAAA,CAAK,EAAA,CACvCA,CAAAA,CAAK,KAAA,EAASA,CAAAA,CAAK,KAAA,CAAM,OAAS,CAAA,CAC9B,CAAA,WAAA,EAAcA,CAAAA,CAAK,KAAA,CAAM,MAAM,CAAA,QAAA,CAAA,CAC/B,GACJA,CAAAA,CAAK,YAAA,EAAgBA,CAAAA,CAAK,YAAA,CAAa,MAAA,CAAS,CAAA,CAC5C,qBAAqBA,CAAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CACjD,GACJA,CAAAA,CAAK,eAAA,EAAmBA,CAAAA,CAAK,eAAA,CAAgB,MAAA,CAAS,CAAA,CAClD,yBAAyBA,CAAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CACxD,EACN,CAAA,CACa,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK;AAAA,CAAI,CACvC,CACH,CAEO,SAASO,EACdD,CAAAA,CACAT,CAAAA,CACA,CACA,IAAMW,CAAAA,CAAWF,CAAAA,CAAM,IAAKN,CAAAA,EAAS,CACnC,IAAMC,CAAAA,CAAkB,CACtB,eAAeD,CAAAA,CAAK,IAAI,CAAA,CAAA,CACxBA,CAAAA,CAAK,WAAA,CAAc;AAAA,EAAKA,EAAK,WAAW;AAAA,CAAA,CAAO,EACjD,CAAA,CAEA,OAAIA,CAAAA,CAAK,KAAA,EAAO,QACdA,CAAAA,CAAK,KAAA,CAAM,OAAA,CAASS,CAAAA,EAAS,CACvBA,CAAAA,CAAK,OAAA,GACPR,EAAM,IAAA,CAAK,CAAA,UAAA,EAAaQ,EAAK,IAAI,CAAA;AAAA,CAAM,CAAA,CACvCR,EAAM,IAAA,CAAK,QAAQ,EACnBA,CAAAA,CAAM,IAAA,CAAKQ,EAAK,OAAO,CAAA,CACvBR,EAAM,IAAA,CAAK,KAAK,GAEpB,CAAC,CAAA,CAGIA,EAAM,MAAA,CAAO,OAAO,EAAE,IAAA,CAAK;AAAA,CAAI,CACxC,CAAC,CAAA,CAMD,OAJe,CAAA;;AAAA,MAAA,EAA6BK,CAAAA,CAAM,MAAM,CAAA,QAAA,EACtDA,CAAAA,CAAM,OAAS,CAAA,CAAI,GAAA,CAAM,EAC3B,CAAA,WAAA,EAAcT,CAAK,CAAA;AAAA,CAAA,CAEHW,EAAS,IAAA,CAAK;;AAAA;;AAAA,CAAa,CAC7C,CChHO,IAAME,CAAAA,CAAS,IAAIC,MAAAA,CACxB,CACE,IAAA,CAAM,QAAA,CACN,OAAA,CAAS,OACX,CAAA,CACA,CACE,YAAA,CAAc,CACZ,SAAA,CAAW,EAAC,CACZ,KAAA,CAAO,EACT,CACF,CACF,EAEAD,CAAAA,CAAO,iBAAA,CAAkBE,sBAAAA,CAAwB,UACxC,CACL,MAAO,CACL,CACE,IAAA,CAAM,wBAAA,CACN,WAAA,CACE,kIAAA,CACF,WAAA,CAAaC,eAAAA,CAAgBC,CAAAA,CAAE,MAAA,CAAO,EAAE,CAAC,CAC3C,CAAA,CACA,CACE,KAAM,0BAAA,CACN,WAAA,CACE,qFAAA,CACF,WAAA,CAAaD,eAAAA,CACXC,CAAAA,CAAE,MAAA,CAAO,CACP,WAAYA,CAAAA,CACT,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,CACC,gEACF,EACF,KAAA,CAAOA,CAAAA,CACJ,MAAA,EAAO,CACP,QAAA,EAAS,CACT,QAAA,CAAS,mCAAmC,CAAA,CAC/C,MAAA,CAAQA,CAAAA,CACL,MAAA,EAAO,CACP,QAAA,EAAS,CACT,QAAA,CAAS,wCAAwC,CACtD,CAAC,CACH,CACF,CAAA,CACA,CACE,IAAA,CAAM,4BAAA,CACN,YACE,0KAAA,CACF,WAAA,CAAaD,eAAAA,CACXC,CAAAA,CAAE,MAAA,CAAO,CACP,UAAA,CAAYA,CAAAA,CACT,MAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,CACC,gEACF,CAAA,CACF,KAAA,CAAOA,CAAAA,CACJ,MAAA,EAAO,CACP,QAAA,CACC,4EACF,CAAA,CACF,KAAA,CAAOA,CAAAA,CACJ,QAAO,CACP,QAAA,EAAS,CACT,QAAA,CAAS,mCAAmC,CAAA,CAC/C,MAAA,CAAQA,CAAAA,CACL,QAAO,CACP,QAAA,EAAS,CACT,QAAA,CAAS,wCAAwC,CACtD,CAAC,CACH,CACF,CAAA,CACA,CACE,IAAA,CAAM,0BAAA,CACN,WAAA,CACE,qLAAA,CACF,WAAA,CAAaD,eAAAA,CACXC,CAAAA,CAAE,MAAA,CAAO,CACP,KAAA,CAAOA,CAAAA,CACJ,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,CACC,qFACF,CACJ,CAAC,CACH,CACF,CAAA,CACA,CACE,IAAA,CAAM,mCAAA,CACN,WAAA,CACE,4LAAA,CACF,WAAA,CAAaD,eAAAA,CACXC,CAAAA,CAAE,MAAA,CAAO,CACP,UAAA,CAAYA,CAAAA,CACT,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,CACC,gEACF,CAAA,CACF,KAAA,CAAOA,CAAAA,CACJ,MAAA,EAAO,CACP,QAAA,CACC,8NACF,CACJ,CAAC,CACH,CACF,CAAA,CACA,CACE,IAAA,CAAM,2BAAA,CACN,WAAA,CACE,qIACF,WAAA,CAAaD,eAAAA,CACXC,CAAAA,CAAE,MAAA,CAAO,CACP,KAAA,CAAOA,CAAAA,CACJ,KAAA,CAAMA,EAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,CACC,sHACF,CACJ,CAAC,CACH,CACF,CAAA,CACA,CACE,IAAA,CAAM,qBAAA,CACN,WAAA,CACE,2NAAA,CACF,WAAA,CAAaD,gBAAgBC,CAAAA,CAAE,MAAA,CAAO,EAAE,CAAC,CAC3C,CACF,CACF,EACD,CAAA,CAEDJ,CAAAA,CAAO,iBAAA,CAAkBK,qBAAAA,CAAuB,MAAOC,CAAAA,EAAY,CACjE,GAAI,CACF,GAAI,CAACA,CAAAA,CAAQ,MAAA,CAAO,SAAA,CAClB,MAAM,IAAI,KAAA,CAAM,6BAA6B,CAAA,CAG/C,OAAQA,CAAAA,CAAQ,MAAA,CAAO,IAAA,EACrB,KAAK,yBAA0B,CAC7B,IAAMC,CAAAA,CAAS,MAAMzB,CAAAA,CAAa,OAAA,CAAQ,GAAA,EAAK,EAE/C,OAAKyB,CAAAA,EAAQ,UAAA,CAeN,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,OACN,IAAA,CAAMC,CAAAA,CAAAA;;AAAA,gBAAA,EAEF,MAAA,CAAO,IAAA,CAAKD,CAAAA,CAAO,UAAU,CAAA,CAC5B,GAAA,CAAKE,CAAAA,EAAa,CAAA,EAAA,EAAKA,CAAQ,CAAA,CAAE,CAAA,CACjC,IAAA,CAAK;AAAA,CAAI,CAAC;;AAAA;AAAA,kBAAA,EAGT,MAAM7B,CAAAA,CAAU,wBAAwB,CAAC,CAAA;;AAAA,+BAAA,EAE5B,MAAMA,EACrB,cACF,CAAC,WAAW,MAAMA,CAAAA,CAClB,oBACF,CAAC,CAAA;AAAA,gBAAA,CAEH,CACF,CACF,CAAA,CAnCS,CACL,QAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAM4B,CAAAA,CAAAA;;AAAA;AAAA;AAAA,+EAAA,CAKR,CACF,CACF,CAyBJ,CAEA,KAAK,4BAAA,CAA8B,CAQjC,IAAME,CAAAA,CAPcN,CAAAA,CAAE,MAAA,CAAO,CAC3B,WAAYA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAC9B,KAAA,CAAOA,CAAAA,CAAE,MAAA,EAAO,CAChB,KAAA,CAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS,CAC3B,OAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EACrB,CAAC,CAAA,CAEwB,KAAA,CAAME,CAAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,CACjDrB,CAAAA,CAAU,MAAM0B,EAAAA,CAAiBD,CAAAA,CAAK,WAAY,CACtD,KAAA,CAAOA,CAAAA,CAAK,KAAA,CACZ,KAAA,CAAOA,CAAAA,CAAK,KAAA,CACZ,MAAA,CAAQA,EAAK,MAAA,CACb,MAAA,CAAQ,MAAM5B,CAAAA,CAAa,OAAA,CAAQ,GAAA,EAAK,CAAA,CACxC,SAAU,CAAA,CACZ,CAAC,CAAA,CAED,OAAIG,CAAAA,CAAQ,KAAA,CAAM,MAAA,GAAW,CAAA,CACpB,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMuB,CAAAA,CAAAA,yBAAAA,EACJE,EAAK,KACP,CAAA,gBAAA,EAAmBA,CAAAA,CAAK,UAAA,CAAW,IAAA,CACjC,IACF,CAAC,CAAA,mDAAA,CACH,CACF,CACF,CAAA,CAGK,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,KAAM1B,CAAAA,CAAkCC,CAAAA,CAAS,CAC/C,KAAA,CAAOyB,CAAAA,CAAK,KAAA,CACZ,UAAA,CAAYA,CAAAA,CAAK,UACnB,CAAC,CACH,CACF,CACF,CACF,CAEA,KAAK,2BAA4B,CAQ/B,IAAMA,CAAAA,CAPcN,CAAAA,CAAE,MAAA,CAAO,CAC3B,UAAA,CAAYA,CAAAA,CAAE,MAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAC9B,KAAA,CAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,UAAS,CAC3B,MAAA,CAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS,CAC5B,GAAA,CAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAClB,CAAC,CAAA,CAEwB,KAAA,CAAME,EAAQ,MAAA,CAAO,SAAS,CAAA,CACjDrB,CAAAA,CAAU,MAAM0B,EAAAA,CAAiBD,CAAAA,CAAK,UAAA,CAAY,CACtD,KAAA,CAAOA,CAAAA,CAAK,KAAA,CACZ,MAAA,CAAQA,CAAAA,CAAK,MAAA,CACb,MAAA,CAAQ,MAAM5B,EAAa,OAAA,CAAQ,GAAA,EAAK,CAAA,CACxC,QAAA,CAAU,CAAA,CACZ,CAAC,CAAA,CAED,OAAIG,CAAAA,CAAQ,KAAA,CAAM,MAAA,GAAW,CAAA,CACpB,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMuB,CAAAA,CAAAA,6BAAAA,EAAsCE,CAAAA,CAAK,UAAA,CAAW,IAAA,CAC1D,IACF,CAAC,CAAA,CAAA,CACH,CACF,CACF,CAAA,CAGK,CACL,OAAA,CAAS,CACP,CACE,KAAM,MAAA,CACN,IAAA,CAAM1B,CAAAA,CAAkCC,CAAAA,CAAS,CAC/C,UAAA,CAAYyB,CAAAA,CAAK,UACnB,CAAC,CACH,CACF,CACF,CACF,CAEA,KAAK,0BAAA,CAA4B,CAK/B,IAAMA,CAAAA,CAJcN,CAAAA,CAAE,MAAA,CAAO,CAC3B,KAAA,CAAOA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,CAC3B,CAAC,CAAA,CAEwB,KAAA,CAAME,CAAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,CACjDM,CAAAA,CAAgB,MAAMC,CAAAA,CAAiBH,CAAAA,CAAK,KAAA,CAAO,CACvD,MAAA,CAAQ,MAAM5B,CAAAA,CAAa,OAAA,CAAQ,GAAA,EAAK,CAAA,CACxC,QAAA,CAAU,CAAA,CACZ,CAAC,CAAA,CAED,GAAI8B,CAAAA,EAAe,MAAA,GAAW,CAAA,CAC5B,OAAO,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMJ,CAAAA,CAAAA,oBAAAA,EAA6BE,CAAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;;AAAA,4GAAA,CAG1D,CACF,CACF,CAAA,CAGF,IAAMrB,EAAiBM,CAAAA,CAAoBiB,CAAa,CAAA,CAExD,OAAO,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,OACN,IAAA,CAAMJ,CAAAA,CAAAA;;AAAA,cAAA,EAEJnB,EAAe,IAAA,CAAK;;AAAA;;AAAA,CAAa,CAAC,CAAA,CACtC,CACF,CACF,CACF,CAEA,KAAK,mCAAA,CAAqC,CAMxC,IAAMqB,CAAAA,CALcN,CAAAA,CAAE,OAAO,CAC3B,KAAA,CAAOA,CAAAA,CAAE,MAAA,EAAO,CAChB,UAAA,CAAYA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,CAChC,CAAC,CAAA,CAEwB,KAAA,CAAME,CAAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,CACjDC,CAAAA,CAAS,MAAMzB,CAAAA,EAAa,CAE5BG,CAAAA,CAAU,MAAM0B,EAAAA,CAAiBD,CAAAA,CAAK,UAAA,CAAY,CACtD,KAAA,CAAOA,CAAAA,CAAK,KAAA,CACZ,MAAA,CAAAH,CAAAA,CACA,SAAU,CAAA,CACZ,CAAC,CAAA,CAED,GAAItB,CAAAA,CAAQ,KAAA,CAAM,MAAA,GAAW,CAAA,CAC3B,OAAO,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMuB,CAAAA,CAAAA,6BAAAA,EAAsCE,EAAK,KAAK,CAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,uGAAA,CAUxD,CACF,CACF,CAAA,CAGF,IAAMI,EAAY7B,CAAAA,CAAQ,KAAA,CAAM,IAAKK,CAAAA,EAASA,CAAAA,CAAK,kBAAkB,CAAA,CAC/DyB,CAAAA,CAAY,MAAMF,CAAAA,CAAiBC,CAAAA,CAAW,CAClD,MAAA,CAAAP,CAAAA,CACA,SAAU,CAAA,CACZ,CAAC,EAED,OAAO,CACL,QAAS,CACP,CACE,KAAM,MAAA,CACN,IAAA,CAAMV,EAAmBkB,CAAAA,CAAWL,CAAAA,CAAK,KAAK,CAChD,CACF,CACF,CACF,CAEA,KAAK,2BAAA,CAA6B,CAChC,IAAMA,CAAAA,CAAON,CAAAA,CACV,OAAO,CACN,KAAA,CAAOA,EAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAC3B,CAAC,CAAA,CACA,KAAA,CAAME,EAAQ,MAAA,CAAO,SAAS,EAEjC,OAAO,CACL,QAAS,CACP,CACE,KAAM,MAAA,CACN,IAAA,CAAM,MAAM1B,CAAAA,CAAU,CAAA,IAAA,EAAO8B,EAAK,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA,CAAE,CACrD,CACF,CACF,CACF,CAEA,KAAK,sBACH,OAAO,CACL,QAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMF,CAAAA,CAAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAA,CAWR,CACF,CACF,CAAA,CAGF,QACE,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQF,CAAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,UAAA,CAAY,CAC3D,CACF,CAAA,MAASU,CAAAA,CAAO,CACd,GAAIA,CAAAA,YAAiBZ,CAAAA,CAAE,QAAA,CACrB,OAAO,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMI,CAAAA,CAAAA;AAAA,cAAA,EACFQ,CAAAA,CAAM,MAAA,CACL,GAAA,CAAKC,CAAAA,EAAM,KAAKA,CAAAA,CAAE,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAKA,CAAAA,CAAE,OAAO,CAAA,CAAE,EAChD,IAAA,CAAK;AAAA,CAAI,CAAC;AAAA,cAAA,CAEjB,CACF,CAAA,CACA,OAAA,CAAS,IACX,CAAA,CAGF,GAAID,CAAAA,YAAiBE,CAAAA,CAAe,CAClC,IAAIC,EAAeH,CAAAA,CAAM,OAAA,CAEzB,OAAIA,CAAAA,CAAM,aACRG,CAAAA,EAAgB;;AAAA,UAAA,EAAUH,CAAAA,CAAM,UAAU,CAAA,CAAA,CAAA,CAGxCA,CAAAA,CAAM,UACRG,CAAAA,EAAgB;;AAAA,SAAA,EAAgB,IAAA,CAAK,SAAA,CAAUH,CAAAA,CAAM,OAAA,CAAS,IAAA,CAAM,CAAC,CAAC,CAAA,CAAA,CAAA,CAGjE,CACL,OAAA,CAAS,CACP,CACE,KAAM,MAAA,CACN,IAAA,CAAMR,CAAAA,CAAAA,OAAAA,EAAgBQ,CAAAA,CAAM,IAAI,CAAA,GAAA,EAAMG,CAAY,CAAA,CACpD,CACF,CAAA,CACA,OAAA,CAAS,IACX,CACF,CAEA,IAAMA,CAAAA,CAAeH,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAM,OAAA,CAAU,OAAOA,CAAK,CAAA,CAC1E,OAAO,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMR,CAAAA,CAAAA,OAAAA,EAAgBW,CAAY,CAAA,CACpC,CACF,CAAA,CACA,OAAA,CAAS,IACX,CACF,CACF,CAAC,CAAA","file":"chunk-2NUTTJQY.js","sourcesContent":["import { detect } from \"@antfu/ni\"\n\nexport async function getPackageManager(\n targetDir: string,\n { withFallback }: { withFallback?: boolean } = {\n withFallback: false,\n }\n): Promise<\"yarn\" | \"pnpm\" | \"bun\" | \"npm\" | \"deno\"> {\n const packageManager = await detect({ programmatic: true, cwd: targetDir })\n\n if (packageManager === \"yarn@berry\") return \"yarn\"\n if (packageManager === \"pnpm@6\") return \"pnpm\"\n if (packageManager === \"bun\") return \"bun\"\n if (packageManager === \"deno\") return \"deno\"\n if (!withFallback) {\n return packageManager ?? \"npm\"\n }\n\n // Fallback to user agent if not detected.\n const userAgent = process.env.npm_config_user_agent || \"\"\n\n if (userAgent.startsWith(\"yarn\")) {\n return \"yarn\"\n }\n\n if (userAgent.startsWith(\"pnpm\")) {\n return \"pnpm\"\n }\n\n if (userAgent.startsWith(\"bun\")) {\n return \"bun\"\n }\n\n return \"npm\"\n}\n\nexport async function getPackageRunner(cwd: string) {\n const packageManager = await getPackageManager(cwd)\n\n if (packageManager === \"pnpm\") return \"pnpm dlx\"\n\n if (packageManager === \"bun\") return \"bunx\"\n\n return \"npx\"\n}\n","import { getRegistriesConfig } from \"@/src/registry/api\"\nimport { registryItemSchema, searchResultsSchema } from \"@/src/schema\"\nimport { getPackageRunner } from \"@/src/utils/get-package-manager\"\nimport { z } from \"zod\"\n\nconst SHADCN_CLI_COMMAND = \"shadcn@latest\"\n\nexport async function npxShadcn(command: string) {\n const packageRunner = await getPackageRunner(process.cwd())\n return `${packageRunner} ${SHADCN_CLI_COMMAND} ${command}`\n}\n\nexport async function getMcpConfig(cwd = process.cwd()) {\n const config = await getRegistriesConfig(cwd, {\n useCache: false,\n })\n\n return {\n registries: config.registries,\n }\n}\n\nexport function formatSearchResultsWithPagination(\n results: z.infer<typeof searchResultsSchema>,\n options?: {\n query?: string\n registries?: string[]\n }\n) {\n const { query, registries } = options || {}\n\n const formattedItems = results.items.map((item) => {\n const parts: string[] = [`- ${item.name}`]\n\n if (item.type) {\n parts.push(`(${item.type})`)\n }\n\n if (item.description) {\n parts.push(`- ${item.description}`)\n }\n\n if (item.registry) {\n parts.push(`[${item.registry}]`)\n }\n\n parts.push(\n `\\n Add command: \\`${npxShadcn(`add ${item.addCommandArgument}`)}\\``\n )\n\n return parts.join(\" \")\n })\n\n let header = `Found ${results.pagination.total} items`\n if (query) {\n header += ` matching \"${query}\"`\n }\n if (registries && registries.length > 0) {\n header += ` in registries ${registries.join(\", \")}`\n }\n header += \":\"\n\n const showingRange = `Showing items ${\n results.pagination.offset + 1\n }-${Math.min(\n results.pagination.offset + results.pagination.limit,\n results.pagination.total\n )} of ${results.pagination.total}:`\n\n let output = `${header}\\n\\n${showingRange}\\n\\n${formattedItems.join(\"\\n\\n\")}`\n\n if (results.pagination.hasMore) {\n output += `\\n\\nMore items available. Use offset: ${\n results.pagination.offset + results.pagination.limit\n } to see the next page.`\n }\n\n return output\n}\n\nexport function formatRegistryItems(\n items: z.infer<typeof registryItemSchema>[]\n) {\n return items.map((item) => {\n const parts: string[] = [\n `## ${item.name}`,\n item.description ? `\\n${item.description}\\n` : \"\",\n item.type ? `**Type:** ${item.type}` : \"\",\n item.files && item.files.length > 0\n ? `**Files:** ${item.files.length} file(s)`\n : \"\",\n item.dependencies && item.dependencies.length > 0\n ? `**Dependencies:** ${item.dependencies.join(\", \")}`\n : \"\",\n item.devDependencies && item.devDependencies.length > 0\n ? `**Dev Dependencies:** ${item.devDependencies.join(\", \")}`\n : \"\",\n ]\n return parts.filter(Boolean).join(\"\\n\")\n })\n}\n\nexport function formatItemExamples(\n items: z.infer<typeof registryItemSchema>[],\n query: string\n) {\n const sections = items.map((item) => {\n const parts: string[] = [\n `## Example: ${item.name}`,\n item.description ? `\\n${item.description}\\n` : \"\",\n ]\n\n if (item.files?.length) {\n item.files.forEach((file) => {\n if (file.content) {\n parts.push(`### Code (${file.path}):\\n`)\n parts.push(\"```tsx\")\n parts.push(file.content)\n parts.push(\"```\")\n }\n })\n }\n\n return parts.filter(Boolean).join(\"\\n\")\n })\n\n const header = `# Usage Examples\\n\\nFound ${items.length} example${\n items.length > 1 ? \"s\" : \"\"\n } matching \"${query}\":\\n`\n\n return header + sections.join(\"\\n\\n---\\n\\n\")\n}\n","import { getRegistryItems, searchRegistries } from \"@/src/registry\"\nimport { RegistryError } from \"@/src/registry/errors\"\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\"\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\"\nimport dedent from \"dedent\"\nimport { z } from \"zod\"\nimport { zodToJsonSchema } from \"zod-to-json-schema\"\n\nimport {\n formatItemExamples,\n formatRegistryItems,\n formatSearchResultsWithPagination,\n getMcpConfig,\n npxShadcn,\n} from \"./utils\"\n\nexport const server = new Server(\n {\n name: \"shadcn\",\n version: \"1.0.0\",\n },\n {\n capabilities: {\n resources: {},\n tools: {},\n },\n }\n)\n\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: [\n {\n name: \"get_project_registries\",\n description:\n \"Get configured registry names from components.json - Returns error if no components.json exists (use init_project to create one)\",\n inputSchema: zodToJsonSchema(z.object({})),\n },\n {\n name: \"list_items_in_registries\",\n description:\n \"List items from registries (requires components.json - use init_project if missing)\",\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n \"Array of registry names to search (e.g., ['@shadcn', '@acme'])\"\n ),\n limit: z\n .number()\n .optional()\n .describe(\"Maximum number of items to return\"),\n offset: z\n .number()\n .optional()\n .describe(\"Number of items to skip for pagination\"),\n })\n ),\n },\n {\n name: \"search_items_in_registries\",\n description:\n \"Search for components in registries using fuzzy matching (requires components.json). After finding an item, use get_item_examples_from_registries to see usage examples.\",\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n \"Array of registry names to search (e.g., ['@shadcn', '@acme'])\"\n ),\n query: z\n .string()\n .describe(\n \"Search query string for fuzzy matching against item names and descriptions\"\n ),\n limit: z\n .number()\n .optional()\n .describe(\"Maximum number of items to return\"),\n offset: z\n .number()\n .optional()\n .describe(\"Number of items to skip for pagination\"),\n })\n ),\n },\n {\n name: \"view_items_in_registries\",\n description:\n \"View detailed information about specific registry items including the name, description, type and files content. For usage examples, use get_item_examples_from_registries instead.\",\n inputSchema: zodToJsonSchema(\n z.object({\n items: z\n .array(z.string())\n .describe(\n \"Array of item names with registry prefix (e.g., ['@shadcn/button', '@shadcn/card'])\"\n ),\n })\n ),\n },\n {\n name: \"get_item_examples_from_registries\",\n description:\n \"Find usage examples and demos with their complete code. Search for patterns like 'accordion-demo', 'button example', 'card-demo', etc. Returns full implementation code with dependencies.\",\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n \"Array of registry names to search (e.g., ['@shadcn', '@acme'])\"\n ),\n query: z\n .string()\n .describe(\n \"Search query for examples (e.g., 'accordion-demo', 'button demo', 'card example', 'tooltip-demo', 'example-booking-form', 'example-hero'). Common patterns: '{item-name}-demo', '{item-name} example', 'example {item-name}'\"\n ),\n })\n ),\n },\n {\n name: \"get_add_command_for_items\",\n description:\n \"Get the shadcn CLI add command for specific items in a registry. This is useful for adding one or more components to your project.\",\n inputSchema: zodToJsonSchema(\n z.object({\n items: z\n .array(z.string())\n .describe(\n \"Array of items to get the add command for prefixed with the registry name (e.g., ['@shadcn/button', '@shadcn/card'])\"\n ),\n })\n ),\n },\n {\n name: \"get_audit_checklist\",\n description:\n \"After creating new components or generating new code files, use this tool for a quick checklist to verify that everything is working as expected. Make sure to run the tool after all required steps have been completed.\",\n inputSchema: zodToJsonSchema(z.object({})),\n },\n ],\n }\n})\n\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n try {\n if (!request.params.arguments) {\n throw new Error(\"No tool arguments provided.\")\n }\n\n switch (request.params.name) {\n case \"get_project_registries\": {\n const config = await getMcpConfig(process.cwd())\n\n if (!config?.registries) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No components.json found or no registries configured.\n\n To fix this:\n 1. Use the \\`init\\` command to create a components.json file\n 2. Or manually create components.json with a registries section`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: dedent`The following registries are configured in the current project:\n\n ${Object.keys(config.registries)\n .map((registry) => `- ${registry}`)\n .join(\"\\n\")}\n\n You can view the items in a registry by running:\n \\`${await npxShadcn(\"view @name-of-registry\")}\\`\n\n For example: \\`${await npxShadcn(\n \"view @shadcn\"\n )}\\` or \\`${await npxShadcn(\n \"view @shadcn @acme\"\n )}\\` to view multiple registries.\n `,\n },\n ],\n }\n }\n\n case \"search_items_in_registries\": {\n const inputSchema = z.object({\n registries: z.array(z.string()),\n query: z.string(),\n limit: z.number().optional(),\n offset: z.number().optional(),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const results = await searchRegistries(args.registries, {\n query: args.query,\n limit: args.limit,\n offset: args.offset,\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No items found matching \"${\n args.query\n }\" in registries ${args.registries.join(\n \", \"\n )}, Try searching with a different query or registry.`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: formatSearchResultsWithPagination(results, {\n query: args.query,\n registries: args.registries,\n }),\n },\n ],\n }\n }\n\n case \"list_items_in_registries\": {\n const inputSchema = z.object({\n registries: z.array(z.string()),\n limit: z.number().optional(),\n offset: z.number().optional(),\n cwd: z.string().optional(),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const results = await searchRegistries(args.registries, {\n limit: args.limit,\n offset: args.offset,\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No items found in registries ${args.registries.join(\n \", \"\n )}.`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: formatSearchResultsWithPagination(results, {\n registries: args.registries,\n }),\n },\n ],\n }\n }\n\n case \"view_items_in_registries\": {\n const inputSchema = z.object({\n items: z.array(z.string()),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const registryItems = await getRegistryItems(args.items, {\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (registryItems?.length === 0) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No items found for: ${args.items.join(\", \")}\n\n Make sure the item names are correct and include the registry prefix (e.g., @shadcn/button).`,\n },\n ],\n }\n }\n\n const formattedItems = formatRegistryItems(registryItems)\n\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Item Details:\n\n ${formattedItems.join(\"\\n\\n---\\n\\n\")}`,\n },\n ],\n }\n }\n\n case \"get_item_examples_from_registries\": {\n const inputSchema = z.object({\n query: z.string(),\n registries: z.array(z.string()),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const config = await getMcpConfig()\n\n const results = await searchRegistries(args.registries, {\n query: args.query,\n config,\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No examples found for query \"${args.query}\".\n\n Try searching with patterns like:\n - \"accordion-demo\" for accordion examples\n - \"button demo\" or \"button example\"\n - Component name followed by \"-demo\" or \"example\"\n\n You can also:\n 1. Use search_items_in_registries to find all items matching your query\n 2. View the main component with view_items_in_registries for inline usage documentation`,\n },\n ],\n }\n }\n\n const itemNames = results.items.map((item) => item.addCommandArgument)\n const fullItems = await getRegistryItems(itemNames, {\n config,\n useCache: false,\n })\n\n return {\n content: [\n {\n type: \"text\",\n text: formatItemExamples(fullItems, args.query),\n },\n ],\n }\n }\n\n case \"get_add_command_for_items\": {\n const args = z\n .object({\n items: z.array(z.string()),\n })\n .parse(request.params.arguments)\n\n return {\n content: [\n {\n type: \"text\",\n text: await npxShadcn(`add ${args.items.join(\" \")}`),\n },\n ],\n }\n }\n\n case \"get_audit_checklist\": {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`## Component Audit Checklist\n\n After adding or generating components, check the following common issues:\n\n - [ ] Ensure imports are correct i.e named vs default imports\n - [ ] If using next/image, ensure images.remotePatterns next.config.js is configured correctly.\n - [ ] Ensure all dependencies are installed.\n - [ ] Check for linting errors or warnings\n - [ ] Check for TypeScript errors\n - [ ] Use the Playwright MCP if available.\n `,\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 return {\n content: [\n {\n type: \"text\",\n text: dedent`Invalid input parameters:\n ${error.errors\n .map((e) => `- ${e.path.join(\".\")}: ${e.message}`)\n .join(\"\\n\")}\n `,\n },\n ],\n isError: true,\n }\n }\n\n if (error instanceof RegistryError) {\n let errorMessage = error.message\n\n if (error.suggestion) {\n errorMessage += `\\n\\n💡 ${error.suggestion}`\n }\n\n if (error.context) {\n errorMessage += `\\n\\nContext: ${JSON.stringify(error.context, null, 2)}`\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Error (${error.code}): ${errorMessage}`,\n },\n ],\n isError: true,\n }\n }\n\n const errorMessage = error instanceof Error ? error.message : String(error)\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Error: ${errorMessage}`,\n },\n ],\n isError: true,\n }\n }\n})\n"]}
@@ -1,4 +1,4 @@
1
- import {m,l,f,d,c,e,n,t,o,b as b$1,p,q as q$1,r,s,w,y as y$1,v,g}from'./chunk-WKG3W635.js';import {a,b}from'./chunk-PMFK2ZSQ.js';import*as y from'path';import y__default,{basename}from'path';import {z}from'zod';import*as G from'fs/promises';import {tmpdir,homedir}from'os';import {green,cyan,yellow,red}from'kleur/colors';import {loadConfig,createMatchPath}from'tsconfig-paths';import {cosmiconfig}from'cosmiconfig';import Le from'fast-glob';import Ne from'fs-extra';import {existsSync,statSync,promises}from'fs';import Ar from'ora';import {Project,SyntaxKind,ScriptKind,QuoteKind}from'ts-morph';import {transformFromAstSync}from'@babel/core';import {parse}from'@babel/parser';import Kr from'@babel/plugin-transform-typescript';import*as Ve from'recast';import Xr from'prompts';import pe from'deepmerge';import {HttpsProxyAgent}from'https-proxy-agent';import $s from'node-fetch';import {createHash}from'crypto';import Ns from'stringify-object';import rn from'fuzzysort';var te=process.env.REGISTRY_URL??"https://ui.shadcn.com/r",ke="new-york-v4",It=[{name:"neutral",label:"Neutral"},{name:"gray",label:"Gray"},{name:"zinc",label:"Zinc"},{name:"stone",label:"Stone"},{name:"slate",label:"Slate"}],F={"@shadcn":`${te}/styles/{style}/{name}.json`};var cn=[{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."}];function de(e){return e.replace(/\${(\w+)}/g,(t,r)=>process.env[r]||"")}function ge(e){let t=[],r=/\${(\w+)}/g,s;for(;(s=r.exec(e))!==null;)t.push(s[1]);return t}var N={NOT_FOUND:"NOT_FOUND",UNAUTHORIZED:"UNAUTHORIZED",FORBIDDEN:"FORBIDDEN",FETCH_ERROR:"FETCH_ERROR",NOT_CONFIGURED:"NOT_CONFIGURED",INVALID_CONFIG:"INVALID_CONFIG",MISSING_ENV_VARS:"MISSING_ENV_VARS",LOCAL_FILE_ERROR:"LOCAL_FILE_ERROR",PARSE_ERROR:"PARSE_ERROR",VALIDATION_ERROR:"VALIDATION_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},I=class extends Error{code;statusCode;context;suggestion;timestamp;cause;constructor(t,r={}){super(t),this.name="RegistryError",this.code=r.code||N.UNKNOWN_ERROR,this.statusCode=r.statusCode,this.cause=r.cause,this.context=r.context,this.suggestion=r.suggestion,this.timestamp=new Date,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor);}toJSON(){return {name:this.name,message:this.message,code:this.code,statusCode:this.statusCode,context:this.context,suggestion:this.suggestion,timestamp:this.timestamp,stack:this.stack}}},q=class extends I{constructor(r,s){let n=`The item at ${r} was not found. It may not exist at the registry.`;super(n,{code:N.NOT_FOUND,statusCode:404,cause:s,context:{url:r},suggestion:"Check if the item name is correct and the registry URL is accessible."});this.url=r;this.name="RegistryNotFoundError";}},ue=class extends I{constructor(r,s){let n=`You are not authorized to access the item at ${r}. If this is a remote registry, you may need to authenticate.`;super(n,{code:N.UNAUTHORIZED,statusCode:401,cause:s,context:{url:r},suggestion:"Check your authentication credentials and environment variables."});this.url=r;this.name="RegistryUnauthorizedError";}},he=class extends I{constructor(r,s){let n=`You are not authorized to access the item at ${r}. If this is a remote registry, you may need to authenticate.`;super(n,{code:N.FORBIDDEN,statusCode:403,cause:s,context:{url:r},suggestion:"Check your authentication credentials and environment variables."});this.url=r;this.name="RegistryForbiddenError";}},ye=class extends I{constructor(r,s,n,i){let o=s?`Failed to fetch from registry (${s}): ${r}`:`Failed to fetch from registry: ${r}`,a=typeof i=="string"&&i?`${o} - ${i}`:o,p="Check your network connection and try again.";s===404?p="The requested resource was not found. Check the URL or item name.":s===500?p="The registry server encountered an error. Try again later.":s&&s>=400&&s<500&&(p="There was a client error. Check your request parameters.");super(a,{code:N.FETCH_ERROR,statusCode:s,cause:i,context:{url:r,responseBody:n},suggestion:p});this.url=r;this.responseBody=n;this.name="RegistryFetchError";}},U=class extends I{constructor(r){let s=r?`Unknown registry "${r}". Make sure it is defined in components.json as follows:
1
+ import {m,l,f,d,c,e,n,t,o,b as b$1,p,q as q$1,r,s,w,y as y$1,v,g}from'./chunk-WKG3W635.js';import {a,b}from'./chunk-PMFK2ZSQ.js';import*as y from'path';import y__default,{basename}from'path';import {z}from'zod';import*as G from'fs/promises';import {tmpdir,homedir}from'os';import {green,cyan,yellow,red}from'kleur/colors';import {loadConfig,createMatchPath}from'tsconfig-paths';import {cosmiconfig}from'cosmiconfig';import Ne from'fast-glob';import Fe from'fs-extra';import {existsSync,statSync,promises}from'fs';import Ar from'ora';import {Project,SyntaxKind,ScriptKind,QuoteKind}from'ts-morph';import {transformFromAstSync}from'@babel/core';import {parse}from'@babel/parser';import Kr from'@babel/plugin-transform-typescript';import*as Ke from'recast';import Xr from'prompts';import pe from'deepmerge';import {HttpsProxyAgent}from'https-proxy-agent';import $s from'node-fetch';import {createHash}from'crypto';import Ns from'stringify-object';import rn from'fuzzysort';var te=process.env.REGISTRY_URL??"https://ui.shadcn.com/r",ke="new-york-v4",bt=[{name:"neutral",label:"Neutral"},{name:"gray",label:"Gray"},{name:"zinc",label:"Zinc"},{name:"stone",label:"Stone"},{name:"slate",label:"Slate"}],F={"@shadcn":`${te}/styles/{style}/{name}.json`};var cn=[{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."}];function de(e){return e.replace(/\${(\w+)}/g,(t,r)=>process.env[r]||"")}function ge(e){let t=[],r=/\${(\w+)}/g,s;for(;(s=r.exec(e))!==null;)t.push(s[1]);return t}var N={NOT_FOUND:"NOT_FOUND",UNAUTHORIZED:"UNAUTHORIZED",FORBIDDEN:"FORBIDDEN",FETCH_ERROR:"FETCH_ERROR",NOT_CONFIGURED:"NOT_CONFIGURED",INVALID_CONFIG:"INVALID_CONFIG",MISSING_ENV_VARS:"MISSING_ENV_VARS",LOCAL_FILE_ERROR:"LOCAL_FILE_ERROR",PARSE_ERROR:"PARSE_ERROR",VALIDATION_ERROR:"VALIDATION_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},I=class extends Error{code;statusCode;context;suggestion;timestamp;cause;constructor(t,r={}){super(t),this.name="RegistryError",this.code=r.code||N.UNKNOWN_ERROR,this.statusCode=r.statusCode,this.cause=r.cause,this.context=r.context,this.suggestion=r.suggestion,this.timestamp=new Date,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor);}toJSON(){return {name:this.name,message:this.message,code:this.code,statusCode:this.statusCode,context:this.context,suggestion:this.suggestion,timestamp:this.timestamp,stack:this.stack}}},q=class extends I{constructor(r,s){let n=`The item at ${r} was not found. It may not exist at the registry.`;super(n,{code:N.NOT_FOUND,statusCode:404,cause:s,context:{url:r},suggestion:"Check if the item name is correct and the registry URL is accessible."});this.url=r;this.name="RegistryNotFoundError";}},ue=class extends I{constructor(r,s){let n=`You are not authorized to access the item at ${r}. If this is a remote registry, you may need to authenticate.`;super(n,{code:N.UNAUTHORIZED,statusCode:401,cause:s,context:{url:r},suggestion:"Check your authentication credentials and environment variables."});this.url=r;this.name="RegistryUnauthorizedError";}},he=class extends I{constructor(r,s){let n=`You are not authorized to access the item at ${r}. If this is a remote registry, you may need to authenticate.`;super(n,{code:N.FORBIDDEN,statusCode:403,cause:s,context:{url:r},suggestion:"Check your authentication credentials and environment variables."});this.url=r;this.name="RegistryForbiddenError";}},ye=class extends I{constructor(r,s,n,i){let o=s?`Failed to fetch from registry (${s}): ${r}`:`Failed to fetch from registry: ${r}`,a=typeof i=="string"&&i?`${o} - ${i}`:o,p="Check your network connection and try again.";s===404?p="The requested resource was not found. Check the URL or item name.":s===500?p="The registry server encountered an error. Try again later.":s&&s>=400&&s<500&&(p="There was a client error. Check your request parameters.");super(a,{code:N.FETCH_ERROR,statusCode:s,cause:i,context:{url:r,responseBody:n},suggestion:p});this.url=r;this.responseBody=n;this.name="RegistryFetchError";}},W=class extends I{constructor(r){let s=r?`Unknown registry "${r}". Make sure it is defined in components.json as follows:
2
2
  {
3
3
  "registries": {
4
4
  "${r}": "[URL_TO_REGISTRY]"
@@ -14,7 +14,7 @@ ${s.errors.map(i=>` - ${i.path.join(".")}: ${i.message}`).join(`
14
14
  ${t.errors.map(n=>` - ${n.path.join(".")}: ${n.message}`).join(`
15
15
  `)}`:r=`Failed to parse registries index:
16
16
  ${t.errors.map(n=>` - ${n.path.join(".")}: ${n.message}`).join(`
17
- `)}`;}super(r,{code:N.PARSE_ERROR,cause:t,context:{parseError:t},suggestion:"The registries index may be corrupted or have invalid registry namespace format. Registry names must start with @ (e.g., @shadcn, @example)."}),this.parseError=t,this.name="RegistriesIndexParseError";}};var pr=/^(@[a-zA-Z0-9](?:[a-zA-Z0-9-_]*[a-zA-Z0-9])?)\/(.+)$/;function se(e){if(!e.startsWith("@"))return {registry:null,item:e};let t=e.match(pr);return t?{registry:t[1],item:t[2]}:{registry:null,item:e}}var A={"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 P={error:red,warn:yellow,info:cyan,success:green};async function O(e,t){return createMatchPath(t.absoluteBaseUrl,t.paths)(e,void 0,()=>true,[".ts",".tsx",".jsx",".js",".css"])}var jn="@/components",kn="@/lib/utils",$n="app/globals.css",An="tailwind.config.js";var Ae=cosmiconfig("components",{searchPlaces:["components.json"]});async function Oe(e){let t=await wr(e);return t?(t.iconLibrary||(t.iconLibrary=t.style==="new-york"?"radix":"lucide"),await Qe(e,t)):null}async function Qe(e,t){t.registries={...F,...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 d.parse({...t,resolvedPaths:{cwd:e,tailwindConfig:t.tailwind.config?y__default.resolve(e,t.tailwind.config):"",tailwindCss:y__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):y__default.resolve(await O(t.aliases.components,r)??e,"ui"),lib:t.aliases.lib?await O(t.aliases.lib,r):y__default.resolve(await O(t.aliases.utils,r)??e,".."),hooks:t.aliases.hooks?await O(t.aliases.hooks,r):y__default.resolve(await O(t.aliases.components,r)??e,"..","hooks")}})}async function wr(e){try{let t=await Ae.search(e);if(!t)return null;let r=c.parse(t.config);if(r.registries){for(let s of Object.keys(r.registries))if(s in F)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 ${P.info(r)}.`)}}async function On(e$1){let t={};for(let s of Object.keys(e$1.aliases)){if(!vr(s,e$1))continue;let n=e$1.resolvedPaths[s],i=await Er(e$1.resolvedPaths.cwd,n);if(!i){t[s]=e$1;continue}t[s]=await Oe(i);}let r=e.safeParse(t);return r.success?r.data:null}async function Er(e,t){let r=Rr(e,t),s=y__default.relative(r,t),i=(await Le.glob("**/package.json",{cwd:r,deep:3,ignore:["**/node_modules/**","**/dist/**","**/build/**","**/public/**"]})).map(o=>y__default.dirname(o)).find(o=>s.startsWith(o));return i?y__default.join(r,i):null}function vr(e,t){return Object.keys(t.resolvedPaths).filter(r=>r!=="utils").includes(e)}function Rr(e,t){let r=e.split(y__default.sep),s=t.split(y__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(y__default.sep)}async function Tt(e,t){return (await W(e))?.tailwindVersion==="v4"?"new-york-v4":t}function Pt(e){let t={resolvedPaths:{cwd:process.cwd(),tailwindConfig:"",tailwindCss:"",utils:"",components:"",ui:"",lib:"",hooks:""},style:"",tailwind:{config:"",css:"",baseColor:"",cssVariables:false},rsc:false,tsx:true,aliases:{components:"",utils:""},registries:{...F}};return e?{...t,...e,resolvedPaths:{...t.resolvedPaths,...e.resolvedPaths||{}},tailwind:{...t.tailwind,...e.tailwind||{}},aliases:{...t.aliases,...e.aliases||{}},registries:{...t.registries,...e.registries||{}}}:t}function Xe(e="",t=true){let r=y__default.join(e,"package.json");return Ne.readJSONSync(r,{throws:t})}var De=["**/node_modules/**",".next","public","dist","build"];z.object({compilerOptions:z.object({paths:z.record(z.string().or(z.array(z.string())))})});async function W(e){let[t,r,s,n,i,o,a,p]=await Promise.all([Le.glob("**/{next,vite,astro,app}.config.*|gatsby-config.*|composer.json|react-router.config.*",{cwd:e,deep:3,ignore:De}),Ne.pathExists(y__default.resolve(e,"src")),kr(e),Pr(e),Tr(e),jt(e),jr(e),Xe(e,false)]),c=await Ne.pathExists(y__default.resolve(e,`${r?"src/":""}app`)),l={framework:A.manual,isSrcDir:r,isRSC:false,isTsx:s,tailwindConfigFile:n,tailwindCssFile:i,tailwindVersion:o,frameworkVersion:null,aliasPrefix:a};if(t.find(f=>f.startsWith("next.config."))?.length)return l.framework=c?A["next-app"]:A["next-pages"],l.isRSC=c,l.frameworkVersion=await Ir(l.framework,p),l;if(t.find(f=>f.startsWith("astro.config."))?.length)return l.framework=A.astro,l;if(t.find(f=>f.startsWith("gatsby-config."))?.length)return l.framework=A.gatsby,l;if(t.find(f=>f.startsWith("composer.json"))?.length)return l.framework=A.laravel,l;if(Object.keys(p?.dependencies??{}).find(f=>f.startsWith("@remix-run/")))return l.framework=A.remix,l;if([...Object.keys(p?.dependencies??{}),...Object.keys(p?.devDependencies??{})].find(f=>f.startsWith("@tanstack/react-start")))return l.framework=A["tanstack-start"],l;if(t.find(f=>f.startsWith("react-router.config."))?.length)return l.framework=A["react-router"],l;if(t.find(f=>f.startsWith("vite.config."))?.length)return l.framework=A.vite,l;let d=t.find(f=>f.startsWith("app.config"));return d?.length&&(await Ne.readFile(y__default.resolve(e,d),"utf8")).includes("defineConfig")?(l.framework=A.vite,l):(p?.dependencies?.expo&&(l.framework=A.expo),l)}async function Ir(e,t){if(!t||!["next-app","next-pages"].includes(e.name))return null;let r=t.dependencies?.next||t.devDependencies?.next;if(!r)return null;let s=r.match(/^[\^~]?(\d+\.\d+\.\d+)/);if(s)return s[1];let n=r.match(/(\d+\.\d+\.\d+)/);return n?n[1]:r}async function jt(e){let[t,r]=await Promise.all([Xe(e,false),Oe(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 Tr(e){let[t,r]=await Promise.all([Le.glob(["**/*.css","**/*.scss"],{cwd:e,deep:5,ignore:De}),jt(e)]);if(!t.length)return null;for(let n of t){let i=await Ne.readFile(y__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 Le.glob("tailwind.config.*",{cwd:e,deep:3,ignore:De});return t.length?t[0]:null}async function jr(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 kr(e){return (await Le.glob("tsconfig.*",{cwd:e,deep:1,ignore:De})).length>0}async function qn(e,t=null){let[r,s]=await Promise.all([Oe(e),t?Promise.resolve(t):W(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:true,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 Qe(e,n)}async function ze(e){if(!e.resolvedPaths?.cwd)return "v3";let t=await W(e.resolvedPaths.cwd);return t?.tailwindVersion?t.tailwindVersion:null}function kt(e,t,r={}){let{ignoreImports:s=false}=r,n=e.replace(/\r\n/g,`
17
+ `)}`;}super(r,{code:N.PARSE_ERROR,cause:t,context:{parseError:t},suggestion:"The registries index may be corrupted or have invalid registry namespace format. Registry names must start with @ (e.g., @shadcn, @example)."}),this.parseError=t,this.name="RegistriesIndexParseError";}};var pr=/^(@[a-zA-Z0-9](?:[a-zA-Z0-9-_]*[a-zA-Z0-9])?)\/(.+)$/;function se(e){if(!e.startsWith("@"))return {registry:null,item:e};let t=e.match(pr);return t?{registry:t[1],item:t[2]}:{registry:null,item:e}}var A={"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 P={error:red,warn:yellow,info:cyan,success:green};async function O(e,t){return createMatchPath(t.absoluteBaseUrl,t.paths)(e,void 0,()=>true,[".ts",".tsx",".jsx",".js",".css"])}var Ae=cosmiconfig("components",{searchPlaces:["components.json"]});async function Ze(e){let t=await wr(e);return t?(t.iconLibrary||(t.iconLibrary=t.style==="new-york"?"radix":"lucide"),await It(e,t)):null}async function It(e,t){t.registries={...F,...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 d.parse({...t,resolvedPaths:{cwd:e,tailwindConfig:t.tailwind.config?y__default.resolve(e,t.tailwind.config):"",tailwindCss:y__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):y__default.resolve(await O(t.aliases.components,r)??e,"ui"),lib:t.aliases.lib?await O(t.aliases.lib,r):y__default.resolve(await O(t.aliases.utils,r)??e,".."),hooks:t.aliases.hooks?await O(t.aliases.hooks,r):y__default.resolve(await O(t.aliases.components,r)??e,"..","hooks")}})}async function wr(e){try{let t=await Ae.search(e);if(!t)return null;let r=c.parse(t.config);if(r.registries){for(let s of Object.keys(r.registries))if(s in F)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 ${P.info(r)}.`)}}async function jn(e$1){let t={};for(let s of Object.keys(e$1.aliases)){if(!vr(s,e$1))continue;let n=e$1.resolvedPaths[s],i=await Er(e$1.resolvedPaths.cwd,n);if(!i){t[s]=e$1;continue}t[s]=await Ze(i);}let r=e.safeParse(t);return r.success?r.data:null}async function Er(e,t){let r=Rr(e,t),s=y__default.relative(r,t),i=(await Ne.glob("**/package.json",{cwd:r,deep:3,ignore:["**/node_modules/**","**/dist/**","**/build/**","**/public/**"]})).map(o=>y__default.dirname(o)).find(o=>s.startsWith(o));return i?y__default.join(r,i):null}function vr(e,t){return Object.keys(t.resolvedPaths).filter(r=>r!=="utils").includes(e)}function Rr(e,t){let r=e.split(y__default.sep),s=t.split(y__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(y__default.sep)}async function Tt(e,t){return (await U(e))?.tailwindVersion==="v4"?"new-york-v4":t}function Pt(e){let t={resolvedPaths:{cwd:process.cwd(),tailwindConfig:"",tailwindCss:"",utils:"",components:"",ui:"",lib:"",hooks:""},style:"",tailwind:{config:"",css:"",baseColor:"",cssVariables:false},rsc:false,tsx:true,aliases:{components:"",utils:""},registries:{...F}};return e?{...t,...e,resolvedPaths:{...t.resolvedPaths,...e.resolvedPaths||{}},tailwind:{...t.tailwind,...e.tailwind||{}},aliases:{...t.aliases,...e.aliases||{}},registries:{...t.registries,...e.registries||{}}}:t}function Qe(e="",t=true){let r=y__default.join(e,"package.json");return Fe.readJSONSync(r,{throws:t})}var Le=["**/node_modules/**",".next","public","dist","build"];z.object({compilerOptions:z.object({paths:z.record(z.string().or(z.array(z.string())))})});async function U(e){let[t,r,s,n,i,o,a,p]=await Promise.all([Ne.glob("**/{next,vite,astro,app}.config.*|gatsby-config.*|composer.json|react-router.config.*",{cwd:e,deep:3,ignore:Le}),Fe.pathExists(y__default.resolve(e,"src")),kr(e),Pr(e),Tr(e),jt(e),jr(e),Qe(e,false)]),c=await Fe.pathExists(y__default.resolve(e,`${r?"src/":""}app`)),l={framework:A.manual,isSrcDir:r,isRSC:false,isTsx:s,tailwindConfigFile:n,tailwindCssFile:i,tailwindVersion:o,frameworkVersion:null,aliasPrefix:a};if(t.find(f=>f.startsWith("next.config."))?.length)return l.framework=c?A["next-app"]:A["next-pages"],l.isRSC=c,l.frameworkVersion=await Ir(l.framework,p),l;if(t.find(f=>f.startsWith("astro.config."))?.length)return l.framework=A.astro,l;if(t.find(f=>f.startsWith("gatsby-config."))?.length)return l.framework=A.gatsby,l;if(t.find(f=>f.startsWith("composer.json"))?.length)return l.framework=A.laravel,l;if(Object.keys(p?.dependencies??{}).find(f=>f.startsWith("@remix-run/")))return l.framework=A.remix,l;if([...Object.keys(p?.dependencies??{}),...Object.keys(p?.devDependencies??{})].find(f=>f.startsWith("@tanstack/react-start")))return l.framework=A["tanstack-start"],l;if(t.find(f=>f.startsWith("react-router.config."))?.length)return l.framework=A["react-router"],l;if(t.find(f=>f.startsWith("vite.config."))?.length)return l.framework=A.vite,l;let d=t.find(f=>f.startsWith("app.config"));return d?.length&&(await Fe.readFile(y__default.resolve(e,d),"utf8")).includes("defineConfig")?(l.framework=A.vite,l):(p?.dependencies?.expo&&(l.framework=A.expo),l)}async function Ir(e,t){if(!t||!["next-app","next-pages"].includes(e.name))return null;let r=t.dependencies?.next||t.devDependencies?.next;if(!r)return null;let s=r.match(/^[\^~]?(\d+\.\d+\.\d+)/);if(s)return s[1];let n=r.match(/(\d+\.\d+\.\d+)/);return n?n[1]:r}async function jt(e){let[t,r]=await Promise.all([Qe(e,false),Ze(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 Tr(e){let[t,r]=await Promise.all([Ne.glob(["**/*.css","**/*.scss"],{cwd:e,deep:5,ignore:Le}),jt(e)]);if(!t.length)return null;for(let n of t){let i=await Fe.readFile(y__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 Ne.glob("tailwind.config.*",{cwd:e,deep:3,ignore:Le});return t.length?t[0]:null}async function jr(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 kr(e){return (await Ne.glob("tsconfig.*",{cwd:e,deep:1,ignore:Le})).length>0}async function De(e){if(!e.resolvedPaths?.cwd)return "v3";let t=await U(e.resolvedPaths.cwd);return t?.tailwindVersion?t.tailwindVersion:null}function kt(e,t,r={}){let{ignoreImports:s=false}=r,n=e.replace(/\r\n/g,`
18
18
  `).trim(),i=t.replace(/\r\n/g,`
19
19
  `).trim();if(n===i)return true;if(!s)return false;let o=/^(import\s+(?:type\s+)?(?:\*\s+as\s+\w+|\{[^}]*\}|\w+)?(?:\s*,\s*(?:\{[^}]*\}|\w+))?\s+from\s+["'])([^"']+)(["'])/gm,a=l=>l.replace(o,(d,f,x,u)=>{if(x.startsWith("."))return `${f}${x}${u}`;let w=x.split("/"),m=w[w.length-1];return `${f}@normalized/${m}${u}`}),p=a(n),c=a(i);return p===c}function Y(e){let t=y__default.basename(e);return /^\.env(\.|$)/.test(t)}function At(e){let t=[".env.local",".env",".env.development.local",".env.development"];for(let r of t){let s=y__default.join(e,r);if(existsSync(s))return s}return null}function ie(e){let t=e.split(`
20
20
  `),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(),a=n.substring(i+1).trim();o&&(r[o]=a.replace(/^["']|["']$/g,""));}return r}function Ot(e,t){let r=ie(e),s=ie(t),n=[];for(let i of Object.keys(s))i in r||n.push(i);return n}function Ft(e,t){let r=ie(e),s=ie(t),n=e.trimEnd();n&&!n.endsWith(`
@@ -24,11 +24,11 @@ ${t.errors.map(n=>` - ${n.path.join(".")}: ${n.message}`).join(`
24
24
  `),n+`
25
25
  `):n&&!n.endsWith(`
26
26
  `)?n+`
27
- `:n}var R={error(...e){console.log(P.error(e.join(" ")));},warn(...e){console.log(P.warn(e.join(" ")));},info(...e){console.log(P.info(e.join(" ")));},success(...e){console.log(P.success(e.join(" ")));},log(...e){console.log(e.join(" "));},break(){console.log("");}};function Z(e,t){return Ar({text:e,isSilent:t?.silent})}var _e=async({sourceFile:e,config:t,baseColor:r})=>(t.tailwind?.cssVariables||!r?.inlineColors||e.getDescendantsOfKind(SyntaxKind.StringLiteral).forEach(s=>{let n=s.getLiteralText(),i=Nr(n,r.inlineColors).trim();i!==n&&s.setLiteralValue(i);}),e);function et(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 Fr=["bg-","text-","border-","ring-offset-","ring-"];function Nr(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,a,p]=et(i),c=Fr.find(d=>a?.startsWith(d));if(!c){s.has(i)||s.add(i);continue}let l=a?.replace(c,"");if(l&&l in t.light){s.add([o,`${c}${t.light[l]}`].filter(Boolean).join(":")+(p?`/${p}`:"")),n.add(["dark",o,`${c}${t.dark[l]}`].filter(Boolean).join(":")+(p?`/${p}`:""));continue}s.has(i)||s.add(i);}return [...Array.from(s),...Array.from(n)].join(" ").trim()}var Ke=async({sourceFile:e,config:t,isRemote:r})=>{let s=t.aliases?.utils,i=`${typeof s=="string"&&s.includes("/")?s.split("/")[0]:"@"}/lib/utils`;if(![".tsx",".ts",".jsx",".js"].includes(e.getExtension()))return e;for(let o of e.getImportStringLiterals()){let a=Dr(o.getLiteralValue(),t,r);if(o.setLiteralValue(a),i===a||a==="@/lib/utils"){if(!o.getFirstAncestorByKind(SyntaxKind.ImportDeclaration)?.getNamedImports().some(l=>l.getName()==="cn")||!t.aliases.utils)continue;o.setLiteralValue(i===a?a.replace(i,t.aliases.utils):t.aliases.utils);}}return e};function Dr(e,t,r=false){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 Vr={sourceType:"module",allowImportExportEverywhere:true,allowReturnOutsideFunction:true,startLine:1,tokens:true,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"]},Nt=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let s=Ve.parse(r,{parser:{parse:i=>parse(i,Vr)}}),n=transformFromAstSync(s,r,{cloneInputAst:false,code:false,ast:true,plugins:[Kr],configFile:false});if(!n||!n.ast)throw new Error("Failed to transform JSX");return Ve.print(n.ast).code};var Ur=/^["']use client["']$/g,We=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(SyntaxKind.ExpressionStatement);return r&&Ur.test(r.getText())&&r.remove(),e};var Ue=async({sourceFile:e,config:t})=>{if(!t.tailwind?.prefix)return e;let r=await ze(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.getNameNode().getText()==="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.getNameNode().getText()==="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(a=>{a.replaceWithText(`"${M(a.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.getNameNode().getText()!=="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]=et(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 Hr=new Project({compilerOptions:{}});async function qr(e){let t=await promises.mkdtemp(y__default.join(tmpdir(),"shadcn-"));return y__default.join(t,e)}async function Dt(e,t=[Ke,We,_e,Ue,a]){let r=await qr(e.filename),s=Hr.createSourceFile(r,e.raw,{scriptKind:ScriptKind.TSX});for(let n of t)await n({sourceFile:s,...e});return e.transformJsx?await Nt({sourceFile:s,...e}):s.getText()}var Yr=["a","span","div","Link","label","Label"],zt=async({sourceFile:e,config:t})=>{if(!t.style?.startsWith("base-"))return e;let r=[],s=e.getDescendantsOfKind(SyntaxKind.JsxElement);for(let n of s){let i=n.getOpeningElement(),o=i.getAttribute("asChild");if(!o)continue;let a=i.getTagNameNode().getText(),c=n.getJsxChildren().find(u=>u.getKind()===SyntaxKind.JsxElement||u.getKind()===SyntaxKind.JsxSelfClosingElement);if(!c){o.remove();continue}let l,d,f;if(c.getKind()===SyntaxKind.JsxSelfClosingElement){let u=c.asKindOrThrow(SyntaxKind.JsxSelfClosingElement);l=u.getTagNameNode().getText(),d=u.getAttributes().map(w=>w.getText()).join(" "),f="";}else {let u=c.asKindOrThrow(SyntaxKind.JsxElement),w=u.getOpeningElement();l=w.getTagNameNode().getText(),d=w.getAttributes().map(m=>m.getText()).join(" "),f=u.getJsxChildren().map(m=>m.getText()).join("");}let x=Yr.includes(l);r.push({parentElement:n,parentTagName:a,childTagName:l,childProps:d,childChildren:f,needsNativeButton:x});}for(let n of r.reverse()){let i=n.parentElement.getOpeningElement();n.parentElement.getClosingElement();let a=i.getAttributes().filter(f=>f.getKind()===SyntaxKind.JsxAttribute?f.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText()!=="asChild":true).map(f=>f.getText()).join(" "),p=n.childProps?`{<${n.childTagName} ${n.childProps} />}`:`{<${n.childTagName} />}`,c=a?`${a} `:"";c+=`render=${p}`,n.needsNativeButton&&(c+=" nativeButton={false}");let l=n.childChildren.trim()?`${n.childChildren}`:"",d=`<${n.parentTagName} ${c}>${l}</${n.parentTagName}>`;n.parentElement.replaceWithText(d);}return e};var _t=async({sourceFile:e})=>(e.getFunctions().forEach(t=>{t.getName()==="middleware"&&t.rename("proxy");}),e.getVariableDeclarations().forEach(t=>{t.getName()==="middleware"&&t.rename("proxy");}),e.getExportDeclarations().forEach(t=>{t.getNamedExports().forEach(s=>{s.getName()==="middleware"&&s.setName("proxy"),s.getAliasNode()?.getText()==="middleware"&&s.setAlias("proxy");});}),e);async function ao(e,t,r){if(!e?.length)return {filesCreated:[],filesUpdated:[],filesSkipped:[]};r={overwrite:false,force:false,silent:false,isRemote:false,isWorkspace:false,...r};let s=Z("Updating files.",{silent:r.silent})?.start(),[n,i]=await Promise.all([W(t.resolvedPaths.cwd),t.tailwind.baseColor?Me(t.tailwind.baseColor):Promise.resolve(void 0)]),o=[],a$1=[],p=[],c=[],l=null;for(let u=0;u<e.length;u++){let w=e[u];if(!w.content)continue;let m=tt(w,t,{isSrcDir:n?.isSrcDir,framework:n?.framework.name,commonRoot:rt(e.map(v=>v.path),w.path),path:r.path,fileIndex:u});if(!m)continue;let k=basename(w.path),g=y__default.dirname(m);if(t.tsx||(m=m.replace(/\.tsx?$/,v=>v===".tsx"?".jsx":".js")),Y(m)&&!existsSync(m)){let v=At(g);v&&(m=v);}let E=existsSync(m);if(E&&statSync(m).isDirectory())throw new Error(`Cannot write to ${m}: path exists and is a directory. Please provide a file path instead.`);let S=Y(m)?w.content:await Dt({filename:w.path,raw:w.content,config:t,baseColor:i,transformJsx:!t.tsx,isRemote:r.isRemote},[Ke,We,_e,Ue,a,b,zt,...Kt(m,n,t)?[_t]:[]]);if(E&&!Y(m)){let v=await promises.readFile(m,"utf-8");if(kt(v,S,{ignoreImports:r.isWorkspace})){p.push(y__default.relative(t.resolvedPaths.cwd,m));continue}}if(E&&!r.overwrite&&!Y(m)){s.stop(),r.rootSpinner&&r.rootSpinner.stop();let{overwrite:v}=await Xr({type:"confirm",name:"overwrite",message:`The file ${P.info(k)} already exists. Would you like to overwrite?`,initial:false});if(!v){p.push(y__default.relative(t.resolvedPaths.cwd,m)),r.rootSpinner&&r.rootSpinner.start();continue}s?.start(),r.rootSpinner&&r.rootSpinner.start();}if(Kt(m,n,t)&&(m=m.replace(/middleware\.(ts|js)$/,"proxy.$1")),existsSync(g)||await promises.mkdir(g,{recursive:true}),Y(m)&&E){let v=await promises.readFile(m,"utf-8"),b=Ft(v,S);if(c=Ot(v,S),l=y__default.relative(t.resolvedPaths.cwd,m),!c.length){p.push(y__default.relative(t.resolvedPaths.cwd,m));continue}await promises.writeFile(m,b,"utf-8"),a$1.push(y__default.relative(t.resolvedPaths.cwd,m));continue}await promises.writeFile(m,S,"utf-8"),E?a$1.push(y__default.relative(t.resolvedPaths.cwd,m)):(o.push(y__default.relative(t.resolvedPaths.cwd,m)),Y(m)&&(c=Object.keys(ie(S)),l=y__default.relative(t.resolvedPaths.cwd,m)));}let d=[...o,...a$1,...p],f=await os(d,t);if(a$1.push(...f),a$1=a$1.filter(u=>!o.includes(u)),!(o.length||a$1.length)&&!p.length&&s?.info("No files updated."),o=Array.from(new Set(o)),a$1=Array.from(new Set(a$1)),p=Array.from(new Set(p)),o.length){if(s?.succeed(`Created ${o.length} ${o.length===1?"file":"files"}:`),!r.silent)for(let u of o)R.log(` - ${u}`);}else s?.stop();if(a$1.length&&(Z(`Updated ${a$1.length} ${a$1.length===1?"file":"files"}:`,{silent:r.silent})?.info(),!r.silent))for(let u of a$1)R.log(` - ${u}`);if(p.length&&(Z(`Skipped ${p.length} ${a$1.length===1?"file":"files"}: (files might be identical, use --overwrite to overwrite)`,{silent:r.silent})?.info(),!r.silent))for(let u of p)R.log(` - ${u}`);if(c.length&&l&&(Z(`Added the following variables to ${P.info(l)}:`)?.info(),!r.silent))for(let u of c)R.log(` ${P.success("+")} ${u}`);return r.silent||R.break(),{filesCreated:o,filesUpdated:a$1,filesSkipped:p}}function tt(e,t,r){if(r.path){let i=y__default.isAbsolute(r.path)?r.path:y__default.join(t.resolvedPaths.cwd,r.path);if(/\.[^/\\]+$/.test(i)){if(r.fileIndex===0)return i}else {let a=y__default.basename(e.path);return y__default.join(i,a)}}if(e.target){if(e.target.startsWith("~/"))return y__default.join(t.resolvedPaths.cwd,e.target.replace("~/",""));let i=e.target;return e.type==="registry:page"&&(i=is(i,r.framework),!i)?"":r.isSrcDir?y__default.join(t.resolvedPaths.cwd,"src",i.replace("src/","")):y__default.join(t.resolvedPaths.cwd,i.replace("src/",""))}let s=ss(e,t),n=ns(e.path,s);return y__default.join(s,n)}function ss(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 rt(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 a=i.slice(0,o).join("/");if(r.some(c=>c!==s&&c.startsWith(a+"/")))return "/"+a}return "/"+n}function ns(e,t){let r=e.replace(/^\/|\/$/g,""),s=t.replace(/^\/|\/$/g,""),n=r.split("/"),i=s.split("/"),o=i[i.length-1],a=n.findIndex(p=>p===o);return a===-1?n[n.length-1]:n.slice(a+1).join("/")}function is(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 os(e,t){let r=new Project({compilerOptions:{}}),s=await W(t.resolvedPaths.cwd),n=loadConfig(t.resolvedPaths.cwd),i=[];if(!s||n.resultType==="failed")return [];for(let o of e){let a=y__default.resolve(t.resolvedPaths.cwd,o);if(!existsSync(a))continue;let p=await promises.readFile(a,"utf-8"),c=await promises.mkdtemp(y__default.join(tmpdir(),"shadcn-")),l=r.createSourceFile(y__default.join(c,basename(a)),p,{scriptKind:ScriptKind.TSX});if(![".tsx",".ts",".jsx",".js"].includes(l.getExtension()))continue;let d=l.getImportDeclarations();for(let f of d){let x=f.getModuleSpecifierValue();if(s?.aliasPrefix&&!x.startsWith(`${s.aliasPrefix}/`))continue;let u=await O(x,n);if(!u)continue;let w=as(u,e,t);if(!w)continue;let m=ls(w,t,s);!m||m===x||(f.setModuleSpecifier(m),await promises.writeFile(a,l.getFullText(),"utf-8"),i.push(o));}}return i}function as(e,t,r,s=[".tsx",".ts",".js",".jsx",".css"]){let n=y__default.normalize(r.resolvedPaths.cwd),i=t.map(m=>m.split(y__default.sep).join(y__default.posix.sep)),o=new Set(i),a=y__default.extname(e),p=a!=="",c=p?e.slice(0,-a.length):e,d=y__default.relative(n,c).split(y__default.sep).join(y__default.posix.sep),f=p?[a]:s,x=new Set;for(let m of f){let k=c+m,g=y__default.posix.normalize(y__default.relative(n,k));(o.has(g)||existsSync(k))&&x.add(g);let E=y__default.join(c,`index${m}`),S=y__default.posix.normalize(y__default.relative(n,E));(o.has(S)||existsSync(E))&&x.add(S);}let u=y__default.basename(c);for(let m of i)f.some(k=>m.endsWith(`/${u}${k}`))&&x.add(m);return x.size===0?null:Array.from(x).sort((m,k)=>{let g=y__default.posix.extname(m),E=y__default.posix.extname(k),S=f.indexOf(g)-f.indexOf(E);if(S!==0)return S;let v=d&&m.startsWith(d)?-1:1,b=d&&k.startsWith(d)?-1:1;return v-b})[0]}function ls(e,t,r){let s=y__default.normalize(y__default.join(t.resolvedPaths.cwd,e)),n=Object.entries(t.resolvedPaths).filter(([,u])=>u&&s.startsWith(y__default.normalize(u+y__default.sep))).sort((u,w)=>w[1].length-u[1].length);if(n.length===0)return null;let[i,o]=n[0],a=y__default.relative(o,s);a=a.split(y__default.sep).join("/");let p=y__default.posix.extname(a),l=[".ts",".tsx",".js",".jsx"].includes(p)?"":p,d=a.slice(0,a.length-p.length);d.endsWith("/index")&&(d=d.slice(0,-6));let f=i==="cwd"?r.aliasPrefix:t.aliases[i];if(!f)return null;let x=d===""?"":`/${d}`;return x=x.replace("/src",""),`${f}${x}${l}`}function Kt(e,t,r){let s=e===y__default.join(r.resolvedPaths.cwd,"middleware.ts")||e===y__default.join(r.resolvedPaths.cwd,"middleware.js"),n=t?.framework.name==="next-app"||t?.framework.name==="next-pages";if(!s||!n||!t?.frameworkVersion)return false;let i=parseInt(t.frameworkVersion.split(".")[0]);return !isNaN(i)&&i>=16}var Ut=[".tsx",".ts",".jsx",".js",".css"],Mt=["lib/utils.ts"],ds=[/^(react|react-dom|next)(\/.*)?$/,/^(node|jsr|npm):.*$/],gs=new Project({compilerOptions:{}});function us(e){if(ds.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 hs(e,t,r,s=new Set){let n=y.resolve(t.resolvedPaths.cwd,e),i=y.relative(t.resolvedPaths.cwd,n);if(Mt.includes(i))return {dependencies:[],files:[]};let o=y.extname(e);if(!Ut.includes(o))return {dependencies:[],files:[]};if(s.has(i))return {dependencies:[],files:[]};if(s.add(i),!(await G.stat(n)).isFile())return {dependencies:[],files:[]};let p=await G.readFile(n,"utf-8"),c=await ys(y.basename(n)),l=gs.createSourceFile(c,p,{scriptKind:ScriptKind.TSX}),d=await loadConfig(t.resolvedPaths.cwd);if(d.resultType==="failed")return {dependencies:[],files:[]};let f=[],x=new Set,u=Bt(e),w={path:i,type:u,target:""};f.push(w);let m=l.getImportDeclarations();for(let g of m){let E=g.getModuleSpecifierValue(),S=E.startsWith(".");if(!E.startsWith(`${r.aliasPrefix}/`)&&!S){let _=us(E);_&&x.add(_);continue}let b=await O(E,d);if(S&&(b=y.resolve(y.dirname(n),E)),!b)continue;if(!y.extname(b))for(let _ of Ut){let pt=`${b}${_}`;try{await G.access(pt),b=pt;break}catch{continue}}let D=y.relative(t.resolvedPaths.cwd,b);if(s.has(D)||Mt.includes(D))continue;let K=Bt(E),Te={path:D,type:K,target:""};(K==="registry:page"||K==="registry:file")&&(Te.target=E),f.push(Te);let ee=await hs(D,t,r,s);if(ee.files)for(let _ of ee.files)s.has(_.path)||(s.add(_.path),f.push(_));ee.dependencies&&ee.dependencies.forEach(_=>x.add(_));}let k=Array.from(new Map(f.map(g=>[g.path,g])).values());return {dependencies:Array.from(x),files:k}}async function ys(e){let t=await G.mkdtemp(y.join(tmpdir(),"shadcn-"));return y.join(t,e)}function Bt(e){return e.includes("/ui/")?"registry:ui":e.includes("/lib/")?"registry:lib":e.includes("/hooks/")?"registry:hook":(e.includes("/components/"),"registry:component")}function L(e){try{return new URL(e),!0}catch{return false}}function ae(e){return e.endsWith(".json")&&!L(e)}function vo(e){return !e||e.type!=="registry:item"&&e.type!=="registry:file"?false:(e.files??[]).every(r=>!!r.target&&(r.type==="registry:file"||r.type==="registry:item"))}async function Jt(e,t){if(!xs(t))return z.array(g).parse(e.flat().filter(Boolean));let r=await W(t.resolvedPaths.cwd),s=new Map,n=z.array(g).parse(e.flat().filter(Boolean));return n.forEach(i=>{let o=tt(i,t,{isSrcDir:r?.isSrcDir,framework:r?.framework.name,commonRoot:rt(n.map(a=>a.path),i.path)});o&&s.set(o,i);}),Array.from(s.values())}function xs(e){return !!(e?.resolvedPaths?.cwd&&(e?.resolvedPaths?.ui||e?.resolvedPaths?.lib||e?.resolvedPaths?.components||e?.resolvedPaths?.hooks))}function Es(e){return e.style?e.style==="new-york"&&e.tailwind?.config===""?ke:e.style:ke}function le(e){let t=Pt({style:ke,registries:F});return e?d.parse(pe(t,{...e,style:Es(e),registries:{...F,...e.registries}})):t}var Be={headers:{}};function ve(e){Be.headers={...Be.headers,...e};}function Gt(e){return Be.headers[e]||{}}function Re(){Be.headers={};}function vs(e){let t=new Set;return typeof e=="string"?ge(e).forEach(r=>t.add(r)):(ge(e.url).forEach(r=>t.add(r)),e.params&&Object.values(e.params).forEach(r=>{ge(r).forEach(s=>t.add(s));}),e.headers&&Object.values(e.headers).forEach(r=>{ge(r).forEach(s=>t.add(s));})),Array.from(t)}function Ht(e,t){let s=vs(t).filter(n=>!process.env[n]);if(s.length>0)throw new xe(e,s)}function Lo(e,t){for(let r of e)ce(r,le(t));Re();}var qt="{name}",Je="{style}",Yt=/\${(\w+)}/g,Zt="?",Rs="&";function Cs(e){return e.startsWith("./")||e.startsWith("/")}function ce(e,t){let{registry:r,item:s}=se(e);if(!r){if(L(e)||ae(e)||Cs(e))return null;r="@shadcn";}let i={...F,...t?.registries}[r];if(!i)throw new U(r);return Ht(r,i),{url:Ss(s,i,t),headers:bs(i)}}function Ss(e,t,r){if(typeof t=="string"){let n=t.replace(qt,e);return r?.style&&n.includes(Je)&&(n=n.replace(Je,r.style)),de(n)}let s=t.url.replace(qt,e);return r?.style&&s.includes(Je)&&(s=s.replace(Je,r.style)),s=de(s),t.params?Is(s,t.params):s}function bs(e){if(typeof e=="string"||!e.headers)return {};let t={};for(let[r,s]of Object.entries(e.headers)){let n=de(s);Ts(s,n)&&(t[r]=n);}return t}function Is(e,t){let r=new URLSearchParams;for(let[i,o]of Object.entries(t)){let a=de(o);a&&r.append(i,a);}let s=r.toString();if(!s)return e;let n=e.includes(Zt)?Rs:Zt;return `${e}${n}${s}`}function Ts(e,t){let r=t.trim();if(!r)return false;if(e.includes("${")&&e.match(Yt)){let n=e.replace(Yt,"").trim();return r!==n}return true}function Ge(e){if(L(e)){let t=new URL(e);return t.pathname.match(/\/chat\/b\//)&&!t.pathname.endsWith("/json")&&(t.pathname=`${t.pathname}/json`),t.toString()}return `${te}/${e}`}var As=process.env.https_proxy?new HttpsProxyAgent(process.env.https_proxy):void 0,st=new Map;async function j(e,t={}){t={useCache:true,...t};try{return await Promise.all(e.map(async s=>{let n=Ge(s);if(t.useCache&&st.has(n))return st.get(n);let i=(async()=>{let o=Gt(n),a=await $s(n,{agent:As,headers:{...o}});if(!a.ok){let p;if(a.headers.get("content-type")?.includes("application/json")){let c=await a.json(),l=z.object({detail:z.string().optional(),title:z.string().optional(),message:z.string().optional(),error:z.string().optional()}).safeParse(c);l.success&&(p=l.data.detail||l.data.message,l.data.error&&(p=`[${l.data.error}] ${p}`));}throw a.status===401?new ue(n,p):a.status===404?new q(n,p):a.status===403?new he(n,p):new ye(n,a.status,p)}return a.json()})();return t.useCache&&st.set(n,i),i}))}catch(r){throw r}}async function Xt(e){try{let t=e;e.startsWith("~/")&&(t=y__default.join(homedir(),e.slice(2)));let r=y__default.resolve(t),s=await promises.readFile(r,"utf8"),n$1=JSON.parse(s);try{return n.parse(n$1)}catch(i){throw new $(e,i)}}catch(t){throw t instanceof Error&&(t.message.includes("ENOENT")||t.message.includes("no such file"))?new re(e,t):t instanceof $?t:new re(e,t)}}async function ga(e,t,r){if(!e||(r={silent:false,tailwindVersion:"v3",...r},r.tailwindVersion==="v4"))return;let s=y__default.relative(t.resolvedPaths.cwd,t.resolvedPaths.tailwindConfig),n=Z(`Updating ${P.info(s)}`,{silent:r.silent}).start(),i=await promises.readFile(t.resolvedPaths.tailwindConfig,"utf8"),o=await zs(i,e,t);await promises.writeFile(t.resolvedPaths.tailwindConfig,o,"utf8"),n?.succeed();}async function zs(e,t,r){let s=await tr(e,r),n=s.getDescendantsOfKind(SyntaxKind.ObjectLiteralExpression).find(o=>o.getProperties().some(a=>a.isKind(SyntaxKind.PropertyAssignment)&&a.getName()==="content"));if(!n)return e;let i=Ws(n);return _s(n,{name:"darkMode",value:"class"},{quoteChar:i}),t.plugins?.forEach(o=>{Vs(n,o);}),t.theme&&await Ks(n,t.theme),s.getFullText()}function _s(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 Ks(e,t){e.getProperty("theme")||e.addPropertyAssignment({name:"theme",initializer:"{}"}),it(e);let s=(e.getPropertyOrThrow("theme")?.asKindOrThrow(SyntaxKind.PropertyAssignment)).getInitializer();if(s?.isKind(SyntaxKind.ObjectLiteralExpression)){let n=s.getText(),i=await Us(n),o=pe(i,t,{arrayMerge:(p,c)=>c}),a=Ns(o).replace(/\'\.\.\.(.*)\'/g,"...$1").replace(/\'\"/g,"'").replace(/\"\'/g,"'").replace(/\'\[/g,"[").replace(/\]\'/g,"]").replace(/\'\\\'/g,"'").replace(/\\\'/g,"'").replace(/\\\'\'/g,"'").replace(/\'\'/g,"'");s.replaceWithText(a);}ot(e);}function Vs(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 tr(e,t){let r=await promises.mkdtemp(y__default.join(tmpdir(),"shadcn-")),s=t?.resolvedPaths?.tailwindConfig||"tailwind.config.ts",n=y__default.join(r,`shadcn-${y__default.basename(s)}`);return new Project({compilerOptions:{}}).createSourceFile(n,e,{scriptKind:y__default.extname(s)===".ts"?ScriptKind.TS:ScriptKind.JS})}function Ws(e){return e.getFirstDescendantByKind(SyntaxKind.StringLiteral)?.getQuoteKind()===QuoteKind.Single?"'":'"'}function it(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)?it(i.asKindOrThrow(SyntaxKind.ObjectLiteralExpression)):i&&i.isKind(SyntaxKind.ArrayLiteralExpression)&&rr(i.asKindOrThrow(SyntaxKind.ArrayLiteralExpression));}}}function rr(e){let t=e.getElements();for(let r=0;r<t.length;r++){let s=t[r];if(s.isKind(SyntaxKind.ObjectLiteralExpression))it(s.asKindOrThrow(SyntaxKind.ObjectLiteralExpression));else if(s.isKind(SyntaxKind.ArrayLiteralExpression))rr(s.asKindOrThrow(SyntaxKind.ArrayLiteralExpression));else if(s.isKind(SyntaxKind.SpreadElement)){let n=s.getText();e.removeElement(r),e.insertElement(r,`"${n}"`);}}}function ot(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)?ot(i):i&&i.isKind(SyntaxKind.ArrayLiteralExpression)&&sr(i.asKindOrThrow(SyntaxKind.ArrayLiteralExpression));}}}function sr(e){let t=e.getElements();for(let r=0;r<t.length;r++){let s=t[r];if(s.isKind(SyntaxKind.ObjectLiteralExpression))ot(s.asKindOrThrow(SyntaxKind.ObjectLiteralExpression));else if(s.isKind(SyntaxKind.ArrayLiteralExpression))sr(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 Us(e){let r=(await tr(`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 He(n)}throw new Error("Invalid input: not an object literal")}function He(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]=He(r.getInitializer()):r.getInitializer()?.isKind(SyntaxKind.ArrayLiteralExpression)?t[s]=nr(r.getInitializer()):t[s]=at(r.getInitializer());}return t}function nr(e){let t=[];for(let r of e.getElements())r.isKind(SyntaxKind.ObjectLiteralExpression)?t.push(He(r.asKindOrThrow(SyntaxKind.ObjectLiteralExpression))):r.isKind(SyntaxKind.ArrayLiteralExpression)?t.push(nr(r.asKindOrThrow(SyntaxKind.ArrayLiteralExpression))):t.push(at(r));return t}function at(e){switch(e.getKind()){case SyntaxKind.StringLiteral:return e.getText();case SyntaxKind.NumericLiteral:return Number(e.getText());case SyntaxKind.TrueKeyword:return true;case SyntaxKind.FalseKeyword:return false;case SyntaxKind.NullKeyword:return null;case SyntaxKind.ArrayLiteralExpression:return e.getElements().map(at);case SyntaxKind.ObjectLiteralExpression:return He(e);default:return e.getText()}}function ir(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}function be(e,t){let r={},s=[...e];if(!t?.registries)return ve({}),s;for(let n=0;n<s.length;n++){let i=ce(s[n],t);i&&(s[n]=i.url,Object.keys(i.headers).length>0&&(r[i.url]=i.headers));}return ve(r),s}async function Q(e,t,r={}){return await Promise.all(e.map(async n$1=>{if(ae(n$1))return Xt(n$1);if(L(n$1)){let[a]=await j([n$1],r);try{return n.parse(a)}catch(p){throw new $(n$1,p)}}if(n$1.startsWith("@")&&t?.registries){let a=be([n$1],t),[p]=await j(a,r);try{return n.parse(p)}catch(c){throw new $(n$1,c)}}let i=`styles/${t?.style??"new-york-v4"}/${n$1}.json`,[o]=await j([i],r);try{return n.parse(o)}catch(a){throw new $(n$1,a)}}))}m.extend({type:f,_source:z.string().optional(),font:l.optional(),config:z.any().optional()}).passthrough();async function ar(e,t$1,r={}){r={useCache:true,...r};let s=[],n$1=[],i=[],o=Array.from(new Set(e)),a=await Q(o,t$1,r),p=new Map;for(let g=0;g<a.length;g++)a[g]&&p.set(o[g],a[g]);for(let[g,E]of Array.from(p.entries())){let S={...E,_source:g};if(s.push(S),E.registryDependencies){let v=E.registryDependencies;if(t$1?.registries)v=be(E.registryDependencies,t$1);else {let D=E.registryDependencies.filter(K=>K.startsWith("@"));if(D.length>0){let{registry:K}=se(D[0]);throw new U(K)}}let{items:b,registryNames:me}=await Ie(v,t$1,r,new Set(o));n$1.push(...b),i.push(...me);}}if(s.push(...n$1),i.length>0){let g=Array.from(new Set(i)),E=g.filter(v=>!v.startsWith("@")),S=g.filter(v=>v.startsWith("@"));if(S.length>0){let v=await Q(S,t$1,r);for(let b=0;b<v.length;b++){let D={...v[b],_source:S[b]};s.push(D);}}if(E.length>0){let v=await lr();if(!v&&s.length===0)return null;if(v){E.includes("index")&&E.unshift("index");let b=[];for(let Te of E){let ee=await Bs(Te,t$1,r);b.push(...ee);}let me=Array.from(new Set(b)),D=await j(me,r),K=z.array(n).parse(D);s.push(...K);}}}if(!s.length)return null;if((o.includes("index")||i.includes("index"))&&t$1.tailwind.baseColor){let g=await Js(t$1.tailwind.baseColor,t$1);g&&s.unshift(g);}let c=new Map;s.forEach(g=>{let E=g._source||g.name;c.set(g,E);}),s=Hs(s,c),s.sort((g,E)=>g.type==="registry:theme"&&E.type!=="registry:theme"?-1:g.type!=="registry:theme"&&E.type==="registry:theme"?1:0);let l={};s.forEach(g=>{l=pe(l,g.tailwind??{});});let d={};s.forEach(g=>{d=pe(d,g.cssVars??{});});let f={};s.forEach(g=>{f=pe(f,g.css??{});});let x="";s.forEach(g=>{g.docs&&(x+=`${g.docs}
28
- `);});let u={};s.forEach(g=>{u=pe(u,g.envVars??{});});let w=await Jt(s.map(g=>g.files??[]),t$1),m=s.filter(g=>g.type==="registry:font"&&g.font).map(g=>({...g,type:"registry:font",font:g.font})),k=t.parse({dependencies:pe.all(s.map(g=>g.dependencies??[])),devDependencies:pe.all(s.map(g=>g.devDependencies??[])),files:w,tailwind:l,cssVars:d,css:f,docs:x,fonts:m.length>0?m:void 0});return Object.keys(u).length>0&&(k.envVars=u),k}async function Ie(e,t,r={},s=new Set){let n=[],i=[];for(let o of e)if(!s.has(o)){if(s.add(o),L(o)||ae(o)){let[a]=await Q([o],t,r);if(a&&(n.push(a),a.registryDependencies)){let p=t?.registries?be(a.registryDependencies,t):a.registryDependencies,c=await Ie(p,t,r,s);n.push(...c.items),i.push(...c.registryNames);}}else if(o.startsWith("@")&&t?.registries){let{registry:a}=se(o);if(a&&!(a in t.registries))throw new U(a);let[p]=await Q([o],t,r);if(p&&(n.push(p),p.registryDependencies)){let c=t?.registries?be(p.registryDependencies,t):p.registryDependencies,l=await Ie(c,t,r,s);n.push(...l.items),i.push(...l.registryNames);}}else if(i.push(o),t)try{let[a]=await Q([o],t,r);if(a&&a.registryDependencies){let p=t?.registries?be(a.registryDependencies,t):a.registryDependencies,c=await Ie(p,t,r,s);n.push(...c.items),i.push(...c.registryNames);}}catch{}}return {items:n,registryNames:i}}async function Bs(e,t,r={}){if(L(e))return [e];let{registryNames:s}=await Ie([e],t,r,new Set),n=t.resolvedPaths?.cwd?await Tt(t.resolvedPaths.cwd,t.style):t.style,i=s.map(o=>Ge(L(o)?o:`styles/${n}/${o}.json`));return Array.from(new Set(i))}async function Js(e,t){let[r,s]=await Promise.all([Me(e),ze(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,...ir(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 H(e,t){let r=t||e.name,s=createHash("sha256").update(r).digest("hex").substring(0,8);return `${e.name}::${s}`}function Gs(e){if(L(e)){let s=new URL(e).pathname,n=s.match(/\/([^/]+)\.json$/),i=n?n[1]:y__default.basename(s,".json");return {name:i,hash:H({name:i},e)}}if(ae(e)){let r=e.match(/\/([^/]+)\.json$/),s=r?r[1]:y__default.basename(e,".json");return {name:s,hash:H({name:s},e)}}let{item:t}=se(e);return {name:t,hash:H({name:t},e)}}function Hs(e,t){let r=new Map,s=new Map,n=new Map,i=new Map;e.forEach(c=>{let l=t.get(c)||c.name,d=H(c,l);r.set(d,c),s.set(d,c),n.set(d,0),i.set(d,[]);});let o=new Map;e.forEach(c=>{let l=t.get(c)||c.name,d=H(c,l);o.has(c.name)||o.set(c.name,[]),o.get(c.name).push(d),l!==c.name&&(o.has(l)||o.set(l,[]),o.get(l).push(d));}),e.forEach(c=>{let l=t.get(c)||c.name,d=H(c,l);c.registryDependencies&&c.registryDependencies.forEach(f=>{let x,u=o.get(f)||[];if(u.length===1)x=u[0];else if(u.length>1)x=u[0];else {let{name:w}=Gs(f),m=o.get(w)||[];m.length>0&&(x=m[0]);}x&&r.has(x)&&(i.get(x).push(d),n.set(d,n.get(d)+1));});});let a=[],p=[];for(n.forEach((c,l)=>{c===0&&a.push(l);});a.length>0;){let c=a.shift(),l=r.get(c);p.push(l),i.get(c).forEach(d=>{let f=n.get(d)-1;n.set(d,f),f===0&&a.push(d);});}if(p.length!==e.length){console.warn("Circular dependency detected in registry items");let c=new Set(p.map(l=>{let d=t.get(l)||l.name;return H(l,d)}));e.forEach(l=>{let d=t.get(l)||l.name,f=H(l,d);c.has(f)||p.push(l);});}return p}function fe(e){if(R.break(),R.error("Something went wrong. Please check the error below for more details."),R.error("If the problem persists, please open an issue on GitHub."),R.error(""),typeof e=="string"&&(R.error(e),R.break(),process.exit(1)),e instanceof I&&(e.message&&(R.error(e.cause?"Error:":"Message:"),R.error(e.message)),e.cause&&(R.error(`
27
+ `:n}var R={error(...e){console.log(P.error(e.join(" ")));},warn(...e){console.log(P.warn(e.join(" ")));},info(...e){console.log(P.info(e.join(" ")));},success(...e){console.log(P.success(e.join(" ")));},log(...e){console.log(e.join(" "));},break(){console.log("");}};function Z(e,t){return Ar({text:e,isSilent:t?.silent})}var ze=async({sourceFile:e,config:t,baseColor:r})=>(t.tailwind?.cssVariables||!r?.inlineColors||e.getDescendantsOfKind(SyntaxKind.StringLiteral).forEach(s=>{let n=s.getLiteralText(),i=Nr(n,r.inlineColors).trim();i!==n&&s.setLiteralValue(i);}),e);function Xe(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 Fr=["bg-","text-","border-","ring-offset-","ring-"];function Nr(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,a,p]=Xe(i),c=Fr.find(d=>a?.startsWith(d));if(!c){s.has(i)||s.add(i);continue}let l=a?.replace(c,"");if(l&&l in t.light){s.add([o,`${c}${t.light[l]}`].filter(Boolean).join(":")+(p?`/${p}`:"")),n.add(["dark",o,`${c}${t.dark[l]}`].filter(Boolean).join(":")+(p?`/${p}`:""));continue}s.has(i)||s.add(i);}return [...Array.from(s),...Array.from(n)].join(" ").trim()}var _e=async({sourceFile:e,config:t,isRemote:r})=>{let s=t.aliases?.utils,i=`${typeof s=="string"&&s.includes("/")?s.split("/")[0]:"@"}/lib/utils`;if(![".tsx",".ts",".jsx",".js"].includes(e.getExtension()))return e;for(let o of e.getImportStringLiterals()){let a=Dr(o.getLiteralValue(),t,r);if(o.setLiteralValue(a),i===a||a==="@/lib/utils"){if(!o.getFirstAncestorByKind(SyntaxKind.ImportDeclaration)?.getNamedImports().some(l=>l.getName()==="cn")||!t.aliases.utils)continue;o.setLiteralValue(i===a?a.replace(i,t.aliases.utils):t.aliases.utils);}}return e};function Dr(e,t,r=false){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 Vr={sourceType:"module",allowImportExportEverywhere:true,allowReturnOutsideFunction:true,startLine:1,tokens:true,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"]},Nt=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let s=Ke.parse(r,{parser:{parse:i=>parse(i,Vr)}}),n=transformFromAstSync(s,r,{cloneInputAst:false,code:false,ast:true,plugins:[Kr],configFile:false});if(!n||!n.ast)throw new Error("Failed to transform JSX");return Ke.print(n.ast).code};var Ur=/^["']use client["']$/g,Ve=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(SyntaxKind.ExpressionStatement);return r&&Ur.test(r.getText())&&r.remove(),e};var We=async({sourceFile:e,config:t})=>{if(!t.tailwind?.prefix)return e;let r=await De(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.getNameNode().getText()==="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.getNameNode().getText()==="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(a=>{a.replaceWithText(`"${M(a.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.getNameNode().getText()!=="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]=Xe(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 Hr=new Project({compilerOptions:{}});async function qr(e){let t=await promises.mkdtemp(y__default.join(tmpdir(),"shadcn-"));return y__default.join(t,e)}async function Dt(e,t=[_e,Ve,ze,We,a]){let r=await qr(e.filename),s=Hr.createSourceFile(r,e.raw,{scriptKind:ScriptKind.TSX});for(let n of t)await n({sourceFile:s,...e});return e.transformJsx?await Nt({sourceFile:s,...e}):s.getText()}var Yr=["a","span","div","Link","label","Label"],zt=async({sourceFile:e,config:t})=>{if(!t.style?.startsWith("base-"))return e;let r=[],s=e.getDescendantsOfKind(SyntaxKind.JsxElement);for(let n of s){let i=n.getOpeningElement(),o=i.getAttribute("asChild");if(!o)continue;let a=i.getTagNameNode().getText(),c=n.getJsxChildren().find(u=>u.getKind()===SyntaxKind.JsxElement||u.getKind()===SyntaxKind.JsxSelfClosingElement);if(!c){o.remove();continue}let l,d,f;if(c.getKind()===SyntaxKind.JsxSelfClosingElement){let u=c.asKindOrThrow(SyntaxKind.JsxSelfClosingElement);l=u.getTagNameNode().getText(),d=u.getAttributes().map(w=>w.getText()).join(" "),f="";}else {let u=c.asKindOrThrow(SyntaxKind.JsxElement),w=u.getOpeningElement();l=w.getTagNameNode().getText(),d=w.getAttributes().map(m=>m.getText()).join(" "),f=u.getJsxChildren().map(m=>m.getText()).join("");}let x=Yr.includes(l);r.push({parentElement:n,parentTagName:a,childTagName:l,childProps:d,childChildren:f,needsNativeButton:x});}for(let n of r.reverse()){let i=n.parentElement.getOpeningElement();n.parentElement.getClosingElement();let a=i.getAttributes().filter(f=>f.getKind()===SyntaxKind.JsxAttribute?f.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText()!=="asChild":true).map(f=>f.getText()).join(" "),p=n.childProps?`{<${n.childTagName} ${n.childProps} />}`:`{<${n.childTagName} />}`,c=a?`${a} `:"";c+=`render=${p}`,n.needsNativeButton&&(c+=" nativeButton={false}");let l=n.childChildren.trim()?`${n.childChildren}`:"",d=`<${n.parentTagName} ${c}>${l}</${n.parentTagName}>`;n.parentElement.replaceWithText(d);}return e};var _t=async({sourceFile:e})=>(e.getFunctions().forEach(t=>{t.getName()==="middleware"&&t.rename("proxy");}),e.getVariableDeclarations().forEach(t=>{t.getName()==="middleware"&&t.rename("proxy");}),e.getExportDeclarations().forEach(t=>{t.getNamedExports().forEach(s=>{s.getName()==="middleware"&&s.setName("proxy"),s.getAliasNode()?.getText()==="middleware"&&s.setAlias("proxy");});}),e);async function ro(e,t,r){if(!e?.length)return {filesCreated:[],filesUpdated:[],filesSkipped:[]};r={overwrite:false,force:false,silent:false,isRemote:false,isWorkspace:false,...r};let s=Z("Updating files.",{silent:r.silent})?.start(),[n,i]=await Promise.all([U(t.resolvedPaths.cwd),t.tailwind.baseColor?Ue(t.tailwind.baseColor):Promise.resolve(void 0)]),o=[],a$1=[],p=[],c=[],l=null;for(let u=0;u<e.length;u++){let w=e[u];if(!w.content)continue;let m=et(w,t,{isSrcDir:n?.isSrcDir,framework:n?.framework.name,commonRoot:tt(e.map(v=>v.path),w.path),path:r.path,fileIndex:u});if(!m)continue;let k=basename(w.path),g=y__default.dirname(m);if(t.tsx||(m=m.replace(/\.tsx?$/,v=>v===".tsx"?".jsx":".js")),Y(m)&&!existsSync(m)){let v=At(g);v&&(m=v);}let E=existsSync(m);if(E&&statSync(m).isDirectory())throw new Error(`Cannot write to ${m}: path exists and is a directory. Please provide a file path instead.`);let S=Y(m)?w.content:await Dt({filename:w.path,raw:w.content,config:t,baseColor:i,transformJsx:!t.tsx,isRemote:r.isRemote},[_e,Ve,ze,We,a,b,zt,...Kt(m,n,t)?[_t]:[]]);if(E&&!Y(m)){let v=await promises.readFile(m,"utf-8");if(kt(v,S,{ignoreImports:r.isWorkspace})){p.push(y__default.relative(t.resolvedPaths.cwd,m));continue}}if(E&&!r.overwrite&&!Y(m)){s.stop(),r.rootSpinner&&r.rootSpinner.stop();let{overwrite:v}=await Xr({type:"confirm",name:"overwrite",message:`The file ${P.info(k)} already exists. Would you like to overwrite?`,initial:false});if(!v){p.push(y__default.relative(t.resolvedPaths.cwd,m)),r.rootSpinner&&r.rootSpinner.start();continue}s?.start(),r.rootSpinner&&r.rootSpinner.start();}if(Kt(m,n,t)&&(m=m.replace(/middleware\.(ts|js)$/,"proxy.$1")),existsSync(g)||await promises.mkdir(g,{recursive:true}),Y(m)&&E){let v=await promises.readFile(m,"utf-8"),b=Ft(v,S);if(c=Ot(v,S),l=y__default.relative(t.resolvedPaths.cwd,m),!c.length){p.push(y__default.relative(t.resolvedPaths.cwd,m));continue}await promises.writeFile(m,b,"utf-8"),a$1.push(y__default.relative(t.resolvedPaths.cwd,m));continue}await promises.writeFile(m,S,"utf-8"),E?a$1.push(y__default.relative(t.resolvedPaths.cwd,m)):(o.push(y__default.relative(t.resolvedPaths.cwd,m)),Y(m)&&(c=Object.keys(ie(S)),l=y__default.relative(t.resolvedPaths.cwd,m)));}let d=[...o,...a$1,...p],f=await os(d,t);if(a$1.push(...f),a$1=a$1.filter(u=>!o.includes(u)),!(o.length||a$1.length)&&!p.length&&s?.info("No files updated."),o=Array.from(new Set(o)),a$1=Array.from(new Set(a$1)),p=Array.from(new Set(p)),o.length){if(s?.succeed(`Created ${o.length} ${o.length===1?"file":"files"}:`),!r.silent)for(let u of o)R.log(` - ${u}`);}else s?.stop();if(a$1.length&&(Z(`Updated ${a$1.length} ${a$1.length===1?"file":"files"}:`,{silent:r.silent})?.info(),!r.silent))for(let u of a$1)R.log(` - ${u}`);if(p.length&&(Z(`Skipped ${p.length} ${a$1.length===1?"file":"files"}: (files might be identical, use --overwrite to overwrite)`,{silent:r.silent})?.info(),!r.silent))for(let u of p)R.log(` - ${u}`);if(c.length&&l&&(Z(`Added the following variables to ${P.info(l)}:`)?.info(),!r.silent))for(let u of c)R.log(` ${P.success("+")} ${u}`);return r.silent||R.break(),{filesCreated:o,filesUpdated:a$1,filesSkipped:p}}function et(e,t,r){if(r.path){let i=y__default.isAbsolute(r.path)?r.path:y__default.join(t.resolvedPaths.cwd,r.path);if(/\.[^/\\]+$/.test(i)){if(r.fileIndex===0)return i}else {let a=y__default.basename(e.path);return y__default.join(i,a)}}if(e.target){if(e.target.startsWith("~/"))return y__default.join(t.resolvedPaths.cwd,e.target.replace("~/",""));let i=e.target;return e.type==="registry:page"&&(i=is(i,r.framework),!i)?"":r.isSrcDir?y__default.join(t.resolvedPaths.cwd,"src",i.replace("src/","")):y__default.join(t.resolvedPaths.cwd,i.replace("src/",""))}let s=ss(e,t),n=ns(e.path,s);return y__default.join(s,n)}function ss(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 tt(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 a=i.slice(0,o).join("/");if(r.some(c=>c!==s&&c.startsWith(a+"/")))return "/"+a}return "/"+n}function ns(e,t){let r=e.replace(/^\/|\/$/g,""),s=t.replace(/^\/|\/$/g,""),n=r.split("/"),i=s.split("/"),o=i[i.length-1],a=n.findIndex(p=>p===o);return a===-1?n[n.length-1]:n.slice(a+1).join("/")}function is(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 os(e,t){let r=new Project({compilerOptions:{}}),s=await U(t.resolvedPaths.cwd),n=loadConfig(t.resolvedPaths.cwd),i=[];if(!s||n.resultType==="failed")return [];for(let o of e){let a=y__default.resolve(t.resolvedPaths.cwd,o);if(!existsSync(a))continue;let p=await promises.readFile(a,"utf-8"),c=await promises.mkdtemp(y__default.join(tmpdir(),"shadcn-")),l=r.createSourceFile(y__default.join(c,basename(a)),p,{scriptKind:ScriptKind.TSX});if(![".tsx",".ts",".jsx",".js"].includes(l.getExtension()))continue;let d=l.getImportDeclarations();for(let f of d){let x=f.getModuleSpecifierValue();if(s?.aliasPrefix&&!x.startsWith(`${s.aliasPrefix}/`))continue;let u=await O(x,n);if(!u)continue;let w=as(u,e,t);if(!w)continue;let m=ls(w,t,s);!m||m===x||(f.setModuleSpecifier(m),await promises.writeFile(a,l.getFullText(),"utf-8"),i.push(o));}}return i}function as(e,t,r,s=[".tsx",".ts",".js",".jsx",".css"]){let n=y__default.normalize(r.resolvedPaths.cwd),i=t.map(m=>m.split(y__default.sep).join(y__default.posix.sep)),o=new Set(i),a=y__default.extname(e),p=a!=="",c=p?e.slice(0,-a.length):e,d=y__default.relative(n,c).split(y__default.sep).join(y__default.posix.sep),f=p?[a]:s,x=new Set;for(let m of f){let k=c+m,g=y__default.posix.normalize(y__default.relative(n,k));(o.has(g)||existsSync(k))&&x.add(g);let E=y__default.join(c,`index${m}`),S=y__default.posix.normalize(y__default.relative(n,E));(o.has(S)||existsSync(E))&&x.add(S);}let u=y__default.basename(c);for(let m of i)f.some(k=>m.endsWith(`/${u}${k}`))&&x.add(m);return x.size===0?null:Array.from(x).sort((m,k)=>{let g=y__default.posix.extname(m),E=y__default.posix.extname(k),S=f.indexOf(g)-f.indexOf(E);if(S!==0)return S;let v=d&&m.startsWith(d)?-1:1,b=d&&k.startsWith(d)?-1:1;return v-b})[0]}function ls(e,t,r){let s=y__default.normalize(y__default.join(t.resolvedPaths.cwd,e)),n=Object.entries(t.resolvedPaths).filter(([,u])=>u&&s.startsWith(y__default.normalize(u+y__default.sep))).sort((u,w)=>w[1].length-u[1].length);if(n.length===0)return null;let[i,o]=n[0],a=y__default.relative(o,s);a=a.split(y__default.sep).join("/");let p=y__default.posix.extname(a),l=[".ts",".tsx",".js",".jsx"].includes(p)?"":p,d=a.slice(0,a.length-p.length);d.endsWith("/index")&&(d=d.slice(0,-6));let f=i==="cwd"?r.aliasPrefix:t.aliases[i];if(!f)return null;let x=d===""?"":`/${d}`;return x=x.replace("/src",""),`${f}${x}${l}`}function Kt(e,t,r){let s=e===y__default.join(r.resolvedPaths.cwd,"middleware.ts")||e===y__default.join(r.resolvedPaths.cwd,"middleware.js"),n=t?.framework.name==="next-app"||t?.framework.name==="next-pages";if(!s||!n||!t?.frameworkVersion)return false;let i=parseInt(t.frameworkVersion.split(".")[0]);return !isNaN(i)&&i>=16}var Ut=[".tsx",".ts",".jsx",".js",".css"],Mt=["lib/utils.ts"],ds=[/^(react|react-dom|next)(\/.*)?$/,/^(node|jsr|npm):.*$/],gs=new Project({compilerOptions:{}});function us(e){if(ds.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 hs(e,t,r,s=new Set){let n=y.resolve(t.resolvedPaths.cwd,e),i=y.relative(t.resolvedPaths.cwd,n);if(Mt.includes(i))return {dependencies:[],files:[]};let o=y.extname(e);if(!Ut.includes(o))return {dependencies:[],files:[]};if(s.has(i))return {dependencies:[],files:[]};if(s.add(i),!(await G.stat(n)).isFile())return {dependencies:[],files:[]};let p=await G.readFile(n,"utf-8"),c=await ys(y.basename(n)),l=gs.createSourceFile(c,p,{scriptKind:ScriptKind.TSX}),d=await loadConfig(t.resolvedPaths.cwd);if(d.resultType==="failed")return {dependencies:[],files:[]};let f=[],x=new Set,u=Bt(e),w={path:i,type:u,target:""};f.push(w);let m=l.getImportDeclarations();for(let g of m){let E=g.getModuleSpecifierValue(),S=E.startsWith(".");if(!E.startsWith(`${r.aliasPrefix}/`)&&!S){let _=us(E);_&&x.add(_);continue}let b=await O(E,d);if(S&&(b=y.resolve(y.dirname(n),E)),!b)continue;if(!y.extname(b))for(let _ of Ut){let ct=`${b}${_}`;try{await G.access(ct),b=ct;break}catch{continue}}let D=y.relative(t.resolvedPaths.cwd,b);if(s.has(D)||Mt.includes(D))continue;let K=Bt(E),Te={path:D,type:K,target:""};(K==="registry:page"||K==="registry:file")&&(Te.target=E),f.push(Te);let ee=await hs(D,t,r,s);if(ee.files)for(let _ of ee.files)s.has(_.path)||(s.add(_.path),f.push(_));ee.dependencies&&ee.dependencies.forEach(_=>x.add(_));}let k=Array.from(new Map(f.map(g=>[g.path,g])).values());return {dependencies:Array.from(x),files:k}}async function ys(e){let t=await G.mkdtemp(y.join(tmpdir(),"shadcn-"));return y.join(t,e)}function Bt(e){return e.includes("/ui/")?"registry:ui":e.includes("/lib/")?"registry:lib":e.includes("/hooks/")?"registry:hook":(e.includes("/components/"),"registry:component")}function L(e){try{return new URL(e),!0}catch{return false}}function ae(e){return e.endsWith(".json")&&!L(e)}function ho(e){return !e||e.type!=="registry:item"&&e.type!=="registry:file"?false:(e.files??[]).every(r=>!!r.target&&(r.type==="registry:file"||r.type==="registry:item"))}async function Jt(e,t){if(!xs(t))return z.array(g).parse(e.flat().filter(Boolean));let r=await U(t.resolvedPaths.cwd),s=new Map,n=z.array(g).parse(e.flat().filter(Boolean));return n.forEach(i=>{let o=et(i,t,{isSrcDir:r?.isSrcDir,framework:r?.framework.name,commonRoot:tt(n.map(a=>a.path),i.path)});o&&s.set(o,i);}),Array.from(s.values())}function xs(e){return !!(e?.resolvedPaths?.cwd&&(e?.resolvedPaths?.ui||e?.resolvedPaths?.lib||e?.resolvedPaths?.components||e?.resolvedPaths?.hooks))}function Es(e){return e.style?e.style==="new-york"&&e.tailwind?.config===""?ke:e.style:ke}function le(e){let t=Pt({style:ke,registries:F});return e?d.parse(pe(t,{...e,style:Es(e),registries:{...F,...e.registries}})):t}var Me={headers:{}};function ve(e){Me.headers={...Me.headers,...e};}function Gt(e){return Me.headers[e]||{}}function Re(){Me.headers={};}function vs(e){let t=new Set;return typeof e=="string"?ge(e).forEach(r=>t.add(r)):(ge(e.url).forEach(r=>t.add(r)),e.params&&Object.values(e.params).forEach(r=>{ge(r).forEach(s=>t.add(s));}),e.headers&&Object.values(e.headers).forEach(r=>{ge(r).forEach(s=>t.add(s));})),Array.from(t)}function Ht(e,t){let s=vs(t).filter(n=>!process.env[n]);if(s.length>0)throw new xe(e,s)}function $o(e,t){for(let r of e)ce(r,le(t));Re();}var qt="{name}",Be="{style}",Yt=/\${(\w+)}/g,Zt="?",Rs="&";function Cs(e){return e.startsWith("./")||e.startsWith("/")}function ce(e,t){let{registry:r,item:s}=se(e);if(!r){if(L(e)||ae(e)||Cs(e))return null;r="@shadcn";}let i={...F,...t?.registries}[r];if(!i)throw new W(r);return Ht(r,i),{url:Ss(s,i,t),headers:bs(i)}}function Ss(e,t,r){if(typeof t=="string"){let n=t.replace(qt,e);return r?.style&&n.includes(Be)&&(n=n.replace(Be,r.style)),de(n)}let s=t.url.replace(qt,e);return r?.style&&s.includes(Be)&&(s=s.replace(Be,r.style)),s=de(s),t.params?Is(s,t.params):s}function bs(e){if(typeof e=="string"||!e.headers)return {};let t={};for(let[r,s]of Object.entries(e.headers)){let n=de(s);Ts(s,n)&&(t[r]=n);}return t}function Is(e,t){let r=new URLSearchParams;for(let[i,o]of Object.entries(t)){let a=de(o);a&&r.append(i,a);}let s=r.toString();if(!s)return e;let n=e.includes(Zt)?Rs:Zt;return `${e}${n}${s}`}function Ts(e,t){let r=t.trim();if(!r)return false;if(e.includes("${")&&e.match(Yt)){let n=e.replace(Yt,"").trim();return r!==n}return true}function Je(e){if(L(e)){let t=new URL(e);return t.pathname.match(/\/chat\/b\//)&&!t.pathname.endsWith("/json")&&(t.pathname=`${t.pathname}/json`),t.toString()}return `${te}/${e}`}var As=process.env.https_proxy?new HttpsProxyAgent(process.env.https_proxy):void 0,rt=new Map;async function j(e,t={}){t={useCache:true,...t};try{return await Promise.all(e.map(async s=>{let n=Je(s);if(t.useCache&&rt.has(n))return rt.get(n);let i=(async()=>{let o=Gt(n),a=await $s(n,{agent:As,headers:{...o}});if(!a.ok){let p;if(a.headers.get("content-type")?.includes("application/json")){let c=await a.json(),l=z.object({detail:z.string().optional(),title:z.string().optional(),message:z.string().optional(),error:z.string().optional()}).safeParse(c);l.success&&(p=l.data.detail||l.data.message,l.data.error&&(p=`[${l.data.error}] ${p}`));}throw a.status===401?new ue(n,p):a.status===404?new q(n,p):a.status===403?new he(n,p):new ye(n,a.status,p)}return a.json()})();return t.useCache&&rt.set(n,i),i}))}catch(r){throw r}}async function Xt(e){try{let t=e;e.startsWith("~/")&&(t=y__default.join(homedir(),e.slice(2)));let r=y__default.resolve(t),s=await promises.readFile(r,"utf8"),n$1=JSON.parse(s);try{return n.parse(n$1)}catch(i){throw new $(e,i)}}catch(t){throw t instanceof Error&&(t.message.includes("ENOENT")||t.message.includes("no such file"))?new re(e,t):t instanceof $?t:new re(e,t)}}async function ca(e,t,r){if(!e||(r={silent:false,tailwindVersion:"v3",...r},r.tailwindVersion==="v4"))return;let s=y__default.relative(t.resolvedPaths.cwd,t.resolvedPaths.tailwindConfig),n=Z(`Updating ${P.info(s)}`,{silent:r.silent}).start(),i=await promises.readFile(t.resolvedPaths.tailwindConfig,"utf8"),o=await zs(i,e,t);await promises.writeFile(t.resolvedPaths.tailwindConfig,o,"utf8"),n?.succeed();}async function zs(e,t,r){let s=await tr(e,r),n=s.getDescendantsOfKind(SyntaxKind.ObjectLiteralExpression).find(o=>o.getProperties().some(a=>a.isKind(SyntaxKind.PropertyAssignment)&&a.getName()==="content"));if(!n)return e;let i=Ws(n);return _s(n,{name:"darkMode",value:"class"},{quoteChar:i}),t.plugins?.forEach(o=>{Vs(n,o);}),t.theme&&await Ks(n,t.theme),s.getFullText()}function _s(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 Ks(e,t){e.getProperty("theme")||e.addPropertyAssignment({name:"theme",initializer:"{}"}),nt(e);let s=(e.getPropertyOrThrow("theme")?.asKindOrThrow(SyntaxKind.PropertyAssignment)).getInitializer();if(s?.isKind(SyntaxKind.ObjectLiteralExpression)){let n=s.getText(),i=await Us(n),o=pe(i,t,{arrayMerge:(p,c)=>c}),a=Ns(o).replace(/\'\.\.\.(.*)\'/g,"...$1").replace(/\'\"/g,"'").replace(/\"\'/g,"'").replace(/\'\[/g,"[").replace(/\]\'/g,"]").replace(/\'\\\'/g,"'").replace(/\\\'/g,"'").replace(/\\\'\'/g,"'").replace(/\'\'/g,"'");s.replaceWithText(a);}it(e);}function Vs(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 tr(e,t){let r=await promises.mkdtemp(y__default.join(tmpdir(),"shadcn-")),s=t?.resolvedPaths?.tailwindConfig||"tailwind.config.ts",n=y__default.join(r,`shadcn-${y__default.basename(s)}`);return new Project({compilerOptions:{}}).createSourceFile(n,e,{scriptKind:y__default.extname(s)===".ts"?ScriptKind.TS:ScriptKind.JS})}function Ws(e){return e.getFirstDescendantByKind(SyntaxKind.StringLiteral)?.getQuoteKind()===QuoteKind.Single?"'":'"'}function nt(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)?nt(i.asKindOrThrow(SyntaxKind.ObjectLiteralExpression)):i&&i.isKind(SyntaxKind.ArrayLiteralExpression)&&rr(i.asKindOrThrow(SyntaxKind.ArrayLiteralExpression));}}}function rr(e){let t=e.getElements();for(let r=0;r<t.length;r++){let s=t[r];if(s.isKind(SyntaxKind.ObjectLiteralExpression))nt(s.asKindOrThrow(SyntaxKind.ObjectLiteralExpression));else if(s.isKind(SyntaxKind.ArrayLiteralExpression))rr(s.asKindOrThrow(SyntaxKind.ArrayLiteralExpression));else if(s.isKind(SyntaxKind.SpreadElement)){let n=s.getText();e.removeElement(r),e.insertElement(r,`"${n}"`);}}}function it(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)?it(i):i&&i.isKind(SyntaxKind.ArrayLiteralExpression)&&sr(i.asKindOrThrow(SyntaxKind.ArrayLiteralExpression));}}}function sr(e){let t=e.getElements();for(let r=0;r<t.length;r++){let s=t[r];if(s.isKind(SyntaxKind.ObjectLiteralExpression))it(s.asKindOrThrow(SyntaxKind.ObjectLiteralExpression));else if(s.isKind(SyntaxKind.ArrayLiteralExpression))sr(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 Us(e){let r=(await tr(`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 Ge(n)}throw new Error("Invalid input: not an object literal")}function Ge(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]=Ge(r.getInitializer()):r.getInitializer()?.isKind(SyntaxKind.ArrayLiteralExpression)?t[s]=nr(r.getInitializer()):t[s]=ot(r.getInitializer());}return t}function nr(e){let t=[];for(let r of e.getElements())r.isKind(SyntaxKind.ObjectLiteralExpression)?t.push(Ge(r.asKindOrThrow(SyntaxKind.ObjectLiteralExpression))):r.isKind(SyntaxKind.ArrayLiteralExpression)?t.push(nr(r.asKindOrThrow(SyntaxKind.ArrayLiteralExpression))):t.push(ot(r));return t}function ot(e){switch(e.getKind()){case SyntaxKind.StringLiteral:return e.getText();case SyntaxKind.NumericLiteral:return Number(e.getText());case SyntaxKind.TrueKeyword:return true;case SyntaxKind.FalseKeyword:return false;case SyntaxKind.NullKeyword:return null;case SyntaxKind.ArrayLiteralExpression:return e.getElements().map(ot);case SyntaxKind.ObjectLiteralExpression:return Ge(e);default:return e.getText()}}function ir(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}function be(e,t){let r={},s=[...e];if(!t?.registries)return ve({}),s;for(let n=0;n<s.length;n++){let i=ce(s[n],t);i&&(s[n]=i.url,Object.keys(i.headers).length>0&&(r[i.url]=i.headers));}return ve(r),s}async function Q(e,t,r={}){return await Promise.all(e.map(async n$1=>{if(ae(n$1))return Xt(n$1);if(L(n$1)){let[a]=await j([n$1],r);try{return n.parse(a)}catch(p){throw new $(n$1,p)}}if(n$1.startsWith("@")&&t?.registries){let a=be([n$1],t),[p]=await j(a,r);try{return n.parse(p)}catch(c){throw new $(n$1,c)}}let i=`styles/${t?.style??"new-york-v4"}/${n$1}.json`,[o]=await j([i],r);try{return n.parse(o)}catch(a){throw new $(n$1,a)}}))}m.extend({type:f,_source:z.string().optional(),font:l.optional(),config:z.any().optional()}).passthrough();async function ar(e,t$1,r={}){r={useCache:true,...r};let s=[],n$1=[],i=[],o=Array.from(new Set(e)),a=await Q(o,t$1,r),p=new Map;for(let g=0;g<a.length;g++)a[g]&&p.set(o[g],a[g]);for(let[g,E]of Array.from(p.entries())){let S={...E,_source:g};if(s.push(S),E.registryDependencies){let v=E.registryDependencies;if(t$1?.registries)v=be(E.registryDependencies,t$1);else {let D=E.registryDependencies.filter(K=>K.startsWith("@"));if(D.length>0){let{registry:K}=se(D[0]);throw new W(K)}}let{items:b,registryNames:me}=await Ie(v,t$1,r,new Set(o));n$1.push(...b),i.push(...me);}}if(s.push(...n$1),i.length>0){let g=Array.from(new Set(i)),E=g.filter(v=>!v.startsWith("@")),S=g.filter(v=>v.startsWith("@"));if(S.length>0){let v=await Q(S,t$1,r);for(let b=0;b<v.length;b++){let D={...v[b],_source:S[b]};s.push(D);}}if(E.length>0){let v=await lr();if(!v&&s.length===0)return null;if(v){E.includes("index")&&E.unshift("index");let b=[];for(let Te of E){let ee=await Bs(Te,t$1,r);b.push(...ee);}let me=Array.from(new Set(b)),D=await j(me,r),K=z.array(n).parse(D);s.push(...K);}}}if(!s.length)return null;if((o.includes("index")||i.includes("index"))&&t$1.tailwind.baseColor){let g=await Js(t$1.tailwind.baseColor,t$1);g&&s.unshift(g);}let c=new Map;s.forEach(g=>{let E=g._source||g.name;c.set(g,E);}),s=Hs(s,c),s.sort((g,E)=>g.type==="registry:theme"&&E.type!=="registry:theme"?-1:g.type!=="registry:theme"&&E.type==="registry:theme"?1:0);let l={};s.forEach(g=>{l=pe(l,g.tailwind??{});});let d={};s.forEach(g=>{d=pe(d,g.cssVars??{});});let f={};s.forEach(g=>{f=pe(f,g.css??{});});let x="";s.forEach(g=>{g.docs&&(x+=`${g.docs}
28
+ `);});let u={};s.forEach(g=>{u=pe(u,g.envVars??{});});let w=await Jt(s.map(g=>g.files??[]),t$1),m=s.filter(g=>g.type==="registry:font"&&g.font).map(g=>({...g,type:"registry:font",font:g.font})),k=t.parse({dependencies:pe.all(s.map(g=>g.dependencies??[])),devDependencies:pe.all(s.map(g=>g.devDependencies??[])),files:w,tailwind:l,cssVars:d,css:f,docs:x,fonts:m.length>0?m:void 0});return Object.keys(u).length>0&&(k.envVars=u),k}async function Ie(e,t,r={},s=new Set){let n=[],i=[];for(let o of e)if(!s.has(o)){if(s.add(o),L(o)||ae(o)){let[a]=await Q([o],t,r);if(a&&(n.push(a),a.registryDependencies)){let p=t?.registries?be(a.registryDependencies,t):a.registryDependencies,c=await Ie(p,t,r,s);n.push(...c.items),i.push(...c.registryNames);}}else if(o.startsWith("@")&&t?.registries){let{registry:a}=se(o);if(a&&!(a in t.registries))throw new W(a);let[p]=await Q([o],t,r);if(p&&(n.push(p),p.registryDependencies)){let c=t?.registries?be(p.registryDependencies,t):p.registryDependencies,l=await Ie(c,t,r,s);n.push(...l.items),i.push(...l.registryNames);}}else if(i.push(o),t)try{let[a]=await Q([o],t,r);if(a&&a.registryDependencies){let p=t?.registries?be(a.registryDependencies,t):a.registryDependencies,c=await Ie(p,t,r,s);n.push(...c.items),i.push(...c.registryNames);}}catch{}}return {items:n,registryNames:i}}async function Bs(e,t,r={}){if(L(e))return [e];let{registryNames:s}=await Ie([e],t,r,new Set),n=t.resolvedPaths?.cwd?await Tt(t.resolvedPaths.cwd,t.style):t.style,i=s.map(o=>Je(L(o)?o:`styles/${n}/${o}.json`));return Array.from(new Set(i))}async function Js(e,t){let[r,s]=await Promise.all([Ue(e),De(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,...ir(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 H(e,t){let r=t||e.name,s=createHash("sha256").update(r).digest("hex").substring(0,8);return `${e.name}::${s}`}function Gs(e){if(L(e)){let s=new URL(e).pathname,n=s.match(/\/([^/]+)\.json$/),i=n?n[1]:y__default.basename(s,".json");return {name:i,hash:H({name:i},e)}}if(ae(e)){let r=e.match(/\/([^/]+)\.json$/),s=r?r[1]:y__default.basename(e,".json");return {name:s,hash:H({name:s},e)}}let{item:t}=se(e);return {name:t,hash:H({name:t},e)}}function Hs(e,t){let r=new Map,s=new Map,n=new Map,i=new Map;e.forEach(c=>{let l=t.get(c)||c.name,d=H(c,l);r.set(d,c),s.set(d,c),n.set(d,0),i.set(d,[]);});let o=new Map;e.forEach(c=>{let l=t.get(c)||c.name,d=H(c,l);o.has(c.name)||o.set(c.name,[]),o.get(c.name).push(d),l!==c.name&&(o.has(l)||o.set(l,[]),o.get(l).push(d));}),e.forEach(c=>{let l=t.get(c)||c.name,d=H(c,l);c.registryDependencies&&c.registryDependencies.forEach(f=>{let x,u=o.get(f)||[];if(u.length===1)x=u[0];else if(u.length>1)x=u[0];else {let{name:w}=Gs(f),m=o.get(w)||[];m.length>0&&(x=m[0]);}x&&r.has(x)&&(i.get(x).push(d),n.set(d,n.get(d)+1));});});let a=[],p=[];for(n.forEach((c,l)=>{c===0&&a.push(l);});a.length>0;){let c=a.shift(),l=r.get(c);p.push(l),i.get(c).forEach(d=>{let f=n.get(d)-1;n.set(d,f),f===0&&a.push(d);});}if(p.length!==e.length){console.warn("Circular dependency detected in registry items");let c=new Set(p.map(l=>{let d=t.get(l)||l.name;return H(l,d)}));e.forEach(l=>{let d=t.get(l)||l.name,f=H(l,d);c.has(f)||p.push(l);});}return p}function fe(e){if(R.break(),R.error("Something went wrong. Please check the error below for more details."),R.error("If the problem persists, please open an issue on GitHub."),R.error(""),typeof e=="string"&&(R.error(e),R.break(),process.exit(1)),e instanceof I&&(e.message&&(R.error(e.cause?"Error:":"Message:"),R.error(e.message)),e.cause&&(R.error(`
29
29
  Message:`),R.error(e.cause)),e.suggestion&&(R.error(`
30
- Suggestion:`),R.error(e.suggestion)),R.break(),process.exit(1)),e instanceof z.ZodError){R.error("Validation failed:");for(let[t,r]of Object.entries(e.flatten().fieldErrors))R.error(`- ${P.info(t)}: ${r}`);R.break(),process.exit(1);}e instanceof Error&&(R.error(e.message),R.break(),process.exit(1)),R.break(),process.exit(1);}async function ct(e,t){let{config:r,useCache:s}=t||{};if(L(e)){let[a]=await j([e],{useCache:s});try{return o.parse(a)}catch(p){throw new $(e,p)}}if(!e.startsWith("@"))throw new we(e);let n=e;n.endsWith("/registry")||(n=`${n}/registry`);let i=ce(n,le(r));if(!i?.url)throw new q(n);i.headers&&Object.keys(i.headers).length>0&&ve({[i.url]:i.headers});let[o$1]=await j([i.url],{useCache:s});try{return o.parse(o$1)}catch(a){throw new $(n,a)}}async function Zs(e,t){let{config:r,useCache:s=false}=t||{};return Re(),Q(e,le(r),{useCache:s})}async function Qs(e,t){let{config:r,useCache:s=false}=t||{};return Re(),ar(e,le(r),{useCache:s})}async function tl(e,t){let{useCache:r=true}=t||{};r||Ae.clearCaches();let s=await Ae.search(e);if(!s)return {registries:F};let n=z.object({registries:b$1.optional()}).safeParse(s.config);if(!n.success)throw new $e(e,n.error);return {registries:{...F,...n.data.registries||{}}}}async function lr(){try{let[e]=await j(["index.json"]);return p.parse(e)}catch(e){R.error(`
31
- `),fe(e);}}async function rl(){try{let[e]=await j(["styles/index.json"]);return q$1.parse(e)}catch(e){return R.error(`
32
- `),fe(e),[]}}async function sl(){try{let[e]=await j(["icons/index.json"]);return r.parse(e)}catch(e){return fe(e),{}}}async function nl(){return It}async function Me(e){try{let[t]=await j([`colors/${e}.json`]);return s.parse(t)}catch(t){fe(t);}}async function Xs(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 Xs(e,n.registryDependencies);r.push(...i);}}return r.filter((s,n,i)=>i.findIndex(o=>o.name===s.name)===n)}async function il(e,t){try{let r=t.map(n=>`styles/${e}/${n.name}.json`);return (await j(r)).map(n$1=>n.parse(n$1))}catch(r){return fe(r),[]}}async function ol(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?y__default.join(e.resolvedPaths[s],n):null}async function en(e){e={useCache:true,...e};let t=`${te}/registries.json`,[r]=await j([t],{useCache:e.useCache});try{return w.parse(r)}catch(s){throw s instanceof z.ZodError?new Ee(s):s}}async function tn(e){e={useCache:true,...e};let t=`${te}/config.json`,[r]=await j([t],{useCache:e.useCache});return y$1.parse(r).presets}async function al(e,t){return (await tn(t)).find(s=>s.name.toLowerCase()===e.toLowerCase())??null}async function sn(e,t){let{query:r,limit:s,offset:n,config:i,useCache:o}=t||{},a=[];for(let f of e){let u=((await ct(f,{config:i,useCache:o})).items||[]).map(w=>({name:w.name,type:w.type,description:w.description,registry:f,addCommandArgument:ln(w.name,f)}));a=a.concat(u);}r&&(a=on(a,{query:r,limit:a.length,keys:["name","description"]}));let p=n||0,c=s||a.length,l=a.length,d={pagination:{total:l,offset:p,limit:c,hasMore:p+c<l},items:a.slice(p,p+c)};return v.parse(d)}var nn=z.object({name:z.string(),type:z.string().optional(),description:z.string().optional(),registry:z.string().optional(),addCommandArgument:z.string().optional()}).passthrough();function on(e,t){t={limit:100,threshold:-1e4,...t};let s=rn.go(t.query,e,{keys:t.keys,threshold:t.threshold,limit:t.limit}).map(n=>n.obj);return z.array(nn).parse(s)}function an(e){try{return new URL(e),!0}catch{return false}}function ln(e,t){if(!an(t))return `${t}/${e}`;let r=t.indexOf("://")+3,s=t.indexOf("/",r);if(s===-1){let f=t.indexOf("?",r);if(f!==-1){let x=t.substring(0,f),w=t.substring(f).replace(/\bregistry\b/g,e);return x+w}return t}let n=t.substring(0,s),i=t.substring(s),o=i.indexOf("?")!==-1?i.indexOf("?"):i.length,a=i.substring(0,o),p=i.substring(o),c=a.lastIndexOf("registry"),l=a;c!==-1&&(l=a.substring(0,c)+e+a.substring(c+8));let d=p.replace(/\bregistry\b/g,e);return n+l+d}
33
- export{Qs as $,re as A,$ as B,xe as C,we as D,Ee as E,se as F,At as G,Ot as H,Ft as I,Dt as J,ao as K,hs as L,L as M,vo as N,le as O,Re as P,Lo as Q,ce as R,j as S,ga as T,tr as U,Ws as V,Q as W,ar as X,fe as Y,ct as Z,Zs as _,It as a,tl as aa,F as b,lr as ba,cn as c,rl as ca,P as d,sl as da,jn as e,nl as ea,kn as f,Me as fa,$n as g,Xs as ga,An as h,il as ha,Oe as i,ol as ia,Qe as j,en as ja,On as k,tn as ka,Er as l,al as la,Rr as m,sn as ma,Pt as n,Xe as o,W as p,qn as q,ze as r,R as s,Z as t,I as u,q as v,ue as w,he as x,ye as y,U as z};//# sourceMappingURL=chunk-I3JXSMK6.js.map
34
- //# sourceMappingURL=chunk-I3JXSMK6.js.map
30
+ Suggestion:`),R.error(e.suggestion)),R.break(),process.exit(1)),e instanceof z.ZodError){R.error("Validation failed:");for(let[t,r]of Object.entries(e.flatten().fieldErrors))R.error(`- ${P.info(t)}: ${r}`);R.break(),process.exit(1);}e instanceof Error&&(R.error(e.message),R.break(),process.exit(1)),R.break(),process.exit(1);}async function lt(e,t){let{config:r,useCache:s}=t||{};if(L(e)){let[a]=await j([e],{useCache:s});try{return o.parse(a)}catch(p){throw new $(e,p)}}if(!e.startsWith("@"))throw new we(e);let n=e;n.endsWith("/registry")||(n=`${n}/registry`);let i=ce(n,le(r));if(!i?.url)throw new q(n);i.headers&&Object.keys(i.headers).length>0&&ve({[i.url]:i.headers});let[o$1]=await j([i.url],{useCache:s});try{return o.parse(o$1)}catch(a){throw new $(n,a)}}async function Zs(e,t){let{config:r,useCache:s=false}=t||{};return Re(),Q(e,le(r),{useCache:s})}async function Qs(e,t){let{config:r,useCache:s=false}=t||{};return Re(),ar(e,le(r),{useCache:s})}async function Ya(e,t){let{useCache:r=true}=t||{};r||Ae.clearCaches();let s=await Ae.search(e);if(!s)return {registries:F};let n=z.object({registries:b$1.optional()}).safeParse(s.config);if(!n.success)throw new $e(e,n.error);return {registries:{...F,...n.data.registries||{}}}}async function lr(){try{let[e]=await j(["index.json"]);return p.parse(e)}catch(e){R.error(`
31
+ `),fe(e);}}async function Za(){try{let[e]=await j(["styles/index.json"]);return q$1.parse(e)}catch(e){return R.error(`
32
+ `),fe(e),[]}}async function Qa(){try{let[e]=await j(["icons/index.json"]);return r.parse(e)}catch(e){return fe(e),{}}}async function Xa(){return bt}async function Ue(e){try{let[t]=await j([`colors/${e}.json`]);return s.parse(t)}catch(t){fe(t);}}async function Xs(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 Xs(e,n.registryDependencies);r.push(...i);}}return r.filter((s,n,i)=>i.findIndex(o=>o.name===s.name)===n)}async function el(e,t){try{let r=t.map(n=>`styles/${e}/${n.name}.json`);return (await j(r)).map(n$1=>n.parse(n$1))}catch(r){return fe(r),[]}}async function tl(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?y__default.join(e.resolvedPaths[s],n):null}async function en(e){e={useCache:true,...e};let t=`${te}/registries.json`,[r]=await j([t],{useCache:e.useCache});try{return w.parse(r)}catch(s){throw s instanceof z.ZodError?new Ee(s):s}}async function tn(e){e={useCache:true,...e};let t=`${te}/config.json`,[r]=await j([t],{useCache:e.useCache});return y$1.parse(r).presets}async function rl(e,t){return (await tn(t)).find(s=>s.name.toLowerCase()===e.toLowerCase())??null}async function sn(e,t){let{query:r,limit:s,offset:n,config:i,useCache:o}=t||{},a=[];for(let f of e){let u=((await lt(f,{config:i,useCache:o})).items||[]).map(w=>({name:w.name,type:w.type,description:w.description,registry:f,addCommandArgument:ln(w.name,f)}));a=a.concat(u);}r&&(a=on(a,{query:r,limit:a.length,keys:["name","description"]}));let p=n||0,c=s||a.length,l=a.length,d={pagination:{total:l,offset:p,limit:c,hasMore:p+c<l},items:a.slice(p,p+c)};return v.parse(d)}var nn=z.object({name:z.string(),type:z.string().optional(),description:z.string().optional(),registry:z.string().optional(),addCommandArgument:z.string().optional()}).passthrough();function on(e,t){t={limit:100,threshold:-1e4,...t};let s=rn.go(t.query,e,{keys:t.keys,threshold:t.threshold,limit:t.limit}).map(n=>n.obj);return z.array(nn).parse(s)}function an(e){try{return new URL(e),!0}catch{return false}}function ln(e,t){if(!an(t))return `${t}/${e}`;let r=t.indexOf("://")+3,s=t.indexOf("/",r);if(s===-1){let f=t.indexOf("?",r);if(f!==-1){let x=t.substring(0,f),w=t.substring(f).replace(/\bregistry\b/g,e);return x+w}return t}let n=t.substring(0,s),i=t.substring(s),o=i.indexOf("?")!==-1?i.indexOf("?"):i.length,a=i.substring(0,o),p=i.substring(o),c=a.lastIndexOf("registry"),l=a;c!==-1&&(l=a.substring(0,c)+e+a.substring(c+8));let d=p.replace(/\bregistry\b/g,e);return n+l+d}
33
+ export{el as $,Ot as A,Ft as B,R as C,Z as D,Dt as E,ro as F,hs as G,L as H,ho as I,le as J,Re as K,$o as L,ce as M,ca as N,Q as O,ar as P,fe as Q,lt as R,Zs as S,Qs as T,Ya as U,lr as V,Za as W,Qa as X,Xa as Y,Ue as Z,Xs as _,bt as a,tl as aa,F as b,en as ba,cn as c,tn as ca,I as d,rl as da,q as e,sn as ea,ue as f,he as g,ye as h,W as i,re as j,$ as k,xe as l,we as m,Ee as n,se as o,P as p,Ze as q,It as r,jn as s,Er as t,Rr as u,Pt as v,Qe as w,U as x,De as y,At as z};//# sourceMappingURL=chunk-XYXOKYQL.js.map
34
+ //# sourceMappingURL=chunk-XYXOKYQL.js.map