shadcn 0.0.0-beta.c0efd56 → 0.0.0-beta.c5ec5dfb
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-63V2EG63.js +28 -0
- package/dist/chunk-63V2EG63.js.map +1 -0
- package/dist/chunk-IFPXTFU2.js +2 -0
- package/dist/chunk-IFPXTFU2.js.map +1 -0
- package/dist/chunk-POBJQ5RI.js +3 -0
- package/dist/chunk-POBJQ5RI.js.map +1 -0
- package/dist/chunk-QEOYSEJM.js +28 -0
- package/dist/chunk-QEOYSEJM.js.map +1 -0
- package/dist/index-BZjCP1y4.d.ts +299 -0
- package/dist/index.d.ts +3 -397
- package/dist/index.js +47 -66
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.d.ts +27 -0
- package/dist/mcp/index.js +2 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/registry/index.d.ts +100 -796
- package/dist/registry/index.js +1 -2
- package/dist/registry/index.js.map +1 -1
- package/dist/schema/index.d.ts +1347 -0
- package/dist/schema/index.js +2 -0
- package/dist/schema/index.js.map +1 -0
- package/package.json +39 -27
- package/dist/chunk-TPDUVJHA.js +0 -7
- package/dist/chunk-TPDUVJHA.js.map +0 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import {W,P}from'./chunk-QEOYSEJM.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-63V2EG63.js.map
|
|
28
|
+
//# sourceMappingURL=chunk-63V2EG63.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-63V2EG63.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,2 @@
|
|
|
1
|
+
import {z}from'zod';var s=z.enum(["registry:lib","registry:block","registry:component","registry:ui","registry:hook","registry:page","registry:file","registry:theme","registry:style","registry:item","registry:example","registry:internal"]),n=z.discriminatedUnion("type",[z.object({path:z.string(),content:z.string().optional(),type:z.enum(["registry:file","registry:page"]),target:z.string()}),z.object({path:z.string(),content:z.string().optional(),type:s.exclude(["registry:file","registry:page"]),target:z.string().optional()})]),o=z.object({config:z.object({content:z.array(z.string()).optional(),theme:z.record(z.string(),z.any()).optional(),plugins:z.array(z.string()).optional()}).optional()}),r=z.object({theme:z.record(z.string(),z.string()).optional(),light:z.record(z.string(),z.string()).optional(),dark:z.record(z.string(),z.string()).optional()}),a=z.record(z.string(),z.lazy(()=>z.union([z.string(),z.record(z.string(),z.union([z.string(),z.record(z.string(),z.string())]))]))),g=z.record(z.string(),z.string()),i=z.object({$schema:z.string().optional(),extends:z.string().optional(),name:z.string(),type:s,title:z.string().optional(),author:z.string().min(2).optional(),description:z.string().optional(),dependencies:z.array(z.string()).optional(),devDependencies:z.array(z.string()).optional(),registryDependencies:z.array(z.string()).optional(),files:z.array(n).optional(),tailwind:o.optional(),cssVars:r.optional(),css:a.optional(),envVars:g.optional(),meta:z.record(z.string(),z.any()).optional(),docs:z.string().optional(),categories:z.array(z.string()).optional()}),d=z.object({name:z.string(),homepage:z.string(),items:z.array(i)}),h=z.array(i),u=z.array(z.object({name:z.string(),label:z.string()})),f=z.record(z.string(),z.record(z.string(),z.string())),x=z.object({inlineColors:z.object({light:z.record(z.string(),z.string()),dark:z.record(z.string(),z.string())}),cssVars:r,cssVarsV4:r.optional(),inlineColorsTemplate:z.string(),cssVarsTemplate:z.string()}),b=i.pick({dependencies:true,devDependencies:true,files:true,tailwind:true,cssVars:true,css:true,envVars:true,docs:true}),c=z.union([z.string().refine(e=>e.includes("{name}"),{message:"Registry URL must include {name} placeholder"}),z.object({url:z.string().refine(e=>e.includes("{name}"),{message:"Registry URL must include {name} placeholder"}),params:z.record(z.string(),z.string()).optional(),headers:z.record(z.string(),z.string()).optional()})]),l=z.record(z.string().refine(e=>e.startsWith("@"),{message:"Registry names must start with @ (e.g., @v0, @acme)"}),c),p=z.object({$schema:z.string().optional(),style:z.string(),rsc:z.coerce.boolean().default(false),tsx:z.coerce.boolean().default(true),tailwind:z.object({config:z.string().optional(),css:z.string(),baseColor:z.string(),cssVariables:z.boolean().default(true),prefix:z.string().default("").optional()}),iconLibrary:z.string().optional(),aliases:z.object({components:z.string(),utils:z.string(),ui:z.string().optional(),lib:z.string().optional(),hooks:z.string().optional()}),registries:l.optional()}).strict(),m=p.extend({resolvedPaths:z.object({cwd:z.string(),tailwindConfig:z.string(),tailwindCss:z.string(),utils:z.string(),components:z.string(),lib:z.string(),hooks:z.string(),ui:z.string()})}),S=z.record(m);export{s as a,n as b,o as c,r as d,a as e,g as f,i as g,d as h,h as i,u as j,f as k,x as l,b as m,c as n,l as o,p,m as q,S as r};//# sourceMappingURL=chunk-IFPXTFU2.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-IFPXTFU2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/registry/schema.ts"],"names":["registryItemTypeSchema","z","registryItemFileSchema","registryItemTailwindSchema","registryItemCssVarsSchema","registryItemCssSchema","registryItemEnvVarsSchema","registryItemSchema","registrySchema","registryIndexSchema","stylesSchema","iconsSchema","registryBaseColorSchema","registryResolvedItemsTreeSchema","registryConfigItemSchema","s","registryConfigSchema","key","rawConfigSchema","configSchema","workspaceConfigSchema"],"mappings":"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","file":"chunk-IFPXTFU2.js","sourcesContent":["import { z } from \"zod\"\n\n// Note: if you edit the schema here, you must also edit the schema in the\n// apps/www/public/schema/registry-item.json file.\n\nexport const registryItemTypeSchema = z.enum([\n \"registry:lib\",\n \"registry:block\",\n \"registry:component\",\n \"registry:ui\",\n \"registry:hook\",\n \"registry:page\",\n \"registry:file\",\n \"registry:theme\",\n \"registry:style\",\n \"registry:item\",\n\n // Internal use only\n \"registry:example\",\n \"registry:internal\",\n])\n\nexport const registryItemFileSchema = z.discriminatedUnion(\"type\", [\n // Target is required for registry:file and registry:page\n z.object({\n path: z.string(),\n content: z.string().optional(),\n type: z.enum([\"registry:file\", \"registry:page\"]),\n target: z.string(),\n }),\n z.object({\n path: z.string(),\n content: z.string().optional(),\n type: registryItemTypeSchema.exclude([\"registry:file\", \"registry:page\"]),\n target: z.string().optional(),\n }),\n])\n\nexport const registryItemTailwindSchema = z.object({\n config: z\n .object({\n content: z.array(z.string()).optional(),\n theme: z.record(z.string(), z.any()).optional(),\n plugins: z.array(z.string()).optional(),\n })\n .optional(),\n})\n\nexport const registryItemCssVarsSchema = z.object({\n theme: z.record(z.string(), z.string()).optional(),\n light: z.record(z.string(), z.string()).optional(),\n dark: z.record(z.string(), z.string()).optional(),\n})\n\nexport const registryItemCssSchema = z.record(\n z.string(),\n z.lazy(() =>\n z.union([\n z.string(),\n z.record(\n z.string(),\n z.union([z.string(), z.record(z.string(), z.string())])\n ),\n ])\n )\n)\n\nexport const registryItemEnvVarsSchema = z.record(z.string(), z.string())\n\nexport const registryItemSchema = z.object({\n $schema: z.string().optional(),\n extends: z.string().optional(),\n name: z.string(),\n type: registryItemTypeSchema,\n title: z.string().optional(),\n author: z.string().min(2).optional(),\n description: z.string().optional(),\n dependencies: z.array(z.string()).optional(),\n devDependencies: z.array(z.string()).optional(),\n registryDependencies: z.array(z.string()).optional(),\n files: z.array(registryItemFileSchema).optional(),\n tailwind: registryItemTailwindSchema.optional(),\n cssVars: registryItemCssVarsSchema.optional(),\n css: registryItemCssSchema.optional(),\n envVars: registryItemEnvVarsSchema.optional(),\n meta: z.record(z.string(), z.any()).optional(),\n docs: z.string().optional(),\n categories: z.array(z.string()).optional(),\n})\n\nexport type RegistryItem = z.infer<typeof registryItemSchema>\n\nexport const registrySchema = z.object({\n name: z.string(),\n homepage: z.string(),\n items: z.array(registryItemSchema),\n})\n\nexport type Registry = z.infer<typeof registrySchema>\n\nexport const registryIndexSchema = z.array(registryItemSchema)\n\nexport const stylesSchema = z.array(\n z.object({\n name: z.string(),\n label: z.string(),\n })\n)\n\nexport const iconsSchema = z.record(\n z.string(),\n z.record(z.string(), z.string())\n)\n\nexport const registryBaseColorSchema = z.object({\n inlineColors: z.object({\n light: z.record(z.string(), z.string()),\n dark: z.record(z.string(), z.string()),\n }),\n cssVars: registryItemCssVarsSchema,\n cssVarsV4: registryItemCssVarsSchema.optional(),\n inlineColorsTemplate: z.string(),\n cssVarsTemplate: z.string(),\n})\n\nexport const registryResolvedItemsTreeSchema = registryItemSchema.pick({\n dependencies: true,\n devDependencies: true,\n files: true,\n tailwind: true,\n cssVars: true,\n css: true,\n envVars: true,\n docs: true,\n})\n\nexport const registryConfigItemSchema = z.union([\n // Simple string format: \"https://example.com/{name}.json\"\n z.string().refine((s) => s.includes(\"{name}\"), {\n message: \"Registry URL must include {name} placeholder\",\n }),\n // Advanced object format with auth options\n z.object({\n url: z.string().refine((s) => s.includes(\"{name}\"), {\n message: \"Registry URL must include {name} placeholder\",\n }),\n params: z.record(z.string(), z.string()).optional(),\n headers: z.record(z.string(), z.string()).optional(),\n }),\n])\n\nexport const registryConfigSchema = z.record(\n z.string().refine((key) => key.startsWith(\"@\"), {\n message: \"Registry names must start with @ (e.g., @v0, @acme)\",\n }),\n registryConfigItemSchema\n)\n\nexport const rawConfigSchema = z\n .object({\n $schema: z.string().optional(),\n style: z.string(),\n rsc: z.coerce.boolean().default(false),\n tsx: z.coerce.boolean().default(true),\n tailwind: z.object({\n config: z.string().optional(),\n css: z.string(),\n baseColor: z.string(),\n cssVariables: z.boolean().default(true),\n prefix: z.string().default(\"\").optional(),\n }),\n iconLibrary: z.string().optional(),\n aliases: z.object({\n components: z.string(),\n utils: z.string(),\n ui: z.string().optional(),\n lib: z.string().optional(),\n hooks: z.string().optional(),\n }),\n registries: registryConfigSchema.optional(),\n })\n .strict()\n\nexport const configSchema = rawConfigSchema.extend({\n resolvedPaths: z.object({\n cwd: z.string(),\n tailwindConfig: z.string(),\n tailwindCss: z.string(),\n utils: z.string(),\n components: z.string(),\n lib: z.string(),\n hooks: z.string(),\n ui: z.string(),\n }),\n})\n\n// TODO: type the key.\n// Okay for now since I don't want a breaking change.\nexport const workspaceConfigSchema = z.record(configSchema)\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import {V}from'./chunk-QEOYSEJM.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-POBJQ5RI.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-POBJQ5RI.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":"wFAMA,IAAMA,CAAAA,CAAyBC,GAAAA,CAAE,MAAA,CAAO,CACtC,KAAMA,GAAAA,CAAE,MAAA,EAAO,CACf,IAAA,CAAMA,GAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAC1B,WAAA,CAAaA,GAAAA,CAAE,MAAA,EAAO,CAAE,UAAS,CACjC,QAAA,CAAUA,IAAE,MAAA,EAAO,CACnB,mBAAoBA,GAAAA,CAAE,MAAA,EACxB,CAAC,CAAA,CAEKC,CAAAA,CAAsBD,IAAE,MAAA,CAAO,CACnC,UAAA,CAAYA,GAAAA,CAAE,MAAA,CAAO,CACnB,MAAOA,GAAAA,CAAE,MAAA,EAAO,CAChB,MAAA,CAAQA,GAAAA,CAAE,MAAA,GACV,KAAA,CAAOA,GAAAA,CAAE,QAAO,CAChB,OAAA,CAASA,IAAE,OAAA,EACb,CAAC,CAAA,CACD,KAAA,CAAOA,GAAAA,CAAE,MAAMD,CAAsB,CACvC,CAAC,CAAA,CAED,eAAsBG,CAAAA,CACpBC,EACAC,CAAAA,CAOA,CACA,GAAM,CAAE,KAAA,CAAAC,CAAAA,CAAO,MAAAC,CAAAA,CAAO,MAAA,CAAAC,CAAAA,CAAQ,MAAA,CAAAC,CAAAA,CAAQ,QAAA,CAAAC,CAAS,CAAA,CAAIL,CAAAA,EAAW,EAAC,CAE3DM,CAAAA,CAAqD,GAEzD,IAAA,IAAWC,CAAAA,IAAYR,CAAAA,CAAY,CAGjC,IAAMS,CAAAA,CAAAA,CAAAA,CAFe,MAAMC,CAAAA,CAAYF,CAAAA,CAAU,CAAE,MAAA,CAAAH,CAAAA,CAAQ,QAAA,CAAAC,CAAS,CAAC,CAAA,EAE7B,OAAS,EAAC,EAAG,IAAKK,CAAAA,GAAU,CAClE,IAAA,CAAMA,CAAAA,CAAK,IAAA,CACX,IAAA,CAAMA,EAAK,IAAA,CACX,WAAA,CAAaA,CAAAA,CAAK,WAAA,CAClB,QAAA,CAAUH,CAAAA,CACV,mBAAoBI,CAAAA,CAClBD,CAAAA,CAAK,IAAA,CACLH,CACF,CACF,CAAA,CAAE,EAEFD,CAAAA,CAAWA,CAAAA,CAAS,OAAOE,CAAiB,EAC9C,CAEIP,CAAAA,GACFK,CAAAA,CAAWM,CAAAA,CAAYN,CAAAA,CAAU,CAC/B,KAAA,CAAAL,EACA,KAAA,CAAOK,CAAAA,CAAS,MAAA,CAChB,IAAA,CAAM,CAAC,MAAA,CAAQ,aAAa,CAC9B,CAAC,CAAA,CAAA,CAGH,IAAMO,CAAAA,CAAmBV,CAAAA,EAAU,EAC7BW,CAAAA,CAAkBZ,CAAAA,EAASI,EAAS,MAAA,CACpCS,CAAAA,CAAaT,EAAS,MAAA,CAEtBU,CAAAA,CAA8C,CAClD,UAAA,CAAY,CACV,KAAA,CAAOD,EACP,MAAA,CAAQF,CAAAA,CACR,KAAA,CAAOC,CAAAA,CACP,OAAA,CAASD,CAAAA,CAAmBC,EAAkBC,CAChD,CAAA,CACA,KAAA,CAAOT,CAAAA,CAAS,KAAA,CAAMO,CAAAA,CAAkBA,EAAmBC,CAAe,CAC5E,CAAA,CAEA,OAAOjB,CAAAA,CAAoB,KAAA,CAAMmB,CAAM,CACzC,CAEA,IAAMC,CAAAA,CAAuBrB,GAAAA,CAC1B,MAAA,CAAO,CACN,IAAA,CAAMA,GAAAA,CAAE,MAAA,EAAO,CACf,IAAA,CAAMA,GAAAA,CAAE,QAAO,CAAE,QAAA,EAAS,CAC1B,WAAA,CAAaA,GAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CACjC,SAAUA,GAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAC9B,kBAAA,CAAoBA,GAAAA,CAAE,MAAA,EAAO,CAAE,UACjC,CAAC,CAAA,CACA,WAAA,EAAY,CAIf,SAASgB,EASPM,CAAAA,CACAlB,CAAAA,CAGA,CACAA,CAAAA,CAAU,CACR,KAAA,CAAO,IACP,SAAA,CAAW,IAAA,CACX,GAAGA,CACL,CAAA,CAQA,IAAMmB,CAAAA,CANgBC,CAAAA,CAAU,EAAA,CAAGpB,CAAAA,CAAQ,KAAA,CAAOkB,CAAAA,CAAO,CACvD,IAAA,CAAMlB,CAAAA,CAAQ,IAAA,CACd,SAAA,CAAWA,CAAAA,CAAQ,SAAA,CACnB,MAAOA,CAAAA,CAAQ,KACjB,CAAC,CAAA,CAE6B,GAAA,CAAKgB,CAAAA,EAAWA,EAAO,GAAG,CAAA,CAExD,OAAOpB,GAAAA,CAAE,KAAA,CAAMqB,CAAoB,CAAA,CAAE,KAAA,CAAME,CAAO,CACpD,CAEA,SAASE,EAAMC,CAAAA,CAAyB,CACtC,GAAI,CACF,OAAA,IAAI,GAAA,CAAIA,CAAM,CAAA,CACP,CAAA,CACT,CAAA,KAAQ,CACN,OAAO,MACT,CACF,CAKO,SAASX,CAAAA,CACdY,CAAAA,CACAhB,CAAAA,CACA,CAEA,GAAI,CAACc,CAAAA,CAAMd,CAAQ,CAAA,CACjB,OAAO,CAAA,EAAGA,CAAQ,CAAA,CAAA,EAAIgB,CAAI,CAAA,CAAA,CAI5B,IAAMC,CAAAA,CAAcjB,CAAAA,CAAS,QAAQ,KAAK,CAAA,CAAI,CAAA,CACxCkB,CAAAA,CAAUlB,CAAAA,CAAS,OAAA,CAAQ,IAAKiB,CAAW,CAAA,CAEjD,GAAIC,CAAAA,GAAY,EAAA,CAAI,CAElB,IAAMC,CAAAA,CAAanB,CAAAA,CAAS,OAAA,CAAQ,GAAA,CAAKiB,CAAW,EACpD,GAAIE,CAAAA,GAAe,EAAA,CAAI,CAErB,IAAMC,CAAAA,CAAcpB,EAAS,SAAA,CAAU,CAAA,CAAGmB,CAAU,CAAA,CAG9CE,CAAAA,CAFgBrB,CAAAA,CAAS,UAAUmB,CAAU,CAAA,CAEhB,QAAQ,eAAA,CAAiBH,CAAI,EAChE,OAAOI,CAAAA,CAAcC,CACvB,CAEA,OAAOrB,CACT,CAGA,IAAMsB,CAAAA,CAAWtB,CAAAA,CAAS,SAAA,CAAU,CAAA,CAAGkB,CAAO,EACxCK,CAAAA,CAAevB,CAAAA,CAAS,SAAA,CAAUkB,CAAO,CAAA,CAIzCM,CAAAA,CACJD,EAAa,OAAA,CAAQ,GAAG,IAAM,EAAA,CAC1BA,CAAAA,CAAa,QAAQ,GAAG,CAAA,CACxBA,CAAAA,CAAa,MAAA,CACbE,CAAAA,CAAWF,CAAAA,CAAa,UAAU,CAAA,CAAGC,CAAO,CAAA,CAC5CE,CAAAA,CAAgBH,CAAAA,CAAa,SAAA,CAAUC,CAAO,CAAA,CAG9CG,CAAAA,CAAYF,CAAAA,CAAS,WAAA,CAAY,UAAU,CAAA,CAC7CG,EAAcH,CAAAA,CACdE,CAAAA,GAAc,EAAA,GAChBC,CAAAA,CACEH,CAAAA,CAAS,SAAA,CAAU,EAAGE,CAAS,CAAA,CAC/BX,CAAAA,CACAS,CAAAA,CAAS,SAAA,CAAUE,CAAAA,CAAY,CAAiB,CAAA,CAAA,CAIpD,IAAMN,CAAAA,CAAeK,CAAAA,CAAc,OAAA,CAAQ,eAAA,CAAiBV,CAAI,CAAA,CAEhE,OAAOM,CAAAA,CAAWM,CAAAA,CAAcP,CAClC","file":"chunk-POBJQ5RI.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 {g,q as q$1,p,r,m,h,i,j as j$1,k as k$1,l,b as b$1}from'./chunk-IFPXTFU2.js';import {z as z$1}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 B from'fs/promises';import {green,cyan,yellow,red}from'kleur/colors';import {loadConfig,createMatchPath}from'tsconfig-paths';import {cosmiconfig}from'cosmiconfig';import Pe from'fast-glob';import Te from'fs-extra';import re from'deepmerge';import {createHash}from'crypto';import wr 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 Gr from'@babel/plugin-transform-typescript';import*as Ke from'recast';import ns from'prompts';import {HttpsProxyAgent}from'https-proxy-agent';import As from'node-fetch';var z={NOT_FOUND:"NOT_FOUND",UNAUTHORIZED:"UNAUTHORIZED",FORBIDDEN:"FORBIDDEN",FETCH_ERROR:"FETCH_ERROR",NOT_CONFIGURED:"NOT_CONFIGURED",MISSING_ENV_VARS:"MISSING_ENV_VARS",LOCAL_FILE_ERROR:"LOCAL_FILE_ERROR",PARSE_ERROR:"PARSE_ERROR",VALIDATION_ERROR:"VALIDATION_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},k=class extends Error{code;statusCode;context;suggestion;timestamp;cause;constructor(t,r={}){super(t),this.name="RegistryError",this.code=r.code||z.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 k{constructor(r,s){let n=`The item at ${r} was not found. It may not exist at the registry.`;super(n,{code:z.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 k{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:z.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 k{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:z.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 k{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:z.FETCH_ERROR,statusCode:s,cause:i,context:{url:r,responseBody:n},suggestion:c});this.url=r;this.responseBody=n;this.name="RegistryFetchError";}},G=class extends k{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:z.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 k{constructor(r,s){super(`Failed to read local registry file: ${r}`,{code:z.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 k{constructor(r,s){let n=`Failed to parse registry item: ${r}`;s instanceof z$1.ZodError&&(n=`Failed to parse registry item: ${r}
|
|
7
|
+
${s.errors.map(i=>` - ${i.path.join(".")}: ${i.message}`).join(`
|
|
8
|
+
`)}`);super(n,{code:z.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},Se=class extends k{constructor(r,s){let n=`Registry "${r}" requires the following environment variables:
|
|
9
|
+
|
|
10
|
+
`+s.map(i=>` \u2022 ${i}`).join(`
|
|
11
|
+
`);super(n,{code:z.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 k{constructor(r){let s=`Invalid registry namespace: "${r}". Registry names must start with @ (e.g., @shadcn, @v0).`;super(s,{code:z.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 He=process.env.REGISTRY_URL??"https://ui.shadcn.com/r",Ce="new-york-v4",ft=[{name:"neutral",label:"Neutral"},{name:"gray",label:"Gray"},{name:"zinc",label:"Zinc"},{name:"stone",label:"Stone"},{name:"slate",label:"Slate"}],J={"@shadcn":`${He}/styles/{style}/{name}.json`};var Ds=[{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 O(e,t){return createMatchPath(t.absoluteBaseUrl,t.paths)(e,void 0,()=>true,[".ts",".tsx",".jsx",".js",".css"])}var tn="@/components",rn="@/lib/utils",sn="app/globals.css",nn="tailwind.config.js";var nr=cosmiconfig("components",{searchPlaces:["components.json"]});async function Ie(e){let t=await ir(e);return t?(t.iconLibrary||(t.iconLibrary=t.style==="new-york"?"radix":"lucide"),await Ge(e,t)):null}async function Ge(e,t){t.registries={...J,...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 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 ir(e){try{let t=await nr.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 J)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 on(e){let t={};for(let s of Object.keys(e.aliases)){if(!ar(s,e))continue;let n=e.resolvedPaths[s],i=await or(e.resolvedPaths.cwd,n);if(!i){t[s]=e;continue}t[s]=await Ie(i);}let r$1=r.safeParse(t);return r$1.success?r$1.data:null}async function or(e,t){let r=lr(e,t),s=y__default.relative(r,t),i=(await Pe.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 ar(e,t){return Object.keys(t.resolvedPaths).filter(r=>r!=="utils").includes(e)}function lr(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 mt(e,t){return (await K(e))?.tailwindVersion==="v4"?"new-york-v4":t}function dt(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:{...J}};return e?{...t,...e,resolvedPaths:{...t.resolvedPaths,...e.resolvedPaths||{}},tailwind:{...t.tailwind,...e.tailwind||{}},aliases:{...t.aliases,...e.aliases||{}}}:t}function Je(e="",t=true){let r=y__default.join(e,"package.json");return Te.readJSONSync(r,{throws:t})}var ke=["**/node_modules/**",".next","public","dist","build"];z$1.object({compilerOptions:z$1.object({paths:z$1.record(z$1.string().or(z$1.array(z$1.string())))})});async function K(e){let[t,r,s,n,i,o,a,c]=await Promise.all([Pe.glob("**/{next,vite,astro,app}.config.*|gatsby-config.*|composer.json|react-router.config.*",{cwd:e,deep:3,ignore:ke}),Te.pathExists(y__default.resolve(e,"src")),ur(e),dr(e),mr(e),gt(e),gr(e),Je(e,false)]),p=await Te.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 Te.readFile(y__default.resolve(e,g),"utf8")).includes("defineConfig")?(l.framework=j.vite,l):(c?.dependencies?.expo&&(l.framework=j.expo),l)}async function gt(e){let[t,r]=await Promise.all([Je(e,false),Ie(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 mr(e){let[t,r]=await Promise.all([Pe.glob(["**/*.css","**/*.scss"],{cwd:e,deep:5,ignore:ke}),gt(e)]);if(!t.length)return null;for(let n of t){let i=await Te.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 dr(e){let t=await Pe.glob("tailwind.config.*",{cwd:e,deep:3,ignore:ke});return t.length?t[0]:null}async function gr(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 ur(e){return (await Pe.glob("tsconfig.*",{cwd:e,deep:1,ignore:ke})).length>0}async function Sn(e,t=null){let[r,s]=await Promise.all([Ie(e),t?Promise.resolve(t):K(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 Ge(e,n)}async function je(e){if(!e.resolvedPaths?.cwd)return "v3";let t=await K(e.resolvedPaths.cwd);return t?.tailwindVersion?t.tailwindVersion:null}function yr(e){return e.style?e.style==="new-york"&&e.tailwind?.config===""?Ce:e.style:Ce}function te(e){let t=dt({style:Ce,registries:J});return e?q$1.parse(re(t,{...e,style:yr(e),registries:{...J,...e.registries}})):t}var Oe={headers:{}};function pe(e){Oe.headers={...Oe.headers,...e};}function ut(e){return Oe.headers[e]||{}}function fe(){Oe.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 V(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 k&&(e.message&&(E.error(e.cause?"Error:":"Message:"),E.error(e.message)),e.cause&&(E.error(`
|
|
12
|
+
Message:`),E.error(e.cause)),e.suggestion&&(E.error(`
|
|
13
|
+
Suggestion:`),E.error(e.suggestion)),E.break(),process.exit(1)),e instanceof z$1.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 wr({text:e,isSilent:t?.silent})}async function Qn(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 Ir(i,e,t);await promises.writeFile(t.resolvedPaths.tailwindConfig,o,"utf8"),n?.succeed();}async function Ir(e,t,r){let s=await yt(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=kr(n);return br(n,{name:"darkMode",value:"class"},{quoteChar:i}),t.plugins?.forEach(o=>{Pr(n,o);}),t.theme&&await Tr(n,t.theme),s.getFullText()}function br(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 Tr(e,t){e.getProperty("theme")||e.addPropertyAssignment({name:"theme",initializer:"{}"}),Ye(e);let s=(e.getPropertyOrThrow("theme")?.asKindOrThrow(SyntaxKind.PropertyAssignment)).getInitializer();if(s?.isKind(SyntaxKind.ObjectLiteralExpression)){let n=s.getText(),i=await jr(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);}Ze(e);}function Pr(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 yt(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 kr(e){return e.getFirstDescendantByKind(SyntaxKind.StringLiteral)?.getQuoteKind()===QuoteKind.Single?"'":'"'}function Ye(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)?Ye(i.asKindOrThrow(SyntaxKind.ObjectLiteralExpression)):i&&i.isKind(SyntaxKind.ArrayLiteralExpression)&&xt(i.asKindOrThrow(SyntaxKind.ArrayLiteralExpression));}}}function xt(e){let t=e.getElements();for(let r=0;r<t.length;r++){let s=t[r];if(s.isKind(SyntaxKind.ObjectLiteralExpression))Ye(s.asKindOrThrow(SyntaxKind.ObjectLiteralExpression));else if(s.isKind(SyntaxKind.ArrayLiteralExpression))xt(s.asKindOrThrow(SyntaxKind.ArrayLiteralExpression));else if(s.isKind(SyntaxKind.SpreadElement)){let n=s.getText();e.removeElement(r),e.insertElement(r,`"${n}"`);}}}function Ze(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)?Ze(i):i&&i.isKind(SyntaxKind.ArrayLiteralExpression)&&wt(i.asKindOrThrow(SyntaxKind.ArrayLiteralExpression));}}}function wt(e){let t=e.getElements();for(let r=0;r<t.length;r++){let s=t[r];if(s.isKind(SyntaxKind.ObjectLiteralExpression))Ze(s.asKindOrThrow(SyntaxKind.ObjectLiteralExpression));else if(s.isKind(SyntaxKind.ArrayLiteralExpression))wt(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 jr(e){let r=(await yt(`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 $e(n)}throw new Error("Invalid input: not an object literal")}function $e(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]=$e(r.getInitializer()):r.getInitializer()?.isKind(SyntaxKind.ArrayLiteralExpression)?t[s]=vt(r.getInitializer()):t[s]=Qe(r.getInitializer());}return t}function vt(e){let t=[];for(let r of e.getElements())r.isKind(SyntaxKind.ObjectLiteralExpression)?t.push($e(r.asKindOrThrow(SyntaxKind.ObjectLiteralExpression))):r.isKind(SyntaxKind.ArrayLiteralExpression)?t.push(vt(r.asKindOrThrow(SyntaxKind.ArrayLiteralExpression))):t.push(Qe(r));return t}function Qe(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(Qe);case SyntaxKind.ObjectLiteralExpression:return $e(e);default:return e.getText()}}function Et(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(Ae(n))return Ct(n);if(L(n)){let[a]=await $([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 $(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 $([i],r);try{return g.parse(o)}catch(a){throw new A(n,a)}}))}g.extend({_source:z$1.string().optional()});async function bt(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 H=v.registryDependencies.filter(N=>N.startsWith("@"));if(H.length>0){let{registry:N}=X(H[0]);throw new G(N)}}let{items:T,registryNames:P}=await ge(x,t,r,new Set(o));n.push(...T),i.push(...P);}}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 H={...x[T],_source:R[T]};s.push(H);}}if(v.length>0){let x=await Tt();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 $r(oe,t,r);T.push(...he);}let P=Array.from(new Set(T)),H=await $(P,r),N=z$1.array(g).parse(H);s.push(...N);}}}if(!s.length)return null;if((o.includes("index")||i.includes("index"))&&t.tailwind.baseColor){let m=await Ar(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=Lr(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}
|
|
14
|
+
`);});let u={};s.forEach(m=>{u=re(u,m.envVars??{});});let h=await Rt(s.map(m=>m.files??[]),t),S=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&&(S.envVars=u),S}catch(s){return V(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),L(o)||Ae(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 G(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 $r(e,t,r={}){if(L(e))return [e];let{registryNames:s}=await ge([e],t,r,new Set),n=t.resolvedPaths?.cwd?await mt(t.resolvedPaths.cwd,t.style):t.style,i=s.map(o=>Fe(L(o)?o:`styles/${n}/${o}.json`));return Array.from(new Set(i))}async function Ar(e,t){let[r,s]=await Promise.all([Le(e),je(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,...Et(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 W(e,t){let r=t||e.name,s=createHash("sha256").update(r).digest("hex").substring(0,8);return `${e.name}::${s}`}function Fr(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:W({name:i},e)}}if(Ae(e)){let r=e.match(/\/([^/]+)\.json$/),s=r?r[1]:y__default.basename(e,".json");return {name:s,hash:W({name:s},e)}}let{item:t}=X(e);return {name:t,hash:W({name:t},e)}}function Lr(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=W(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=W(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=W(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}=Fr(f),S=o.get(h)||[];S.length>0&&(w=S[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 W(l,g)}));e.forEach(l=>{let g=t.get(l)||l.name,f=W(l,g);p.has(f)||c.push(l);});}return c}async function Oi(e,t){let{config:r,useCache:s}=t||{};if(L(e)){let[a]=await $([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 $([i.url],{useCache:s});try{return h.parse(o)}catch(a){throw new A(n,a)}}async function $i(e,t){let{config:r,useCache:s=false}=t||{};return fe(),Y(e,te(r),{useCache:s})}async function Ai(e,t){let{config:r,useCache:s=false}=t||{};return fe(),bt(e,te(r),{useCache:s})}async function Tt(){try{let[e]=await $(["index.json"]);return i.parse(e)}catch(e){E.error(`
|
|
15
|
+
`),V(e);}}async function Fi(){try{let[e]=await $(["styles/index.json"]);return j$1.parse(e)}catch(e){return E.error(`
|
|
16
|
+
`),V(e),[]}}async function Pt(){try{let[e]=await $(["icons/index.json"]);return k$1.parse(e)}catch(e){return V(e),{}}}async function Li(){return ft}async function Le(e){try{let[t]=await $([`colors/${e}.json`]);return l.parse(t)}catch(t){V(t);}}async function Dr(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 Dr(e,n.registryDependencies);r.push(...i);}}return r.filter((s,n,i)=>i.findIndex(o=>o.name===s.name)===n)}async function Ni(e,t){try{let r=t.map(n=>`styles/${e}/${n.name}.json`);return (await $(r)).map(n=>g.parse(n))}catch(r){return V(r),[]}}async function Di(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 kt(e,t,r={}){let{ignoreImports:s=false}=r,n=e.replace(/\r\n/g,`
|
|
17
|
+
`).trim(),i=t.replace(/\r\n/g,`
|
|
18
|
+
`).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("/"),S=h[h.length-1];return `${f}@normalized/${S}${u}`}),c=a(n),p=a(i);return c===p}function Z(e){let t=y__default.basename(e);return /^\.env(\.|$)/.test(t)}function Ot(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(`
|
|
19
|
+
`),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 $t(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 At(e,t){let r=ne(e),s=ne(t),n=e.trimEnd();n&&!n.endsWith(`
|
|
20
|
+
`)&&(n+=`
|
|
21
|
+
`);let i=[];for(let[o,a]of Object.entries(s))o in r||i.push(`${o}=${a}`);return i.length>0?(n&&(n+=`
|
|
22
|
+
`),n+=i.join(`
|
|
23
|
+
`),n+`
|
|
24
|
+
`):n&&!n.endsWith(`
|
|
25
|
+
`)?n+`
|
|
26
|
+
`:n}var Ne=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=Vr(n.replace(/"/g,""),r.inlineColors);s.replaceWithText(`"${i.trim()}"`);}}),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 Kr=["bg-","text-","border-","ring-offset-","ring-"];function Vr(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]=Xe(i),p=Kr.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 De={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 Ft="lucide",_e=async({sourceFile:e,config:t})=>{if(!t.iconLibrary||!(t.iconLibrary in De))return e;let r=await Pt(),s=Ft,n=t.iconLibrary;if(s===n)return e;let i=[];for(let o of e.getImportDeclarations()??[])if(o.getModuleSpecifier()?.getText()===`"${De[Ft].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:De[n]?.import,namedImports:i.map(a=>({name:a}))});Ur(e)||o.replaceWithText(o.getText().replace(";",""));}return e};function Ur(e){return e.getImportDeclarations()?.[0]?.getText().endsWith(";")??false}var ze=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=Mr(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 Mr(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 Jr={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"]},Lt=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let s=Ke.parse(r,{parser:{parse:i=>parse(i,Jr)}}),n=transformFromAstSync(s,r,{cloneInputAst:false,code:false,ast:true,plugins:[Gr],configFile:false});if(!n||!n.ast)throw new Error("Failed to transform JSX");return Ke.print(n.ast).code};var Yr=/^["']use client["']$/g,Ve=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(SyntaxKind.ExpressionStatement);return r&&Yr.test(r.getText())&&r.remove(),e};var We=async({sourceFile:e,config:t})=>{if(!t.tailwind?.prefix)return e;let r=await je(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(`"${U(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(`"${U(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(`"${U(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(`"${U(o.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);}),i.isKind(SyntaxKind.StringLiteral)&&i.replaceWithText(`"${U(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(`"${U(a.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);}),o.isKind(SyntaxKind.StringLiteral)&&o.replaceWithText(`"${U(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(`"${U(i.getText()?.replace(/"|'/g,""),t.tailwind.prefix,r)}"`);}});}),e};function U(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 ts=new Project({compilerOptions:{}});async function rs(e){let t=await promises.mkdtemp(y__default.join(tmpdir(),"shadcn-"));return y__default.join(t,e)}async function Dt(e,t=[ze,Ve,Ne,We,_e]){let r=await rs(e.filename),s=ts.createSourceFile(r,e.raw,{scriptKind:ScriptKind.TSX});for(let n of t)await n({sourceFile:s,...e});return e.transformJsx?await Lt({sourceFile:s,...e}):s.getText()}async function Mo(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([K(t.resolvedPaths.cwd),t.tailwind.baseColor?Le(t.tailwind.baseColor):Promise.resolve(void 0)]),o=[],a=[],c=[],p=[],l=null;for(let u of e){if(!u.content)continue;let h=et(u,t,{isSrcDir:n?.isSrcDir,framework:n?.framework.name,commonRoot:tt(e.map(x=>x.path),u.path)});if(!h)continue;let S=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=Ot(m);x&&(h=x);}let v=existsSync(h),R=Z(h)?u.content:await Dt({filename:u.path,raw:u.content,config:t,baseColor:i,transformJsx:!t.tsx,isRemote:r.isRemote},[ze,Ve,Ne,We,_e]);if(v&&!Z(h)){let x=await promises.readFile(h,"utf-8");if(kt(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 ns({type:"confirm",name:"overwrite",message:`The file ${b.info(S)} 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=At(x,R);if(p=$t(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 fs(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 et(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=ps(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=ls(e,t),n=cs(e.path,s);return y__default.join(s,n)}function ls(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(p=>p!==s&&p.startsWith(a+"/")))return "/"+a}return "/"+n}function cs(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 ps(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 fs(e,t){let r=new Project({compilerOptions:{}}),s=await K(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 O(w,n);if(!u)continue;let h=ms(u,e,t);if(!h)continue;let S=ds(h,t,s);!S||S===w||(f.setModuleSpecifier(S),await promises.writeFile(a,l.getFullText(),"utf-8"),i.push(o));}}return i}function ms(e,t,r,s=[".tsx",".ts",".js",".jsx",".css"]){let n=y__default.normalize(r.resolvedPaths.cwd),i=t.map(S=>S.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 S of f){let m=p+S,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${S}`),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 S of i)f.some(m=>S.endsWith(`/${u}${m}`))&&w.add(S);return w.size===0?null:Array.from(w).sort((S,m)=>{let v=y__default.posix.extname(S),R=y__default.posix.extname(m),x=f.indexOf(v)-f.indexOf(R);if(x!==0)return x;let T=g&&S.startsWith(g)?-1:1,P=g&&m.startsWith(g)?-1:1;return T-P})[0]}function ds(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 Kt=[".tsx",".ts",".jsx",".js",".css"],Vt=["lib/utils.ts"],xs=[/^(react|react-dom|next)(\/.*)?$/,/^(node|jsr|npm):.*$/],ws=new Project({compilerOptions:{}});function vs(e){if(xs.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 Es(e,t,r,s=new Set){let n=y.resolve(t.resolvedPaths.cwd,e),i=y.relative(t.resolvedPaths.cwd,n);if(Vt.includes(i))return {dependencies:[],files:[]};let o=y.extname(e);if(!Kt.includes(o))return {dependencies:[],files:[]};if(s.has(i))return {dependencies:[],files:[]};if(s.add(i),!(await B.stat(n)).isFile())return {dependencies:[],files:[]};let c=await B.readFile(n,"utf-8"),p=await Ss(y.basename(n)),l=ws.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=Wt(e),h={path:i,type:u,target:""};f.push(h);let S=l.getImportDeclarations();for(let v of S){let R=v.getModuleSpecifierValue(),x=R.startsWith(".");if(!R.startsWith(`${r.aliasPrefix}/`)&&!x){let D=vs(R);D&&w.add(D);continue}let P=await O(R,g);if(x&&(P=y.resolve(y.dirname(n),R)),!P)continue;if(!y.extname(P))for(let D of Kt){let st=`${P}${D}`;try{await B.access(st),P=st;break}catch{continue}}let N=y.relative(t.resolvedPaths.cwd,P);if(s.has(N)||Vt.includes(N))continue;let oe=Wt(R),he={path:N,type:oe,target:""};(oe==="registry:page"||oe==="registry:file")&&(he.target=R),f.push(he);let ye=await Es(N,t,r,s);if(ye.files)for(let D of ye.files)s.has(D.path)||(s.add(D.path),f.push(D));ye.dependencies&&ye.dependencies.forEach(D=>w.add(D));}let m=Array.from(new Map(f.map(v=>[v.path,v])).values());return {dependencies:Array.from(w),files:m}}async function Ss(e){let t=await B.mkdtemp(y.join(tmpdir(),"shadcn-"));return y.join(t,e)}function Wt(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 sa(e){return !!e?.files?.length&&e.files.every(t=>!!t.target&&(t.type==="registry:file"||t.type==="registry:item"))}async function Rt(e,t){if(!Rs(t))return z$1.array(b$1).parse(e.flat().filter(Boolean));let r=await K(t.resolvedPaths.cwd),s=new Map,n=z$1.array(b$1).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 Rs(e){return !!(e?.resolvedPaths?.cwd&&(e?.resolvedPaths?.ui||e?.resolvedPaths?.lib||e?.resolvedPaths?.components||e?.resolvedPaths?.hooks))}function Cs(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 Ut(e,t){let s=Cs(t).filter(n=>!process.env[n]);if(s.length>0)throw new Se(e,s)}function pa(e,t){for(let r of e)se(r,te(t));fe();}var Mt="{name}",Ue="{style}",Bt=/\${(\w+)}/g,Ht="?",Is="&";function se(e,t){let{registry:r,item:s}=X(e);if(!r)return null;let i=(t?.registries||{})[r];if(!i)throw new G(r);return Ut(r,i),{url:bs(s,i,t),headers:Ts(i)}}function bs(e,t,r){if(typeof t=="string"){let n=t.replace(Mt,e);return r?.style&&n.includes(Ue)&&(n=n.replace(Ue,r.style)),le(n)}let s=t.url.replace(Mt,e);return r?.style&&s.includes(Ue)&&(s=s.replace(Ue,r.style)),s=le(s),t.params?Ps(s,t.params):s}function Ts(e){if(typeof e=="string"||!e.headers)return {};let t={};for(let[r,s]of Object.entries(e.headers)){let n=le(s);ks(s,n)&&(t[r]=n);}return t}function Ps(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(Ht)?Is:Ht;return `${e}${n}${s}`}function ks(e,t){let r=t.trim();if(!r)return false;if(e.includes("${")&&e.match(Bt)){let n=e.replace(Bt,"").trim();return r!==n}return true}function Fe(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 `${He}/${e}`}var Fs=process.env.https_proxy?new HttpsProxyAgent(process.env.https_proxy):void 0,rt=new Map;async function $(e,t={}){t={useCache:true,...t};try{return await Promise.all(e.map(async s=>{let n=Fe(s);if(t.useCache&&rt.has(n))return rt.get(n);let i=(async()=>{let o=ut(n),a=await As(n,{agent:Fs,headers:{...o}});if(!a.ok){let c;if(a.headers.get("content-type")?.includes("application/json")){let p=await a.json(),l=z$1.object({detail:z$1.string().optional(),title:z$1.string().optional(),message:z$1.string().optional(),error:z$1.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&&rt.set(n,i),i}))}catch(r){throw r}}async function Ct(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)}}
|
|
27
|
+
export{Li as $,A,Se as B,Re as C,Ot as D,$t as E,At as F,De as G,Dt as H,Mo as I,Es as J,sa as K,te as L,fe as M,pa as N,se as O,$ as P,V as Q,Qn as R,yt as S,kr as T,bt as U,Oi as V,$i as W,Ai as X,Tt as Y,Fi as Z,Pt as _,ft as a,Le as aa,Ds as b,Dr as ba,b as c,Ni as ca,tn as d,Di as da,rn as e,sn as f,nn as g,Ie as h,Ge as i,on as j,or as k,lr as l,dt as m,Je as n,K as o,Sn as p,je as q,E as r,q as s,k as t,Q as u,we as v,ve as w,Ee as x,G as y,ae as z};//# sourceMappingURL=chunk-QEOYSEJM.js.map
|
|
28
|
+
//# sourceMappingURL=chunk-QEOYSEJM.js.map
|