shadcn 0.0.0-beta.f733addf → 0.0.0-beta.f7e63cb0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ import {V}from'./chunk-HDFND2B4.js';import b from'fuzzysort';import {z as z$1}from'zod';var I=z$1.object({name:z$1.string(),type:z$1.string().optional(),description:z$1.string().optional(),registry:z$1.string(),addCommandArgument:z$1.string()}),R=z$1.object({pagination:z$1.object({total:z$1.number(),offset:z$1.number(),limit:z$1.number(),hasMore:z$1.boolean()}),items:z$1.array(I)});async function k(n,e){let{query:c,limit:s,offset:g,config:i,useCache:f}=e||{},r=[];for(let a of n){let p=((await V(a,{config:i,useCache:f})).items||[]).map(u=>({name:u.name,type:u.type,description:u.description,registry:a,addCommandArgument:z(u.name,a)}));r=r.concat(p);}c&&(r=x(r,{query:c,limit:r.length,keys:["name","description"]}));let m=g||0,o=s||r.length,l=r.length,h={pagination:{total:l,offset:m,limit:o,hasMore:m+o<l},items:r.slice(m,m+o)};return R.parse(h)}var A=z$1.object({name:z$1.string(),type:z$1.string().optional(),description:z$1.string().optional(),registry:z$1.string().optional(),addCommandArgument:z$1.string().optional()}).passthrough();function x(n,e){e={limit:100,threshold:-1e4,...e};let s=b.go(e.query,n,{keys:e.keys,threshold:e.threshold,limit:e.limit}).map(g=>g.obj);return z$1.array(A).parse(s)}function S(n){try{return new URL(n),!0}catch{return false}}function z(n,e){if(!S(e))return `${e}/${n}`;let c=e.indexOf("://")+3,s=e.indexOf("/",c);if(s===-1){let a=e.indexOf("?",c);if(a!==-1){let d=e.substring(0,a),u=e.substring(a).replace(/\bregistry\b/g,n);return d+u}return e}let g=e.substring(0,s),i=e.substring(s),f=i.indexOf("?")!==-1?i.indexOf("?"):i.length,r=i.substring(0,f),m=i.substring(f),o=r.lastIndexOf("registry"),l=r;o!==-1&&(l=r.substring(0,o)+n+r.substring(o+8));let h=m.replace(/\bregistry\b/g,n);return g+l+h}
2
+ export{k as a};//# sourceMappingURL=chunk-2CSXR3PN.js.map
3
+ //# sourceMappingURL=chunk-2CSXR3PN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/registry/search.ts"],"names":["searchResultItemSchema","z","searchResultsSchema","searchRegistries","registries","options","query","limit","offset","config","useCache","allItems","registry","itemsWithRegistry","getRegistry","item","buildRegistryItemNameFromRegistry","searchItems","paginationOffset","paginationLimit","totalItems","result","searchableItemSchema","items","results","fuzzysort","isUrl","string","name","protocolEnd","hostEnd","queryStart","beforeQuery","updatedQuery","hostPart","pathAndQuery","pathEnd","pathOnly","queryAndAfter","lastIndex","updatedPath"],"mappings":"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","file":"chunk-2CSXR3PN.js","sourcesContent":["import { Config } from \"@/src/utils/get-config\"\nimport fuzzysort from \"fuzzysort\"\nimport { z } from \"zod\"\n\nimport { getRegistry } from \"./api\"\n\nconst searchResultItemSchema = z.object({\n name: z.string(),\n type: z.string().optional(),\n description: z.string().optional(),\n registry: z.string(),\n addCommandArgument: z.string(),\n})\n\nconst searchResultsSchema = z.object({\n pagination: z.object({\n total: z.number(),\n offset: z.number(),\n limit: z.number(),\n hasMore: z.boolean(),\n }),\n items: z.array(searchResultItemSchema),\n})\n\nexport async function searchRegistries(\n registries: string[],\n options?: {\n query?: string\n limit?: number\n offset?: number\n config?: Partial<Config>\n useCache?: boolean\n }\n) {\n const { query, limit, offset, config, useCache } = options || {}\n\n let allItems: z.infer<typeof searchResultItemSchema>[] = []\n\n for (const registry of registries) {\n const registryData = await getRegistry(registry, { config, useCache })\n\n const itemsWithRegistry = (registryData.items || []).map((item) => ({\n name: item.name,\n type: item.type,\n description: item.description,\n registry: registry,\n addCommandArgument: buildRegistryItemNameFromRegistry(\n item.name,\n registry\n ),\n }))\n\n allItems = allItems.concat(itemsWithRegistry)\n }\n\n if (query) {\n allItems = searchItems(allItems, {\n query,\n limit: allItems.length,\n keys: [\"name\", \"description\"],\n }) as z.infer<typeof searchResultItemSchema>[]\n }\n\n const paginationOffset = offset || 0\n const paginationLimit = limit || allItems.length\n const totalItems = allItems.length\n\n const result: z.infer<typeof searchResultsSchema> = {\n pagination: {\n total: totalItems,\n offset: paginationOffset,\n limit: paginationLimit,\n hasMore: paginationOffset + paginationLimit < totalItems,\n },\n items: allItems.slice(paginationOffset, paginationOffset + paginationLimit),\n }\n\n return searchResultsSchema.parse(result)\n}\n\nconst searchableItemSchema = z\n .object({\n name: z.string(),\n type: z.string().optional(),\n description: z.string().optional(),\n registry: z.string().optional(),\n addCommandArgument: z.string().optional(),\n })\n .passthrough()\n\ntype SearchableItem = z.infer<typeof searchableItemSchema>\n\nfunction searchItems<\n T extends {\n name: string\n type?: string\n description?: string\n addCommandArgument?: string\n [key: string]: any\n } = SearchableItem\n>(\n items: T[],\n options: {\n query: string\n } & Pick<Parameters<typeof fuzzysort.go>[2], \"keys\" | \"threshold\" | \"limit\">\n) {\n options = {\n limit: 100,\n threshold: -10000,\n ...options,\n }\n\n const searchResults = fuzzysort.go(options.query, items, {\n keys: options.keys,\n threshold: options.threshold,\n limit: options.limit,\n })\n\n const results = searchResults.map((result) => result.obj)\n\n return z.array(searchableItemSchema).parse(results)\n}\n\nfunction isUrl(string: string): boolean {\n try {\n new URL(string)\n return true\n } catch {\n return false\n }\n}\n\n// Builds the registry item name for the add command.\n// For namespaced registries, returns \"registry/item\".\n// For URL registries, replaces \"registry\" with the item name in the URL.\nexport function buildRegistryItemNameFromRegistry(\n name: string,\n registry: string\n) {\n // If registry is not a URL, return namespace format.\n if (!isUrl(registry)) {\n return `${registry}/${name}`\n }\n\n // Find where the host part ends in the original string.\n const protocolEnd = registry.indexOf(\"://\") + 3\n const hostEnd = registry.indexOf(\"/\", protocolEnd)\n\n if (hostEnd === -1) {\n // No path, check for query params.\n const queryStart = registry.indexOf(\"?\", protocolEnd)\n if (queryStart !== -1) {\n // Has query params but no path.\n const beforeQuery = registry.substring(0, queryStart)\n const queryAndAfter = registry.substring(queryStart)\n // Replace \"registry\" with itemName in query params only.\n const updatedQuery = queryAndAfter.replace(/\\bregistry\\b/g, name)\n return beforeQuery + updatedQuery\n }\n // No path or query, return as is.\n return registry\n }\n\n // Split at host boundary.\n const hostPart = registry.substring(0, hostEnd)\n const pathAndQuery = registry.substring(hostEnd)\n\n // Find all occurrences of \"registry\" in path and query.\n // Replace only the last occurrence in the path segment.\n const pathEnd =\n pathAndQuery.indexOf(\"?\") !== -1\n ? pathAndQuery.indexOf(\"?\")\n : pathAndQuery.length\n const pathOnly = pathAndQuery.substring(0, pathEnd)\n const queryAndAfter = pathAndQuery.substring(pathEnd)\n\n // Replace the last occurrence of \"registry\" in the path.\n const lastIndex = pathOnly.lastIndexOf(\"registry\")\n let updatedPath = pathOnly\n if (lastIndex !== -1) {\n updatedPath =\n pathOnly.substring(0, lastIndex) +\n name +\n pathOnly.substring(lastIndex + \"registry\".length)\n }\n\n // Replace all occurrences of \"registry\" in query params.\n const updatedQuery = queryAndAfter.replace(/\\bregistry\\b/g, name)\n\n return hostPart + updatedPath + updatedQuery\n}\n"]}
@@ -0,0 +1,28 @@
1
+ import {W,P}from'./chunk-HDFND2B4.js';import {h}from'./chunk-IFPXTFU2.js';import {Server}from'@modelcontextprotocol/sdk/server/index.js';import {ListToolsRequestSchema,CallToolRequestSchema}from'@modelcontextprotocol/sdk/types.js';import {z}from'zod';import {zodToJsonSchema}from'zod-to-json-schema';var p=new Server({name:"shadcn",version:"0.0.1"},{capabilities:{resources:{},tools:{}}});p.setRequestHandler(ListToolsRequestSchema,async()=>({tools:[{name:"init",description:"Initialize a new project using a registry style project structure.",inputSchema:zodToJsonSchema(z.object({}))},{name:"get_items",description:"List all the available items in the registry",inputSchema:zodToJsonSchema(z.object({}))},{name:"get_item",description:"Get an item from the registry",inputSchema:zodToJsonSchema(z.object({name:z.string().describe("The name of the item to get from the registry. This is required.")}))},{name:"add_item",description:"Add an item from the registry",inputSchema:zodToJsonSchema(z.object({name:z.string().describe("The name of the item to add to the registry. This is required.")}))}]}));p.setRequestHandler(CallToolRequestSchema,async r=>{try{if(!r.params.arguments)throw new Error("Arguments are required");let e=process.env.REGISTRY_URL;if(!e)throw new Error("REGISTRY_URL is not set");switch(r.params.name){case "init":{let t=await u(e),n=t.items.find(a=>a.type==="registry:style"),m="To initialize a new project, run the following command:\n ```bash\n npx shadcn@canary init\n ```\n - This will install all the dependencies and theme for the project.\n - If running the init command installs a rules i.e registry.mdc file, you should follow the instructions in the file to configure the project.\n ",l=t.items.find(a=>a.type==="registry:file"&&a.name==="rules");return l&&(m+=`
2
+ You should also install the rules for the project.
3
+ \`\`\`bash
4
+ npx shadcn@canary add ${s(l.name,e)}
5
+ \`\`\`
6
+ `),n?{content:[{type:"text",text:`To initialize a new project using the ${n.name} style, run the following command:
7
+ \`\`\`bash
8
+ npx shadcn@canary init ${s(n.name,e)}
9
+ \`\`\`
10
+ `}]}:{content:[{type:"text",text:m}]}}case "get_items":{let t=await u(e);return t.items?{content:[{type:"text",text:`The following items are available in the registry:
11
+ ${JSON.stringify(t.items.map(n=>`- ${n.name} (${n.type}): ${n.description}`),null,2)}.
12
+ - To install and use an item in your project, you run the following command:
13
+ \`\`\`bash
14
+ npx shadcn@canary add ${s("NAME_OF_THE_ITEM",e)}
15
+ \`\`\`
16
+ - Example: npx shadcn@canary add ${s(t.items[0].name,e)} to install the ${t.items[0].name} item.
17
+ - To install multiple registry.items, you can do the following:
18
+ \`\`\`bash
19
+ npx shadcn@canary add ${s("NAME_OF_THE_ITEM_1",e)} ${s("NAME_OF_THE_ITEM_2",e)}
20
+ \`\`\`
21
+ - Before using any item, you need to add it first.
22
+ - Adding the items will install all dependencies for the item and format the code as per the project.
23
+ - Example components should not be installed directly unless asked. These components should be used as a reference to build other components.
24
+ `}]}:{content:[{type:"text",text:"No items found in the registry"}]}}case "get_item":{let t=z.string().parse(r.params.arguments.name);if(!t)throw new Error("Name is required");let[n]=await W([t],{useCache:!1});return {content:[{type:"text",text:JSON.stringify(n,null,2)}]}}case "add_item":{let t=z.string().parse(r.params.arguments.name);if(!t)throw new Error("Name is required");let n=s(t,e);return await W([n],{useCache:!1})?{content:[{type:"text",text:`To install the ${t} item, run the following command:
25
+ \`\`\`bash
26
+ npx shadcn@canary add ${n}
27
+ \`\`\``}]}:{content:[{type:"text",text:`Item ${t} not found in the registry.`}]}}default:throw new Error(`Tool ${r.params.name} not found`)}}catch(e){throw e instanceof z.ZodError?new Error(`Invalid input: ${JSON.stringify(e.errors)}`):e}});async function u(r){let[e]=await P([r],{useCache:false});return h.parse(e)}function s(r,e){return `${e.replace(/\/registry\.json$/,"")}/${r}.json`}export{p as a};//# sourceMappingURL=chunk-EFL5XRI2.js.map
28
+ //# sourceMappingURL=chunk-EFL5XRI2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/mcp/index.ts"],"names":["server","Server","ListToolsRequestSchema","zodToJsonSchema","z","CallToolRequestSchema","request","REGISTRY_URL","registry","getRegistry","style","item","text","rules","getRegistryItemUrl","name","getRegistryItems","itemUrl","error","registryUrl","registryJson","fetchRegistry","registrySchema","itemName"],"mappings":"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","file":"chunk-EFL5XRI2.js","sourcesContent":["import { getRegistryItems } from \"@/src/registry/api\"\nimport { fetchRegistry } from \"@/src/registry/fetcher\"\nimport { registrySchema } from \"@/src/schema\"\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\"\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\"\nimport { z } from \"zod\"\nimport { zodToJsonSchema } from \"zod-to-json-schema\"\n\nexport const server = new Server(\n {\n name: \"shadcn\",\n version: \"0.0.1\",\n },\n {\n capabilities: {\n resources: {},\n tools: {},\n },\n }\n)\n\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: [\n {\n name: \"init\",\n description:\n \"Initialize a new project using a registry style project structure.\",\n inputSchema: zodToJsonSchema(z.object({})),\n },\n {\n name: \"get_items\",\n description: \"List all the available items in the registry\",\n inputSchema: zodToJsonSchema(z.object({})),\n },\n {\n name: \"get_item\",\n description: \"Get an item from the registry\",\n inputSchema: zodToJsonSchema(\n z.object({\n name: z\n .string()\n .describe(\n \"The name of the item to get from the registry. This is required.\"\n ),\n })\n ),\n },\n {\n name: \"add_item\",\n description: \"Add an item from the registry\",\n inputSchema: zodToJsonSchema(\n z.object({\n name: z\n .string()\n .describe(\n \"The name of the item to add to the registry. This is required.\"\n ),\n })\n ),\n },\n ],\n }\n})\n\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n try {\n if (!request.params.arguments) {\n throw new Error(\"Arguments are required\")\n }\n\n const REGISTRY_URL = process.env.REGISTRY_URL\n\n if (!REGISTRY_URL) {\n throw new Error(\"REGISTRY_URL is not set\")\n }\n\n switch (request.params.name) {\n case \"init\": {\n const registry = await getRegistry(REGISTRY_URL)\n const style = registry.items.find(\n (item) => item.type === \"registry:style\"\n )\n\n let text = `To initialize a new project, run the following command:\n \\`\\`\\`bash\n npx shadcn@canary init\n \\`\\`\\`\n - This will install all the dependencies and theme for the project.\n - If running the init command installs a rules i.e registry.mdc file, you should follow the instructions in the file to configure the project.\n `\n\n const rules = registry.items.find(\n (item) => item.type === \"registry:file\" && item.name === \"rules\"\n )\n\n if (rules) {\n text += `\n You should also install the rules for the project.\n \\`\\`\\`bash\n npx shadcn@canary add ${getRegistryItemUrl(\n rules.name,\n REGISTRY_URL\n )}\n \\`\\`\\`\n `\n }\n\n if (!style) {\n return {\n content: [\n {\n type: \"text\",\n text,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: `To initialize a new project using the ${\n style.name\n } style, run the following command:\n \\`\\`\\`bash\n npx shadcn@canary init ${getRegistryItemUrl(\n style.name,\n REGISTRY_URL\n )}\n \\`\\`\\`\n `,\n },\n ],\n }\n }\n case \"get_items\": {\n const registry = await getRegistry(REGISTRY_URL)\n\n if (!registry.items) {\n return {\n content: [\n {\n type: \"text\",\n text: \"No items found in the registry\",\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: `The following items are available in the registry:\n ${JSON.stringify(\n registry.items.map(\n (item) => `- ${item.name} (${item.type}): ${item.description}`\n ),\n null,\n 2\n )}.\n - To install and use an item in your project, you run the following command:\n \\`\\`\\`bash\n npx shadcn@canary add ${getRegistryItemUrl(\n \"NAME_OF_THE_ITEM\",\n REGISTRY_URL\n )}\n \\`\\`\\`\n - Example: npx shadcn@canary add ${getRegistryItemUrl(\n registry.items[0].name,\n REGISTRY_URL\n )} to install the ${registry.items[0].name} item.\n - To install multiple registry.items, you can do the following:\n \\`\\`\\`bash\n npx shadcn@canary add ${getRegistryItemUrl(\n \"NAME_OF_THE_ITEM_1\",\n REGISTRY_URL\n )} ${getRegistryItemUrl(\"NAME_OF_THE_ITEM_2\", REGISTRY_URL)}\n \\`\\`\\`\n - Before using any item, you need to add it first.\n - Adding the items will install all dependencies for the item and format the code as per the project.\n - Example components should not be installed directly unless asked. These components should be used as a reference to build other components.\n `,\n },\n ],\n }\n }\n\n case \"get_item\": {\n const name = z.string().parse(request.params.arguments.name)\n\n if (!name) {\n throw new Error(\"Name is required\")\n }\n\n const [item] = await getRegistryItems([name], {\n useCache: false,\n })\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(item, null, 2) }],\n }\n }\n\n case \"add_item\": {\n const name = z.string().parse(request.params.arguments.name)\n\n if (!name) {\n throw new Error(\"Name is required\")\n }\n\n const itemUrl = getRegistryItemUrl(name, REGISTRY_URL)\n const item = await getRegistryItems([itemUrl], {\n useCache: false,\n })\n\n if (!item) {\n return {\n content: [\n {\n type: \"text\",\n text: `Item ${name} not found in the registry.`,\n },\n ],\n }\n }\n return {\n content: [\n {\n type: \"text\",\n text: `To install the ${name} item, run the following command:\n \\`\\`\\`bash\n npx shadcn@canary add ${itemUrl}\n \\`\\`\\``,\n },\n ],\n }\n }\n default:\n throw new Error(`Tool ${request.params.name} not found`)\n }\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw new Error(`Invalid input: ${JSON.stringify(error.errors)}`)\n }\n\n throw error\n }\n})\n\nasync function getRegistry(registryUrl: string) {\n const [registryJson] = await fetchRegistry([registryUrl], {\n useCache: false,\n })\n return registrySchema.parse(registryJson)\n}\n\nfunction getRegistryItemUrl(itemName: string, registryUrl: string) {\n const registryBaseUrl = registryUrl.replace(/\\/registry\\.json$/, \"\")\n return `${registryBaseUrl}/${itemName}.json`\n}\n"]}
@@ -0,0 +1,30 @@
1
+ import {g,q as q$1,p,r,m,h,o,i,j as j$1,k,l,b as b$1}from'./chunk-IFPXTFU2.js';import {z}from'zod';import {promises,existsSync}from'fs';import {tmpdir,homedir}from'os';import*as y from'path';import y__default,{basename}from'path';import*as H from'fs/promises';import {green,cyan,yellow,red}from'kleur/colors';import {loadConfig,createMatchPath}from'tsconfig-paths';import {cosmiconfig}from'cosmiconfig';import je from'fast-glob';import ke from'fs-extra';import re from'deepmerge';import {createHash}from'crypto';import Er from'ora';import Sr from'stringify-object';import {Project,SyntaxKind,ScriptKind,QuoteKind}from'ts-morph';import {transformFromAstSync}from'@babel/core';import {parse}from'@babel/parser';import Yr from'@babel/plugin-transform-typescript';import*as We from'recast';import as from'prompts';import {HttpsProxyAgent}from'https-proxy-agent';import Ns from'node-fetch';var F={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"},P=class extends Error{code;statusCode;context;suggestion;timestamp;cause;constructor(t,r={}){super(t),this.name="RegistryError",this.code=r.code||F.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 P{constructor(r,s){let n=`The item at ${r} was not found. It may not exist at the registry.`;super(n,{code:F.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";}},we=class extends P{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:F.UNAUTHORIZED,statusCode:401,cause:s,context:{url:r},suggestion:"Check your authentication credentials and environment variables."});this.url=r;this.name="RegistryUnauthorizedError";}},ve=class extends P{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:F.FORBIDDEN,statusCode:403,cause:s,context:{url:r},suggestion:"Check your authentication credentials and environment variables."});this.url=r;this.name="RegistryForbiddenError";}},Ee=class extends P{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,c="Check your network connection and try again.";s===404?c="The requested resource was not found. Check the URL or item name.":s===500?c="The registry server encountered an error. Try again later.":s&&s>=400&&s<500&&(c="There was a client error. Check your request parameters.");super(a,{code:F.FETCH_ERROR,statusCode:s,cause:i,context:{url:r,responseBody:n},suggestion:c});this.url=r;this.responseBody=n;this.name="RegistryFetchError";}},J=class extends P{constructor(r){let s=r?`Unknown registry "${r}". Make sure it is defined in components.json as follows:
2
+ {
3
+ "registries": {
4
+ "${r}": "[URL_TO_REGISTRY]"
5
+ }
6
+ }`:'Unknown registry. Make sure it is defined in components.json under "registries".';super(s,{code:F.NOT_CONFIGURED,context:{registryName:r},suggestion:"Add the registry configuration to your components.json file. Consult the registry documentation for the correct format."});this.registryName=r;this.name="RegistryNotConfiguredError";}},ae=class extends P{constructor(r,s){super(`Failed to read local registry file: ${r}`,{code:F.LOCAL_FILE_ERROR,cause:s,context:{filePath:r},suggestion:"Check if the file exists and you have read permissions."});this.filePath=r;this.name="RegistryLocalFileError";}},A=class extends P{constructor(r,s){let n=`Failed to parse registry item: ${r}`;s instanceof z.ZodError&&(n=`Failed to parse registry item: ${r}
7
+ ${s.errors.map(i=>` - ${i.path.join(".")}: ${i.message}`).join(`
8
+ `)}`);super(n,{code:F.PARSE_ERROR,cause:s,context:{item:r},suggestion:"The registry item may be corrupted or have an invalid format. Please make sure it returns a valid JSON object. See https://ui.shadcn.com/schema/registry-item.json."});this.item=r;this.parseError=s,this.name="RegistryParseError";}parseError},Ce=class extends P{constructor(r,s){let n=`Registry "${r}" requires the following environment variables:
9
+
10
+ `+s.map(i=>` \u2022 ${i}`).join(`
11
+ `);super(n,{code:F.MISSING_ENV_VARS,context:{registryName:r,missingVars:s},suggestion:"Set the required environment variables to your .env or .env.local file."});this.registryName=r;this.missingVars=s;this.name="RegistryMissingEnvironmentVariablesError";}},Re=class extends P{constructor(r){let s=`Invalid registry namespace: "${r}". Registry names must start with @ (e.g., @shadcn, @v0).`;super(s,{code:F.VALIDATION_ERROR,context:{name:r},suggestion:"Use a valid registry name starting with @ or provide a direct URL to the registry."});this.name=r;this.name="RegistryInvalidNamespaceError";}};var Se=class extends P{constructor(r,s){let n=`Invalid components.json configuration in ${r}.`;s instanceof z.ZodError&&(n=`Invalid components.json configuration in ${r}:
12
+ ${s.errors.map(i=>` - ${i.path.join(".")}: ${i.message}`).join(`
13
+ `)}`);super(n,{code:F.INVALID_CONFIG,cause:s,context:{cwd:r},suggestion:"Check your components.json file for syntax errors or invalid configuration. Run 'npx shadcn@latest init' to regenerate a valid configuration."});this.cwd=r;this.name="ConfigParseError";}};var Je=process.env.REGISTRY_URL??"https://ui.shadcn.com/r",Ie="new-york-v4",ut=[{name:"neutral",label:"Neutral"},{name:"gray",label:"Gray"},{name:"zinc",label:"Zinc"},{name:"stone",label:"Stone"},{name:"slate",label:"Slate"}],K={"@shadcn":`${Je}/styles/{style}/{name}.json`};var Ks=[{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 le(e){return e.replace(/\${(\w+)}/g,(t,r)=>process.env[r]||"")}function ce(e){let t=[],r=/\${(\w+)}/g,s;for(;(s=r.exec(e))!==null;)t.push(s[1]);return t}var Qt=/^(@[a-zA-Z0-9](?:[a-zA-Z0-9-_]*[a-zA-Z0-9])?)\/(.+)$/;function X(e){if(!e.startsWith("@"))return {registry:null,item:e};let t=e.match(Qt);return t?{registry:t[1],item:t[2]}:{registry:null,item:e}}var j={"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 b={error:red,warn:yellow,info:cyan,success:green};async function $(e,t){return createMatchPath(t.absoluteBaseUrl,t.paths)(e,void 0,()=>true,[".ts",".tsx",".jsx",".js",".css"])}var nn="@/components",on="@/lib/utils",an="app/globals.css",ln="tailwind.config.js";var be=cosmiconfig("components",{searchPlaces:["components.json"]});async function Te(e){let t=await ar(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={...K,...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 q$1.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 $(t.aliases.utils,r),components:await $(t.aliases.components,r),ui:t.aliases.ui?await $(t.aliases.ui,r):y__default.resolve(await $(t.aliases.components,r)??e,"ui"),lib:t.aliases.lib?await $(t.aliases.lib,r):y__default.resolve(await $(t.aliases.utils,r)??e,".."),hooks:t.aliases.hooks?await $(t.aliases.hooks,r):y__default.resolve(await $(t.aliases.components,r)??e,"..","hooks")}})}async function ar(e){try{let t=await be.search(e);if(!t)return null;let r=p.parse(t.config);if(r.registries){for(let s of Object.keys(r.registries))if(s in K)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 ${b.info(r)}.`)}}async function cn(e){let t={};for(let s of Object.keys(e.aliases)){if(!cr(s,e))continue;let n=e.resolvedPaths[s],i=await lr(e.resolvedPaths.cwd,n);if(!i){t[s]=e;continue}t[s]=await Te(i);}let r$1=r.safeParse(t);return r$1.success?r$1.data:null}async function lr(e,t){let r=pr(e,t),s=y__default.relative(r,t),i=(await je.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 cr(e,t){return Object.keys(t.resolvedPaths).filter(r=>r!=="utils").includes(e)}function pr(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 ht(e,t){return (await V(e))?.tailwindVersion==="v4"?"new-york-v4":t}function yt(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:{...K}};return e?{...t,...e,resolvedPaths:{...t.resolvedPaths,...e.resolvedPaths||{}},tailwind:{...t.tailwind,...e.tailwind||{}},aliases:{...t.aliases,...e.aliases||{}}}:t}function Ye(e="",t=true){let r=y__default.join(e,"package.json");return ke.readJSONSync(r,{throws:t})}var $e=["**/node_modules/**",".next","public","dist","build"];z.object({compilerOptions:z.object({paths:z.record(z.string().or(z.array(z.string())))})});async function V(e){let[t,r,s,n,i,o,a,c]=await Promise.all([je.glob("**/{next,vite,astro,app}.config.*|gatsby-config.*|composer.json|react-router.config.*",{cwd:e,deep:3,ignore:$e}),ke.pathExists(y__default.resolve(e,"src")),yr(e),ur(e),gr(e),xt(e),hr(e),Ye(e,false)]),p=await ke.pathExists(y__default.resolve(e,`${r?"src/":""}app`)),l={framework:j.manual,isSrcDir:r,isRSC:false,isTsx:s,tailwindConfigFile:n,tailwindCssFile:i,tailwindVersion:o,aliasPrefix:a};if(t.find(f=>f.startsWith("next.config."))?.length)return l.framework=p?j["next-app"]:j["next-pages"],l.isRSC=p,l;if(t.find(f=>f.startsWith("astro.config."))?.length)return l.framework=j.astro,l;if(t.find(f=>f.startsWith("gatsby-config."))?.length)return l.framework=j.gatsby,l;if(t.find(f=>f.startsWith("composer.json"))?.length)return l.framework=j.laravel,l;if(Object.keys(c?.dependencies??{}).find(f=>f.startsWith("@remix-run/")))return l.framework=j.remix,l;if([...Object.keys(c?.dependencies??{}),...Object.keys(c?.devDependencies??{})].find(f=>f.startsWith("@tanstack/react-start")))return l.framework=j["tanstack-start"],l;if(t.find(f=>f.startsWith("react-router.config."))?.length)return l.framework=j["react-router"],l;if(t.find(f=>f.startsWith("vite.config."))?.length)return l.framework=j.vite,l;let g=t.find(f=>f.startsWith("app.config"));return g?.length&&(await ke.readFile(y__default.resolve(e,g),"utf8")).includes("defineConfig")?(l.framework=j.vite,l):(c?.dependencies?.expo&&(l.framework=j.expo),l)}async function xt(e){let[t,r]=await Promise.all([Ye(e,false),Te(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 gr(e){let[t,r]=await Promise.all([je.glob(["**/*.css","**/*.scss"],{cwd:e,deep:5,ignore:$e}),xt(e)]);if(!t.length)return null;for(let n of t){let i=await ke.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 ur(e){let t=await je.glob("tailwind.config.*",{cwd:e,deep:3,ignore:$e});return t.length?t[0]:null}async function hr(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 yr(e){return (await je.glob("tsconfig.*",{cwd:e,deep:1,ignore:$e})).length>0}async function In(e,t=null){let[r,s]=await Promise.all([Te(e),t?Promise.resolve(t):V(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 Oe(e){if(!e.resolvedPaths?.cwd)return "v3";let t=await V(e.resolvedPaths.cwd);return t?.tailwindVersion?t.tailwindVersion:null}function wr(e){return e.style?e.style==="new-york"&&e.tailwind?.config===""?Ie:e.style:Ie}function te(e){let t=yt({style:Ie,registries:K});return e?q$1.parse(re(t,{...e,style:wr(e),registries:{...K,...e.registries}})):t}var Ae={headers:{}};function pe(e){Ae.headers={...Ae.headers,...e};}function wt(e){return Ae.headers[e]||{}}function fe(){Ae.headers={};}var E={error(...e){console.log(b.error(e.join(" ")));},warn(...e){console.log(b.warn(e.join(" ")));},info(...e){console.log(b.info(e.join(" ")));},success(...e){console.log(b.success(e.join(" ")));},log(...e){console.log(e.join(" "));},break(){console.log("");}};function W(e){if(E.break(),E.error("Something went wrong. Please check the error below for more details."),E.error("If the problem persists, please open an issue on GitHub."),E.error(""),typeof e=="string"&&(E.error(e),E.break(),process.exit(1)),e instanceof P&&(e.message&&(E.error(e.cause?"Error:":"Message:"),E.error(e.message)),e.cause&&(E.error(`
14
+ Message:`),E.error(e.cause)),e.suggestion&&(E.error(`
15
+ Suggestion:`),E.error(e.suggestion)),E.break(),process.exit(1)),e instanceof z.ZodError){E.error("Validation failed:");for(let[t,r]of Object.entries(e.flatten().fieldErrors))E.error(`- ${b.info(t)}: ${r}`);E.break(),process.exit(1);}e instanceof Error&&(E.error(e.message),E.break(),process.exit(1)),E.break(),process.exit(1);}function q(e,t){return Er({text:e,isSilent:t?.silent})}async function ti(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=q(`Updating ${b.info(s)}`,{silent:r.silent}).start(),i=await promises.readFile(t.resolvedPaths.tailwindConfig,"utf8"),o=await Tr(i,e,t);await promises.writeFile(t.resolvedPaths.tailwindConfig,o,"utf8"),n?.succeed();}async function Tr(e,t,r){let s=await Et(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=$r(n);return Pr(n,{name:"darkMode",value:"class"},{quoteChar:i}),t.plugins?.forEach(o=>{jr(n,o);}),t.theme&&await kr(n,t.theme),s.getFullText()}function Pr(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 kr(e,t){e.getProperty("theme")||e.addPropertyAssignment({name:"theme",initializer:"{}"}),Qe(e);let s=(e.getPropertyOrThrow("theme")?.asKindOrThrow(SyntaxKind.PropertyAssignment)).getInitializer();if(s?.isKind(SyntaxKind.ObjectLiteralExpression)){let n=s.getText(),i=await Or(n),o=re(i,t,{arrayMerge:(c,p)=>p}),a=Sr(o).replace(/\'\.\.\.(.*)\'/g,"...$1").replace(/\'\"/g,"'").replace(/\"\'/g,"'").replace(/\'\[/g,"[").replace(/\]\'/g,"]").replace(/\'\\\'/g,"'").replace(/\\\'/g,"'").replace(/\\\'\'/g,"'").replace(/\'\'/g,"'");s.replaceWithText(a);}Xe(e);}function jr(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 Et(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 $r(e){return e.getFirstDescendantByKind(SyntaxKind.StringLiteral)?.getQuoteKind()===QuoteKind.Single?"'":'"'}function Qe(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)?Qe(i.asKindOrThrow(SyntaxKind.ObjectLiteralExpression)):i&&i.isKind(SyntaxKind.ArrayLiteralExpression)&&Ct(i.asKindOrThrow(SyntaxKind.ArrayLiteralExpression));}}}function Ct(e){let t=e.getElements();for(let r=0;r<t.length;r++){let s=t[r];if(s.isKind(SyntaxKind.ObjectLiteralExpression))Qe(s.asKindOrThrow(SyntaxKind.ObjectLiteralExpression));else if(s.isKind(SyntaxKind.ArrayLiteralExpression))Ct(s.asKindOrThrow(SyntaxKind.ArrayLiteralExpression));else if(s.isKind(SyntaxKind.SpreadElement)){let n=s.getText();e.removeElement(r),e.insertElement(r,`"${n}"`);}}}function Xe(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)?Xe(i):i&&i.isKind(SyntaxKind.ArrayLiteralExpression)&&Rt(i.asKindOrThrow(SyntaxKind.ArrayLiteralExpression));}}}function Rt(e){let t=e.getElements();for(let r=0;r<t.length;r++){let s=t[r];if(s.isKind(SyntaxKind.ObjectLiteralExpression))Xe(s.asKindOrThrow(SyntaxKind.ObjectLiteralExpression));else if(s.isKind(SyntaxKind.ArrayLiteralExpression))Rt(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 Or(e){let r=(await Et(`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 Fe(n)}throw new Error("Invalid input: not an object literal")}function Fe(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]=Fe(r.getInitializer()):r.getInitializer()?.isKind(SyntaxKind.ArrayLiteralExpression)?t[s]=St(r.getInitializer()):t[s]=et(r.getInitializer());}return t}function St(e){let t=[];for(let r of e.getElements())r.isKind(SyntaxKind.ObjectLiteralExpression)?t.push(Fe(r.asKindOrThrow(SyntaxKind.ObjectLiteralExpression))):r.isKind(SyntaxKind.ArrayLiteralExpression)?t.push(St(r.asKindOrThrow(SyntaxKind.ArrayLiteralExpression))):t.push(et(r));return t}function et(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(et);case SyntaxKind.ObjectLiteralExpression:return Fe(e);default:return e.getText()}}function It(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 de(e,t){let r={},s=[...e];if(!t?.registries)return pe({}),s;for(let n=0;n<s.length;n++){let i=se(s[n],t);i&&(s[n]=i.url,Object.keys(i.headers).length>0&&(r[i.url]=i.headers));}return pe(r),s}async function Y(e,t,r={}){return await Promise.all(e.map(async n=>{if(Le(n))return Pt(n);if(N(n)){let[a]=await O([n],r);try{return g.parse(a)}catch(c){throw new A(n,c)}}if(n.startsWith("@")&&t?.registries){let a=de([n],t),[c]=await O(a,r);try{return g.parse(c)}catch(p){throw new A(n,p)}}let i=`styles/${t?.style??"new-york-v4"}/${n}.json`,[o]=await O([i],r);try{return g.parse(o)}catch(a){throw new A(n,a)}}))}g.extend({_source:z.string().optional()});async function jt(e,t,r={}){try{r={useCache:!0,...r};let s=[],n=[],i=[],o=Array.from(new Set(e)),a=await Y(o,t,r),c=new Map;for(let m=0;m<a.length;m++)a[m]&&c.set(o[m],a[m]);for(let[m,v]of Array.from(c.entries())){let R={...v,_source:m};if(s.push(R),v.registryDependencies){let x=v.registryDependencies;if(t?.registries)x=de(v.registryDependencies,t);else {let G=v.registryDependencies.filter(D=>D.startsWith("@"));if(G.length>0){let{registry:D}=X(G[0]);throw new J(D)}}let{items:T,registryNames:k}=await ge(x,t,r,new Set(o));n.push(...T),i.push(...k);}}if(s.push(...n),i.length>0){let m=Array.from(new Set(i)),v=m.filter(x=>!x.startsWith("@")),R=m.filter(x=>x.startsWith("@"));if(R.length>0){let x=await Y(R,t,r);for(let T=0;T<x.length;T++){let G={...x[T],_source:R[T]};s.push(G);}}if(v.length>0){let x=await $t();if(!x&&s.length===0)return null;if(x){v.includes("index")&&v.unshift("index");let T=[];for(let oe of v){let he=await Fr(oe,t,r);T.push(...he);}let k=Array.from(new Set(T)),G=await O(k,r),D=z.array(g).parse(G);s.push(...D);}}}if(!s.length)return null;if((o.includes("index")||i.includes("index"))&&t.tailwind.baseColor){let m=await Lr(t.tailwind.baseColor,t);m&&s.unshift(m);}let p=new Map;s.forEach(m=>{let v=m._source||m.name;p.set(m,v);}),s=Dr(s,p),s.sort((m,v)=>m.type==="registry:theme"&&v.type!=="registry:theme"?-1:m.type!=="registry:theme"&&v.type==="registry:theme"?1:0);let l={};s.forEach(m=>{l=re(l,m.tailwind??{});});let g$1={};s.forEach(m=>{g$1=re(g$1,m.cssVars??{});});let f={};s.forEach(m=>{f=re(f,m.css??{});});let w="";s.forEach(m=>{m.docs&&(w+=`${m.docs}
16
+ `);});let u={};s.forEach(m=>{u=re(u,m.envVars??{});});let h=await Tt(s.map(m=>m.files??[]),t),C=m.parse({dependencies:re.all(s.map(m=>m.dependencies??[])),devDependencies:re.all(s.map(m=>m.devDependencies??[])),files:h,tailwind:l,cssVars:g$1,css:f,docs:w});return Object.keys(u).length>0&&(C.envVars=u),C}catch(s){return W(s),null}}async function ge(e,t,r={},s=new Set){let n=[],i=[];for(let o of e)if(!s.has(o)){if(s.add(o),N(o)||Le(o)){let[a]=await Y([o],t,r);if(a&&(n.push(a),a.registryDependencies)){let c=t?.registries?de(a.registryDependencies,t):a.registryDependencies,p=await ge(c,t,r,s);n.push(...p.items),i.push(...p.registryNames);}}else if(o.startsWith("@")&&t?.registries){let{registry:a}=X(o);if(a&&!(a in t.registries))throw new J(a);let[c]=await Y([o],t,r);if(c&&(n.push(c),c.registryDependencies)){let p=t?.registries?de(c.registryDependencies,t):c.registryDependencies,l=await ge(p,t,r,s);n.push(...l.items),i.push(...l.registryNames);}}else if(i.push(o),t)try{let[a]=await Y([o],t,r);if(a&&a.registryDependencies){let c=t?.registries?de(a.registryDependencies,t):a.registryDependencies,p=await ge(c,t,r,s);n.push(...p.items),i.push(...p.registryNames);}}catch{}}return {items:n,registryNames:i}}async function Fr(e,t,r={}){if(N(e))return [e];let{registryNames:s}=await ge([e],t,r,new Set),n=t.resolvedPaths?.cwd?await ht(t.resolvedPaths.cwd,t.style):t.style,i=s.map(o=>Ne(N(o)?o:`styles/${n}/${o}.json`));return Array.from(new Set(i))}async function Lr(e,t){let[r,s]=await Promise.all([De(e),Oe(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,...It(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 U(e,t){let r=t||e.name,s=createHash("sha256").update(r).digest("hex").substring(0,8);return `${e.name}::${s}`}function Nr(e){if(N(e)){let s=new URL(e).pathname,n=s.match(/\/([^/]+)\.json$/),i=n?n[1]:y__default.basename(s,".json");return {name:i,hash:U({name:i},e)}}if(Le(e)){let r=e.match(/\/([^/]+)\.json$/),s=r?r[1]:y__default.basename(e,".json");return {name:s,hash:U({name:s},e)}}let{item:t}=X(e);return {name:t,hash:U({name:t},e)}}function Dr(e,t){let r=new Map,s=new Map,n=new Map,i=new Map;e.forEach(p=>{let l=t.get(p)||p.name,g=U(p,l);r.set(g,p),s.set(g,p),n.set(g,0),i.set(g,[]);});let o=new Map;e.forEach(p=>{let l=t.get(p)||p.name,g=U(p,l);o.has(p.name)||o.set(p.name,[]),o.get(p.name).push(g),l!==p.name&&(o.has(l)||o.set(l,[]),o.get(l).push(g));}),e.forEach(p=>{let l=t.get(p)||p.name,g=U(p,l);p.registryDependencies&&p.registryDependencies.forEach(f=>{let w,u=o.get(f)||[];if(u.length===1)w=u[0];else if(u.length>1)w=u[0];else {let{name:h}=Nr(f),C=o.get(h)||[];C.length>0&&(w=C[0]);}w&&r.has(w)&&(i.get(w).push(g),n.set(g,n.get(g)+1));});});let a=[],c=[];for(n.forEach((p,l)=>{p===0&&a.push(l);});a.length>0;){let p=a.shift(),l=r.get(p);c.push(l),i.get(p).forEach(g=>{let f=n.get(g)-1;n.set(g,f),f===0&&a.push(g);});}if(c.length!==e.length){console.warn("Circular dependency detected in registry items");let p=new Set(c.map(l=>{let g=t.get(l)||l.name;return U(l,g)}));e.forEach(l=>{let g=t.get(l)||l.name,f=U(l,g);p.has(f)||c.push(l);});}return c}async function _i(e,t){let{config:r,useCache:s}=t||{};if(N(e)){let[a]=await O([e],{useCache:s});try{return h.parse(a)}catch(c){throw new A(e,c)}}if(!e.startsWith("@"))throw new Re(e);let n=e;n.endsWith("/registry")||(n=`${n}/registry`);let i=se(n,te(r));if(!i?.url)throw new Q(n);i.headers&&Object.keys(i.headers).length>0&&pe({[i.url]:i.headers});let[o]=await O([i.url],{useCache:s});try{return h.parse(o)}catch(a){throw new A(n,a)}}async function zi(e,t){let{config:r,useCache:s=false}=t||{};return fe(),Y(e,te(r),{useCache:s})}async function Ki(e,t){let{config:r,useCache:s=false}=t||{};return fe(),jt(e,te(r),{useCache:s})}async function Vi(e,t){let{useCache:r=true}=t||{};r||be.clearCaches();let s=await be.search(e);if(!s)return {registries:K};let n=z.object({registries:o.optional()}).safeParse(s.config);if(!n.success)throw new Se(e,n.error);return {registries:{...K,...n.data.registries||{}}}}async function $t(){try{let[e]=await O(["index.json"]);return i.parse(e)}catch(e){E.error(`
17
+ `),W(e);}}async function Wi(){try{let[e]=await O(["styles/index.json"]);return j$1.parse(e)}catch(e){return E.error(`
18
+ `),W(e),[]}}async function Ot(){try{let[e]=await O(["icons/index.json"]);return k.parse(e)}catch(e){return W(e),{}}}async function Ui(){return ut}async function De(e){try{let[t]=await O([`colors/${e}.json`]);return l.parse(t)}catch(t){W(t);}}async function Kr(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 Kr(e,n.registryDependencies);r.push(...i);}}return r.filter((s,n,i)=>i.findIndex(o=>o.name===s.name)===n)}async function Mi(e,t){try{let r=t.map(n=>`styles/${e}/${n.name}.json`);return (await O(r)).map(n=>g.parse(n))}catch(r){return W(r),[]}}async function Bi(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}function At(e,t,r={}){let{ignoreImports:s=false}=r,n=e.replace(/\r\n/g,`
19
+ `).trim(),i=t.replace(/\r\n/g,`
20
+ `).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,(g,f,w,u)=>{if(w.startsWith("."))return `${f}${w}${u}`;let h=w.split("/"),C=h[h.length-1];return `${f}@normalized/${C}${u}`}),c=a(n),p=a(i);return c===p}function Z(e){let t=y__default.basename(e);return /^\.env(\.|$)/.test(t)}function Lt(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 ne(e){let t=e.split(`
21
+ `),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 Nt(e,t){let r=ne(e),s=ne(t),n=[];for(let i of Object.keys(s))i in r||n.push(i);return n}function Dt(e,t){let r=ne(e),s=ne(t),n=e.trimEnd();n&&!n.endsWith(`
22
+ `)&&(n+=`
23
+ `);let i=[];for(let[o,a]of Object.entries(s))o in r||i.push(`${o}=${a}`);return i.length>0?(n&&(n+=`
24
+ `),n+=i.join(`
25
+ `),n+`
26
+ `):n&&!n.endsWith(`
27
+ `)?n+`
28
+ `:n}var _e=async({sourceFile:e,config:t,baseColor:r})=>(t.tailwind?.cssVariables||!r?.inlineColors||e.getDescendantsOfKind(SyntaxKind.StringLiteral).forEach(s=>{let n=s.getText();if(n){let i=Mr(n.replace(/"/g,""),r.inlineColors);s.replaceWithText(`"${i.trim()}"`);}}),e);function tt(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 Ur=["bg-","text-","border-","ring-offset-","ring-"];function Mr(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,c]=tt(i),p=Ur.find(g=>a?.startsWith(g));if(!p){s.has(i)||s.add(i);continue}let l=a?.replace(p,"");if(l&&l in t.light){s.add([o,`${p}${t.light[l]}`].filter(Boolean).join(":")+(c?`/${c}`:"")),n.add(["dark",o,`${p}${t.dark[l]}`].filter(Boolean).join(":")+(c?`/${c}`:""));continue}s.has(i)||s.add(i);}return [...Array.from(s),...Array.from(n)].join(" ").trim()}var ze={lucide:{name:"lucide-react",package:"lucide-react",import:"lucide-react"},radix:{name:"@radix-ui/react-icons",package:"@radix-ui/react-icons",import:"@radix-ui/react-icons"}};var _t="lucide",Ke=async({sourceFile:e,config:t})=>{if(!t.iconLibrary||!(t.iconLibrary in ze))return e;let r=await Ot(),s=_t,n=t.iconLibrary;if(s===n)return e;let i=[];for(let o of e.getImportDeclarations()??[])if(o.getModuleSpecifier()?.getText()===`"${ze[_t].import}"`){for(let a of o.getNamedImports()??[]){let c=a.getName(),p=r[c]?.[n];!p||i.includes(p)||(i.push(p),a.remove(),e.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement).filter(l=>l.getTagNameNode()?.getText()===c).forEach(l=>l.getTagNameNode()?.replaceWithText(p)));}o.getNamedImports()?.length===0&&o.remove();}if(i.length>0){let o=e.addImportDeclaration({moduleSpecifier:ze[n]?.import,namedImports:i.map(a=>({name:a}))});Hr(e)||o.replaceWithText(o.getText().replace(";",""));}return e};function Hr(e){return e.getImportDeclarations()?.[0]?.getText().endsWith(";")??false}var Ve=async({sourceFile:e,config:t,isRemote:r})=>{let n=`@${t.aliases?.utils?.split("/")[0]?.slice(1)}/lib/utils`,i=e.getImportDeclarations();if(![".tsx",".ts",".jsx",".js"].includes(e.getExtension()))return e;for(let o of i){let a=Gr(o.getModuleSpecifierValue(),t,r);o.setModuleSpecifier(a),(n===a||a==="@/lib/utils")&&o.getNamedImports().find(l=>l.getName()==="cn")&&o.setModuleSpecifier(n===a?a.replace(n,t.aliases.utils):t.aliases.utils);}return e};function Gr(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 Zr={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"]},zt=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let s=We.parse(r,{parser:{parse:i=>parse(i,Zr)}}),n=transformFromAstSync(s,r,{cloneInputAst:false,code:false,ast:true,plugins:[Yr],configFile:false});if(!n||!n.ast)throw new Error("Failed to transform JSX");return We.print(n.ast).code};var Xr=/^["']use client["']$/g,Ue=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(SyntaxKind.ExpressionStatement);return r&&Xr.test(r.getText())&&r.remove(),e};var Me=async({sourceFile:e,config:t})=>{if(!t.tailwind?.prefix)return e;let r=await Oe(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]=tt(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 ns=new Project({compilerOptions:{}});async function is(e){let t=await promises.mkdtemp(y__default.join(tmpdir(),"shadcn-"));return y__default.join(t,e)}async function Vt(e,t=[Ve,Ue,_e,Me,Ke]){let r=await is(e.filename),s=ns.createSourceFile(r,e.raw,{scriptKind:ScriptKind.TSX});for(let n of t)await n({sourceFile:s,...e});return e.transformJsx?await zt({sourceFile:s,...e}):s.getText()}async function Qo(e,t,r){if(!e?.length)return {filesCreated:[],filesUpdated:[],filesSkipped:[]};r={overwrite:false,force:false,silent:false,isRemote:false,isWorkspace:false,...r};let s=q("Updating files.",{silent:r.silent})?.start(),[n,i]=await Promise.all([V(t.resolvedPaths.cwd),t.tailwind.baseColor?De(t.tailwind.baseColor):Promise.resolve(void 0)]),o=[],a=[],c=[],p=[],l=null;for(let u of e){if(!u.content)continue;let h=rt(u,t,{isSrcDir:n?.isSrcDir,framework:n?.framework.name,commonRoot:st(e.map(x=>x.path),u.path)});if(!h)continue;let C=basename(u.path),m=y__default.dirname(h);if(t.tsx||(h=h.replace(/\.tsx?$/,x=>x===".tsx"?".jsx":".js")),Z(h)&&!existsSync(h)){let x=Lt(m);x&&(h=x);}let v=existsSync(h),R=Z(h)?u.content:await Vt({filename:u.path,raw:u.content,config:t,baseColor:i,transformJsx:!t.tsx,isRemote:r.isRemote},[Ve,Ue,_e,Me,Ke]);if(v&&!Z(h)){let x=await promises.readFile(h,"utf-8");if(At(x,R,{ignoreImports:r.isWorkspace})){c.push(y__default.relative(t.resolvedPaths.cwd,h));continue}}if(v&&!r.overwrite&&!Z(h)){s.stop(),r.rootSpinner&&r.rootSpinner.stop();let{overwrite:x}=await as({type:"confirm",name:"overwrite",message:`The file ${b.info(C)} already exists. Would you like to overwrite?`,initial:false});if(!x){c.push(y__default.relative(t.resolvedPaths.cwd,h)),r.rootSpinner&&r.rootSpinner.start();continue}s?.start(),r.rootSpinner&&r.rootSpinner.start();}if(existsSync(m)||await promises.mkdir(m,{recursive:true}),Z(h)&&v){let x=await promises.readFile(h,"utf-8"),T=Dt(x,R);if(p=Nt(x,R),l=y__default.relative(t.resolvedPaths.cwd,h),!p.length){c.push(y__default.relative(t.resolvedPaths.cwd,h));continue}await promises.writeFile(h,T,"utf-8"),a.push(y__default.relative(t.resolvedPaths.cwd,h));continue}await promises.writeFile(h,R,"utf-8"),v?a.push(y__default.relative(t.resolvedPaths.cwd,h)):(o.push(y__default.relative(t.resolvedPaths.cwd,h)),Z(h)&&(p=Object.keys(ne(R)),l=y__default.relative(t.resolvedPaths.cwd,h)));}let g=[...o,...a,...c],f=await gs(g,t);if(a.push(...f),a=a.filter(u=>!o.includes(u)),!(o.length||a.length)&&!c.length&&s?.info("No files updated."),o=Array.from(new Set(o)),a=Array.from(new Set(a)),c=Array.from(new Set(c)),o.length){if(s?.succeed(`Created ${o.length} ${o.length===1?"file":"files"}:`),!r.silent)for(let u of o)E.log(` - ${u}`);}else s?.stop();if(a.length&&(q(`Updated ${a.length} ${a.length===1?"file":"files"}:`,{silent:r.silent})?.info(),!r.silent))for(let u of a)E.log(` - ${u}`);if(c.length&&(q(`Skipped ${c.length} ${a.length===1?"file":"files"}: (files might be identical, use --overwrite to overwrite)`,{silent:r.silent})?.info(),!r.silent))for(let u of c)E.log(` - ${u}`);if(p.length&&l&&(q(`Added the following variables to ${b.info(l)}:`)?.info(),!r.silent))for(let u of p)E.log(` ${b.success("+")} ${u}`);return r.silent||E.break(),{filesCreated:o,filesUpdated:a,filesSkipped:c}}function rt(e,t,r){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=ds(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=fs(e,t),n=ms(e.path,s);return y__default.join(s,n)}function fs(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 st(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(p=>p!==s&&p.startsWith(a+"/")))return "/"+a}return "/"+n}function ms(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(c=>c===o);return a===-1?n[n.length-1]:n.slice(a+1).join("/")}function ds(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 gs(e,t){let r=new Project({compilerOptions:{}}),s=await V(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 c=await promises.readFile(a,"utf-8"),p=await promises.mkdtemp(y__default.join(tmpdir(),"shadcn-")),l=r.createSourceFile(y__default.join(p,basename(a)),c,{scriptKind:ScriptKind.TSX});if(![".tsx",".ts",".jsx",".js"].includes(l.getExtension()))continue;let g=l.getImportDeclarations();for(let f of g){let w=f.getModuleSpecifierValue();if(s?.aliasPrefix&&!w.startsWith(`${s.aliasPrefix}/`))continue;let u=await $(w,n);if(!u)continue;let h=us(u,e,t);if(!h)continue;let C=hs(h,t,s);!C||C===w||(f.setModuleSpecifier(C),await promises.writeFile(a,l.getFullText(),"utf-8"),i.push(o));}}return i}function us(e,t,r,s=[".tsx",".ts",".js",".jsx",".css"]){let n=y__default.normalize(r.resolvedPaths.cwd),i=t.map(C=>C.split(y__default.sep).join(y__default.posix.sep)),o=new Set(i),a=y__default.extname(e),c=a!=="",p=c?e.slice(0,-a.length):e,g=y__default.relative(n,p).split(y__default.sep).join(y__default.posix.sep),f=c?[a]:s,w=new Set;for(let C of f){let m=p+C,v=y__default.posix.normalize(y__default.relative(n,m));(o.has(v)||existsSync(m))&&w.add(v);let R=y__default.join(p,`index${C}`),x=y__default.posix.normalize(y__default.relative(n,R));(o.has(x)||existsSync(R))&&w.add(x);}let u=y__default.basename(p);for(let C of i)f.some(m=>C.endsWith(`/${u}${m}`))&&w.add(C);return w.size===0?null:Array.from(w).sort((C,m)=>{let v=y__default.posix.extname(C),R=y__default.posix.extname(m),x=f.indexOf(v)-f.indexOf(R);if(x!==0)return x;let T=g&&C.startsWith(g)?-1:1,k=g&&m.startsWith(g)?-1:1;return T-k})[0]}function hs(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,h)=>h[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 c=y__default.posix.extname(a),l=[".ts",".tsx",".js",".jsx"].includes(c)?"":c,g=a.slice(0,a.length-c.length);g.endsWith("/index")&&(g=g.slice(0,-6));let f=i==="cwd"?r.aliasPrefix:t.aliases[i];if(!f)return null;let w=g===""?"":`/${g}`;return w=w.replace("/src",""),`${f}${w}${l}`}var Mt=[".tsx",".ts",".jsx",".js",".css"],Bt=["lib/utils.ts"],Es=[/^(react|react-dom|next)(\/.*)?$/,/^(node|jsr|npm):.*$/],Cs=new Project({compilerOptions:{}});function Rs(e){if(Es.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 Ss(e,t,r,s=new Set){let n=y.resolve(t.resolvedPaths.cwd,e),i=y.relative(t.resolvedPaths.cwd,n);if(Bt.includes(i))return {dependencies:[],files:[]};let o=y.extname(e);if(!Mt.includes(o))return {dependencies:[],files:[]};if(s.has(i))return {dependencies:[],files:[]};if(s.add(i),!(await H.stat(n)).isFile())return {dependencies:[],files:[]};let c=await H.readFile(n,"utf-8"),p=await Is(y.basename(n)),l=Cs.createSourceFile(p,c,{scriptKind:ScriptKind.TSX}),g=await loadConfig(t.resolvedPaths.cwd);if(g.resultType==="failed")return {dependencies:[],files:[]};let f=[],w=new Set,u=Ht(e),h={path:i,type:u,target:""};f.push(h);let C=l.getImportDeclarations();for(let v of C){let R=v.getModuleSpecifierValue(),x=R.startsWith(".");if(!R.startsWith(`${r.aliasPrefix}/`)&&!x){let _=Rs(R);_&&w.add(_);continue}let k=await $(R,g);if(x&&(k=y.resolve(y.dirname(n),R)),!k)continue;if(!y.extname(k))for(let _ of Mt){let it=`${k}${_}`;try{await H.access(it),k=it;break}catch{continue}}let D=y.relative(t.resolvedPaths.cwd,k);if(s.has(D)||Bt.includes(D))continue;let oe=Ht(R),he={path:D,type:oe,target:""};(oe==="registry:page"||oe==="registry:file")&&(he.target=R),f.push(he);let ye=await Ss(D,t,r,s);if(ye.files)for(let _ of ye.files)s.has(_.path)||(s.add(_.path),f.push(_));ye.dependencies&&ye.dependencies.forEach(_=>w.add(_));}let m=Array.from(new Map(f.map(v=>[v.path,v])).values());return {dependencies:Array.from(w),files:m}}async function Is(e){let t=await H.mkdtemp(y.join(tmpdir(),"shadcn-"));return y.join(t,e)}function Ht(e){return e.includes("/ui/")?"registry:ui":e.includes("/lib/")?"registry:lib":e.includes("/hooks/")?"registry:hook":(e.includes("/components/"),"registry:component")}function N(e){try{return new URL(e),!0}catch{return false}}function Le(e){return e.endsWith(".json")&&!N(e)}function fa(e){return !!e?.files?.length&&e.files.every(t=>!!t.target&&(t.type==="registry:file"||t.type==="registry:item"))}async function Tt(e,t){if(!bs(t))return z.array(b$1).parse(e.flat().filter(Boolean));let r=await V(t.resolvedPaths.cwd),s=new Map,n=z.array(b$1).parse(e.flat().filter(Boolean));return n.forEach(i=>{let o=rt(i,t,{isSrcDir:r?.isSrcDir,framework:r?.framework.name,commonRoot:st(n.map(a=>a.path),i.path)});o&&s.set(o,i);}),Array.from(s.values())}function bs(e){return !!(e?.resolvedPaths?.cwd&&(e?.resolvedPaths?.ui||e?.resolvedPaths?.lib||e?.resolvedPaths?.components||e?.resolvedPaths?.hooks))}function Ts(e){let t=new Set;return typeof e=="string"?ce(e).forEach(r=>t.add(r)):(ce(e.url).forEach(r=>t.add(r)),e.params&&Object.values(e.params).forEach(r=>{ce(r).forEach(s=>t.add(s));}),e.headers&&Object.values(e.headers).forEach(r=>{ce(r).forEach(s=>t.add(s));})),Array.from(t)}function Gt(e,t){let s=Ts(t).filter(n=>!process.env[n]);if(s.length>0)throw new Ce(e,s)}function xa(e,t){for(let r of e)se(r,te(t));fe();}var Jt="{name}",Be="{style}",qt=/\${(\w+)}/g,Yt="?",Ps="&";function se(e,t){let{registry:r,item:s}=X(e);if(!r)return null;let i=(t?.registries||{})[r];if(!i)throw new J(r);return Gt(r,i),{url:ks(s,i,t),headers:js(i)}}function ks(e,t,r){if(typeof t=="string"){let n=t.replace(Jt,e);return r?.style&&n.includes(Be)&&(n=n.replace(Be,r.style)),le(n)}let s=t.url.replace(Jt,e);return r?.style&&s.includes(Be)&&(s=s.replace(Be,r.style)),s=le(s),t.params?$s(s,t.params):s}function js(e){if(typeof e=="string"||!e.headers)return {};let t={};for(let[r,s]of Object.entries(e.headers)){let n=le(s);Os(s,n)&&(t[r]=n);}return t}function $s(e,t){let r=new URLSearchParams;for(let[i,o]of Object.entries(t)){let a=le(o);a&&r.append(i,a);}let s=r.toString();if(!s)return e;let n=e.includes(Yt)?Ps:Yt;return `${e}${n}${s}`}function Os(e,t){let r=t.trim();if(!r)return false;if(e.includes("${")&&e.match(qt)){let n=e.replace(qt,"").trim();return r!==n}return true}function Ne(e){if(N(e)){let t=new URL(e);return t.pathname.match(/\/chat\/b\//)&&!t.pathname.endsWith("/json")&&(t.pathname=`${t.pathname}/json`),t.toString()}return `${Je}/${e}`}var Ds=process.env.https_proxy?new HttpsProxyAgent(process.env.https_proxy):void 0,nt=new Map;async function O(e,t={}){t={useCache:true,...t};try{return await Promise.all(e.map(async s=>{let n=Ne(s);if(t.useCache&&nt.has(n))return nt.get(n);let i=(async()=>{let o=wt(n),a=await Ns(n,{agent:Ds,headers:{...o}});if(!a.ok){let c;if(a.headers.get("content-type")?.includes("application/json")){let p=await a.json(),l=z.object({detail:z.string().optional(),title:z.string().optional(),message:z.string().optional(),error:z.string().optional()}).safeParse(p);l.success&&(c=l.data.detail||l.data.message,l.data.error&&(c=`[${l.data.error}] ${c}`));}throw a.status===401?new we(n,c):a.status===404?new Q(n,c):a.status===403?new ve(n,c):new Ee(n,a.status,c)}return a.json()})();return t.useCache&&nt.set(n,i),i}))}catch(r){throw r}}async function Pt(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=JSON.parse(s);try{return g.parse(n)}catch(i){throw new A(e,i)}}catch(t){throw t instanceof Error&&(t.message.includes("ENOENT")||t.message.includes("no such file"))?new ae(e,t):t instanceof A?t:new ae(e,t)}}
29
+ export{Ot as $,A,Ce as B,Re as C,Lt as D,Nt as E,Dt as F,ze as G,Vt as H,Qo as I,Ss as J,fa as K,te as L,fe as M,xa as N,se as O,O as P,W as Q,ti as R,Et as S,$r as T,jt as U,_i as V,zi as W,Ki as X,Vi as Y,$t as Z,Wi as _,ut as a,Ui as aa,Ks as b,De as ba,b as c,Kr as ca,nn as d,Mi as da,on as e,Bi as ea,an as f,ln as g,Te as h,qe as i,cn as j,lr as k,pr as l,yt as m,Ye as n,V as o,In as p,Oe as q,E as r,q as s,P as t,Q as u,we as v,ve as w,Ee as x,J as y,ae as z};//# sourceMappingURL=chunk-HDFND2B4.js.map
30
+ //# sourceMappingURL=chunk-HDFND2B4.js.map