@create-ui/cli 0.1.0-beta.0

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/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 createui
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,62 @@
1
+ # @create-ui/cli
2
+
3
+ A CLI for adding components to your project.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ # one-off via npx (recommended)
9
+ npx @create-ui/cli@beta <command>
10
+
11
+ # or install globally and run as `createui`
12
+ pnpm add -g @create-ui/cli@beta
13
+ createui <command>
14
+ ```
15
+
16
+ ## create
17
+
18
+ Use the `create` command to create a new project. You will be taken to a website to build your custom design system and choose your framework.
19
+
20
+ ```bash
21
+ npx @create-ui/cli@beta create
22
+ ```
23
+
24
+ ## init
25
+
26
+ Use the `init` command to initialize dependencies for a new project.
27
+
28
+ The `init` command installs dependencies, adds the `cn` util, configures Tailwind CSS, and CSS variables for the project.
29
+
30
+ ```bash
31
+ npx @create-ui/cli@beta init
32
+ ```
33
+
34
+ ## add
35
+
36
+ Use the `add` command to add components to your project.
37
+
38
+ The `add` command adds a component to your project and installs all required dependencies.
39
+
40
+ ```bash
41
+ npx @create-ui/cli@beta add [component]
42
+ ```
43
+
44
+ ### Example
45
+
46
+ ```bash
47
+ npx @create-ui/cli@beta add alert-dialog
48
+ ```
49
+
50
+ You can also run the command without any arguments to view a list of all available components:
51
+
52
+ ```bash
53
+ npx @create-ui/cli@beta add
54
+ ```
55
+
56
+ ## Documentation
57
+
58
+ Visit https://dev.createui.co/docs/cli to view the documentation.
59
+
60
+ ## License
61
+
62
+ MIT
@@ -0,0 +1,72 @@
1
+ import {a as a$1}from'./chunk-JWZJQI2B.js';import {ba,z as z$1,da}from'./chunk-BVZRYLRW.js';import {Server}from'@modelcontextprotocol/sdk/server/index.js';import {ListToolsRequestSchema,CallToolRequestSchema}from'@modelcontextprotocol/sdk/types.js';import a from'dedent';import {z}from'zod';import {zodToJsonSchema}from'zod-to-json-schema';import {detect}from'@antfu/ni';async function k(n,{withFallback:e}={withFallback:false}){let r=await detect({programmatic:true,cwd:n});if(r==="yarn@berry")return "yarn";if(r==="pnpm@6")return "pnpm";if(r==="bun")return "bun";if(r==="deno")return "deno";if(!e)return r??"npm";let i=process.env.npm_config_user_agent||"";return i.startsWith("yarn")?"yarn":i.startsWith("pnpm")?"pnpm":i.startsWith("bun")?"bun":"npm"}async function b(n){let e=await k(n);return e==="pnpm"?"pnpm dlx":e==="bun"?"bunx":"npx"}var v="createui@latest";async function g(n){return `${await b(process.cwd())} ${v} ${n}`}async function u(n=process.cwd()){return {registries:(await da(n,{useCache:false})).registries}}function y(n,e){let{query:r,registries:i}=e||{},s=n.items.map(c=>{let f=[`- ${c.name}`];return c.type&&f.push(`(${c.type})`),c.description&&f.push(`- ${c.description}`),c.registry&&f.push(`[${c.registry}]`),f.push(`
2
+ Add command: \`${g(`add ${c.addCommandArgument}`)}\``),f.join(" ")}),o=`Found ${n.pagination.total} items`;r&&(o+=` matching "${r}"`),i&&i.length>0&&(o+=` in registries ${i.join(", ")}`),o+=":";let m=`Showing items ${n.pagination.offset+1}-${Math.min(n.pagination.offset+n.pagination.limit,n.pagination.total)} of ${n.pagination.total}:`,d=`${o}
3
+
4
+ ${m}
5
+
6
+ ${s.join(`
7
+
8
+ `)}`;return n.pagination.hasMore&&(d+=`
9
+
10
+ More items available. Use offset: ${n.pagination.offset+n.pagination.limit} to see the next page.`),d}function w(n){return n.map(e=>[`## ${e.name}`,e.description?`
11
+ ${e.description}
12
+ `:"",e.type?`**Type:** ${e.type}`:"",e.files&&e.files.length>0?`**Files:** ${e.files.length} file(s)`:"",e.dependencies&&e.dependencies.length>0?`**Dependencies:** ${e.dependencies.join(", ")}`:"",e.devDependencies&&e.devDependencies.length>0?`**Dev Dependencies:** ${e.devDependencies.join(", ")}`:""].filter(Boolean).join(`
13
+ `))}function $(n,e){let r=n.map(s=>{let o=[`## Example: ${s.name}`,s.description?`
14
+ ${s.description}
15
+ `:""];return s.files?.length&&s.files.forEach(m=>{m.content&&(o.push(`### Code (${m.path}):
16
+ `),o.push("```tsx"),o.push(m.content),o.push("```"));}),o.filter(Boolean).join(`
17
+ `)});return `# Usage Examples
18
+
19
+ Found ${n.length} example${n.length>1?"s":""} matching "${e}":
20
+ `+r.join(`
21
+
22
+ ---
23
+
24
+ `)}var j=new Server({name:"createui",version:"1.0.0"},{capabilities:{resources:{},tools:{}}});j.setRequestHandler(ListToolsRequestSchema,async()=>({tools:[{name:"get_project_registries",description:"Get configured registry names from components.json - Returns error if no components.json exists (use init_project to create one)",inputSchema:zodToJsonSchema(z.object({}))},{name:"list_items_in_registries",description:"List items from registries (requires components.json - use init_project if missing)",inputSchema:zodToJsonSchema(z.object({registries:z.array(z.string()).describe("Array of registry names to search (e.g., ['@createui', '@acme'])"),limit:z.number().optional().describe("Maximum number of items to return"),offset:z.number().optional().describe("Number of items to skip for pagination")}))},{name:"search_items_in_registries",description:"Search for components in registries using fuzzy matching (requires components.json). After finding an item, use get_item_examples_from_registries to see usage examples.",inputSchema:zodToJsonSchema(z.object({registries:z.array(z.string()).describe("Array of registry names to search (e.g., ['@createui', '@acme'])"),query:z.string().describe("Search query string for fuzzy matching against item names and descriptions"),limit:z.number().optional().describe("Maximum number of items to return"),offset:z.number().optional().describe("Number of items to skip for pagination")}))},{name:"view_items_in_registries",description:"View detailed information about specific registry items including the name, description, type and files content. For usage examples, use get_item_examples_from_registries instead.",inputSchema:zodToJsonSchema(z.object({items:z.array(z.string()).describe("Array of item names with registry prefix (e.g., ['@createui/button', '@createui/card'])")}))},{name:"get_item_examples_from_registries",description:"Find usage examples and demos with their complete code. Search for patterns like 'accordion-demo', 'button example', 'card-demo', etc. Returns full implementation code with dependencies.",inputSchema:zodToJsonSchema(z.object({registries:z.array(z.string()).describe("Array of registry names to search (e.g., ['@createui', '@acme'])"),query:z.string().describe("Search query for examples (e.g., 'accordion-demo', 'button demo', 'card example', 'tooltip-demo', 'example-booking-form', 'example-hero'). Common patterns: '{item-name}-demo', '{item-name} example', 'example {item-name}'")}))},{name:"get_add_command_for_items",description:"Get the createui CLI add command for specific items in a registry. This is useful for adding one or more components to your project.",inputSchema:zodToJsonSchema(z.object({items:z.array(z.string()).describe("Array of items to get the add command for prefixed with the registry name (e.g., ['@createui/button', '@createui/card'])")}))},{name:"get_audit_checklist",description:"After creating new components or generating new code files, use this tool for a quick checklist to verify that everything is working as expected. Make sure to run the tool after all required steps have been completed.",inputSchema:zodToJsonSchema(z.object({}))}]}));j.setRequestHandler(CallToolRequestSchema,async n=>{try{if(!n.params.arguments)throw new Error("No tool arguments provided.");switch(n.params.name){case "get_project_registries":{let e=await u(process.cwd());return e?.registries?{content:[{type:"text",text:a`The following registries are configured in the current project:
25
+
26
+ ${Object.keys(e.registries).map(r=>`- ${r}`).join(`
27
+ `)}
28
+
29
+ You can view the items in a registry by running:
30
+ \`${await g("view @name-of-registry")}\`
31
+
32
+ For example: \`${await g("view @createui")}\` or \`${await g("view @createui @acme")}\` to view multiple registries.
33
+ `}]}:{content:[{type:"text",text:a`No components.json found or no registries configured.
34
+
35
+ To fix this:
36
+ 1. Use the \`init\` command to create a components.json file
37
+ 2. Or manually create components.json with a registries section`}]}}case "search_items_in_registries":{let r=z.object({registries:z.array(z.string()),query:z.string(),limit:z.number().optional(),offset:z.number().optional()}).parse(n.params.arguments),i=await a$1(r.registries,{query:r.query,limit:r.limit,offset:r.offset,config:await u(process.cwd()),useCache:!1});return i.items.length===0?{content:[{type:"text",text:a`No items found matching "${r.query}" in registries ${r.registries.join(", ")}, Try searching with a different query or registry.`}]}:{content:[{type:"text",text:y(i,{query:r.query,registries:r.registries})}]}}case "list_items_in_registries":{let r=z.object({registries:z.array(z.string()),limit:z.number().optional(),offset:z.number().optional(),cwd:z.string().optional()}).parse(n.params.arguments),i=await a$1(r.registries,{limit:r.limit,offset:r.offset,config:await u(process.cwd()),useCache:!1});return i.items.length===0?{content:[{type:"text",text:a`No items found in registries ${r.registries.join(", ")}.`}]}:{content:[{type:"text",text:y(i,{registries:r.registries})}]}}case "view_items_in_registries":{let r=z.object({items:z.array(z.string())}).parse(n.params.arguments),i=await ba(r.items,{config:await u(process.cwd()),useCache:!1});if(i?.length===0)return {content:[{type:"text",text:a`No items found for: ${r.items.join(", ")}
38
+
39
+ Make sure the item names are correct and include the registry prefix (e.g., @createui/button).`}]};let s=w(i);return {content:[{type:"text",text:a`Item Details:
40
+
41
+ ${s.join(`
42
+
43
+ ---
44
+
45
+ `)}`}]}}case "get_item_examples_from_registries":{let r=z.object({query:z.string(),registries:z.array(z.string())}).parse(n.params.arguments),i=await u(),s=await a$1(r.registries,{query:r.query,config:i,useCache:!1});if(s.items.length===0)return {content:[{type:"text",text:a`No examples found for query "${r.query}".
46
+
47
+ Try searching with patterns like:
48
+ - "accordion-demo" for accordion examples
49
+ - "button demo" or "button example"
50
+ - Component name followed by "-demo" or "example"
51
+
52
+ You can also:
53
+ 1. Use search_items_in_registries to find all items matching your query
54
+ 2. View the main component with view_items_in_registries for inline usage documentation`}]};let o=s.items.map(d=>d.addCommandArgument),m=await ba(o,{config:i,useCache:!1});return {content:[{type:"text",text:$(m,r.query)}]}}case "get_add_command_for_items":{let e=z.object({items:z.array(z.string())}).parse(n.params.arguments);return {content:[{type:"text",text:await g(`add ${e.items.join(" ")}`)}]}}case "get_audit_checklist":return {content:[{type:"text",text:a`## Component Audit Checklist
55
+
56
+ After adding or generating components, check the following common issues:
57
+
58
+ - [ ] Ensure imports are correct i.e named vs default imports
59
+ - [ ] If using next/image, ensure images.remotePatterns next.config.js is configured correctly.
60
+ - [ ] Ensure all dependencies are installed.
61
+ - [ ] Check for linting errors or warnings
62
+ - [ ] Check for TypeScript errors
63
+ - [ ] Use the Playwright MCP if available.
64
+ `}]};default:throw new Error(`Tool ${n.params.name} not found`)}}catch(e){if(e instanceof z.ZodError)return {content:[{type:"text",text:a`Invalid input parameters:
65
+ ${e.errors.map(i=>`- ${i.path.join(".")}: ${i.message}`).join(`
66
+ `)}
67
+ `}],isError:true};if(e instanceof z$1){let i=e.message;return e.suggestion&&(i+=`
68
+
69
+ \u{1F4A1} ${e.suggestion}`),e.context&&(i+=`
70
+
71
+ Context: ${JSON.stringify(e.context,null,2)}`),{content:[{type:"text",text:a`Error (${e.code}): ${i}`}],isError:true}}let r=e instanceof Error?e.message:String(e);return {content:[{type:"text",text:a`Error: ${r}`}],isError:true}}});export{k as a,j as b};//# sourceMappingURL=chunk-7MKTQPYI.js.map
72
+ //# sourceMappingURL=chunk-7MKTQPYI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/get-package-manager.ts","../src/mcp/utils.ts","../src/mcp/index.ts"],"names":["getPackageManager","targetDir","withFallback","packageManager","detect","userAgent","getPackageRunner","cwd","createui_CLI_COMMAND","npxcreateui","command","getMcpConfig","getRegistriesConfig","formatSearchResultsWithPagination","results","options","query","registries","formattedItems","item","parts","header","showingRange","output","formatRegistryItems","items","formatItemExamples","sections","file","server","Server","ListToolsRequestSchema","zodToJsonSchema","z","CallToolRequestSchema","request","config","dedent","registry","args","searchRegistries","registryItems","getRegistryItems","itemNames","fullItems","error","e","RegistryError","errorMessage"],"mappings":"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","file":"chunk-7MKTQPYI.js","sourcesContent":["import { detect } from \"@antfu/ni\"\n\nexport async function getPackageManager(\n targetDir: string,\n { withFallback }: { withFallback?: boolean } = {\n withFallback: false,\n }\n): Promise<\"yarn\" | \"pnpm\" | \"bun\" | \"npm\" | \"deno\"> {\n const packageManager = await detect({ programmatic: true, cwd: targetDir })\n\n if (packageManager === \"yarn@berry\") return \"yarn\"\n if (packageManager === \"pnpm@6\") return \"pnpm\"\n if (packageManager === \"bun\") return \"bun\"\n if (packageManager === \"deno\") return \"deno\"\n if (!withFallback) {\n return packageManager ?? \"npm\"\n }\n\n // Fallback to user agent if not detected.\n const userAgent = process.env.npm_config_user_agent || \"\"\n\n if (userAgent.startsWith(\"yarn\")) {\n return \"yarn\"\n }\n\n if (userAgent.startsWith(\"pnpm\")) {\n return \"pnpm\"\n }\n\n if (userAgent.startsWith(\"bun\")) {\n return \"bun\"\n }\n\n return \"npm\"\n}\n\nexport async function getPackageRunner(cwd: string) {\n const packageManager = await getPackageManager(cwd)\n\n if (packageManager === \"pnpm\") return \"pnpm dlx\"\n\n if (packageManager === \"bun\") return \"bunx\"\n\n return \"npx\"\n}\n","import { getRegistriesConfig } from \"@/src/registry/api\"\nimport { registryItemSchema, searchResultsSchema } from \"@/src/schema\"\nimport { getPackageRunner } from \"@/src/utils/get-package-manager\"\nimport { z } from \"zod\"\n\nconst createui_CLI_COMMAND = \"createui@latest\"\n\nexport async function npxcreateui(command: string) {\n const packageRunner = await getPackageRunner(process.cwd())\n return `${packageRunner} ${createui_CLI_COMMAND} ${command}`\n}\n\nexport async function getMcpConfig(cwd = process.cwd()) {\n const config = await getRegistriesConfig(cwd, {\n useCache: false,\n })\n\n return {\n registries: config.registries,\n }\n}\n\nexport function formatSearchResultsWithPagination(\n results: z.infer<typeof searchResultsSchema>,\n options?: {\n query?: string\n registries?: string[]\n }\n) {\n const { query, registries } = options || {}\n\n const formattedItems = results.items.map((item) => {\n const parts: string[] = [`- ${item.name}`]\n\n if (item.type) {\n parts.push(`(${item.type})`)\n }\n\n if (item.description) {\n parts.push(`- ${item.description}`)\n }\n\n if (item.registry) {\n parts.push(`[${item.registry}]`)\n }\n\n parts.push(\n `\\n Add command: \\`${npxcreateui(`add ${item.addCommandArgument}`)}\\``\n )\n\n return parts.join(\" \")\n })\n\n let header = `Found ${results.pagination.total} items`\n if (query) {\n header += ` matching \"${query}\"`\n }\n if (registries && registries.length > 0) {\n header += ` in registries ${registries.join(\", \")}`\n }\n header += \":\"\n\n const showingRange = `Showing items ${\n results.pagination.offset + 1\n }-${Math.min(\n results.pagination.offset + results.pagination.limit,\n results.pagination.total\n )} of ${results.pagination.total}:`\n\n let output = `${header}\\n\\n${showingRange}\\n\\n${formattedItems.join(\"\\n\\n\")}`\n\n if (results.pagination.hasMore) {\n output += `\\n\\nMore items available. Use offset: ${\n results.pagination.offset + results.pagination.limit\n } to see the next page.`\n }\n\n return output\n}\n\nexport function formatRegistryItems(\n items: z.infer<typeof registryItemSchema>[]\n) {\n return items.map((item) => {\n const parts: string[] = [\n `## ${item.name}`,\n item.description ? `\\n${item.description}\\n` : \"\",\n item.type ? `**Type:** ${item.type}` : \"\",\n item.files && item.files.length > 0\n ? `**Files:** ${item.files.length} file(s)`\n : \"\",\n item.dependencies && item.dependencies.length > 0\n ? `**Dependencies:** ${item.dependencies.join(\", \")}`\n : \"\",\n item.devDependencies && item.devDependencies.length > 0\n ? `**Dev Dependencies:** ${item.devDependencies.join(\", \")}`\n : \"\",\n ]\n return parts.filter(Boolean).join(\"\\n\")\n })\n}\n\nexport function formatItemExamples(\n items: z.infer<typeof registryItemSchema>[],\n query: string\n) {\n const sections = items.map((item) => {\n const parts: string[] = [\n `## Example: ${item.name}`,\n item.description ? `\\n${item.description}\\n` : \"\",\n ]\n\n if (item.files?.length) {\n item.files.forEach((file) => {\n if (file.content) {\n parts.push(`### Code (${file.path}):\\n`)\n parts.push(\"```tsx\")\n parts.push(file.content)\n parts.push(\"```\")\n }\n })\n }\n\n return parts.filter(Boolean).join(\"\\n\")\n })\n\n const header = `# Usage Examples\\n\\nFound ${items.length} example${\n items.length > 1 ? \"s\" : \"\"\n } matching \"${query}\":\\n`\n\n return header + sections.join(\"\\n\\n---\\n\\n\")\n}\n","import { getRegistryItems, searchRegistries } from \"@/src/registry\"\nimport { RegistryError } from \"@/src/registry/errors\"\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\"\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\"\nimport dedent from \"dedent\"\nimport { z } from \"zod\"\nimport { zodToJsonSchema } from \"zod-to-json-schema\"\n\nimport {\n formatItemExamples,\n formatRegistryItems,\n formatSearchResultsWithPagination,\n getMcpConfig,\n npxcreateui,\n} from \"./utils\"\n\nexport const server = new Server(\n {\n name: \"createui\",\n version: \"1.0.0\",\n },\n {\n capabilities: {\n resources: {},\n tools: {},\n },\n }\n)\n\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: [\n {\n name: \"get_project_registries\",\n description:\n \"Get configured registry names from components.json - Returns error if no components.json exists (use init_project to create one)\",\n inputSchema: zodToJsonSchema(z.object({})),\n },\n {\n name: \"list_items_in_registries\",\n description:\n \"List items from registries (requires components.json - use init_project if missing)\",\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n \"Array of registry names to search (e.g., ['@createui', '@acme'])\"\n ),\n limit: z\n .number()\n .optional()\n .describe(\"Maximum number of items to return\"),\n offset: z\n .number()\n .optional()\n .describe(\"Number of items to skip for pagination\"),\n })\n ),\n },\n {\n name: \"search_items_in_registries\",\n description:\n \"Search for components in registries using fuzzy matching (requires components.json). After finding an item, use get_item_examples_from_registries to see usage examples.\",\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n \"Array of registry names to search (e.g., ['@createui', '@acme'])\"\n ),\n query: z\n .string()\n .describe(\n \"Search query string for fuzzy matching against item names and descriptions\"\n ),\n limit: z\n .number()\n .optional()\n .describe(\"Maximum number of items to return\"),\n offset: z\n .number()\n .optional()\n .describe(\"Number of items to skip for pagination\"),\n })\n ),\n },\n {\n name: \"view_items_in_registries\",\n description:\n \"View detailed information about specific registry items including the name, description, type and files content. For usage examples, use get_item_examples_from_registries instead.\",\n inputSchema: zodToJsonSchema(\n z.object({\n items: z\n .array(z.string())\n .describe(\n \"Array of item names with registry prefix (e.g., ['@createui/button', '@createui/card'])\"\n ),\n })\n ),\n },\n {\n name: \"get_item_examples_from_registries\",\n description:\n \"Find usage examples and demos with their complete code. Search for patterns like 'accordion-demo', 'button example', 'card-demo', etc. Returns full implementation code with dependencies.\",\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n \"Array of registry names to search (e.g., ['@createui', '@acme'])\"\n ),\n query: z\n .string()\n .describe(\n \"Search query for examples (e.g., 'accordion-demo', 'button demo', 'card example', 'tooltip-demo', 'example-booking-form', 'example-hero'). Common patterns: '{item-name}-demo', '{item-name} example', 'example {item-name}'\"\n ),\n })\n ),\n },\n {\n name: \"get_add_command_for_items\",\n description:\n \"Get the createui CLI add command for specific items in a registry. This is useful for adding one or more components to your project.\",\n inputSchema: zodToJsonSchema(\n z.object({\n items: z\n .array(z.string())\n .describe(\n \"Array of items to get the add command for prefixed with the registry name (e.g., ['@createui/button', '@createui/card'])\"\n ),\n })\n ),\n },\n {\n name: \"get_audit_checklist\",\n description:\n \"After creating new components or generating new code files, use this tool for a quick checklist to verify that everything is working as expected. Make sure to run the tool after all required steps have been completed.\",\n inputSchema: zodToJsonSchema(z.object({})),\n },\n ],\n }\n})\n\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n try {\n if (!request.params.arguments) {\n throw new Error(\"No tool arguments provided.\")\n }\n\n switch (request.params.name) {\n case \"get_project_registries\": {\n const config = await getMcpConfig(process.cwd())\n\n if (!config?.registries) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No components.json found or no registries configured.\n\n To fix this:\n 1. Use the \\`init\\` command to create a components.json file\n 2. Or manually create components.json with a registries section`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: dedent`The following registries are configured in the current project:\n\n ${Object.keys(config.registries)\n .map((registry) => `- ${registry}`)\n .join(\"\\n\")}\n\n You can view the items in a registry by running:\n \\`${await npxcreateui(\"view @name-of-registry\")}\\`\n\n For example: \\`${await npxcreateui(\n \"view @createui\"\n )}\\` or \\`${await npxcreateui(\n \"view @createui @acme\"\n )}\\` to view multiple registries.\n `,\n },\n ],\n }\n }\n\n case \"search_items_in_registries\": {\n const inputSchema = z.object({\n registries: z.array(z.string()),\n query: z.string(),\n limit: z.number().optional(),\n offset: z.number().optional(),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const results = await searchRegistries(args.registries, {\n query: args.query,\n limit: args.limit,\n offset: args.offset,\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No items found matching \"${\n args.query\n }\" in registries ${args.registries.join(\n \", \"\n )}, Try searching with a different query or registry.`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: formatSearchResultsWithPagination(results, {\n query: args.query,\n registries: args.registries,\n }),\n },\n ],\n }\n }\n\n case \"list_items_in_registries\": {\n const inputSchema = z.object({\n registries: z.array(z.string()),\n limit: z.number().optional(),\n offset: z.number().optional(),\n cwd: z.string().optional(),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const results = await searchRegistries(args.registries, {\n limit: args.limit,\n offset: args.offset,\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No items found in registries ${args.registries.join(\n \", \"\n )}.`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: formatSearchResultsWithPagination(results, {\n registries: args.registries,\n }),\n },\n ],\n }\n }\n\n case \"view_items_in_registries\": {\n const inputSchema = z.object({\n items: z.array(z.string()),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const registryItems = await getRegistryItems(args.items, {\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (registryItems?.length === 0) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No items found for: ${args.items.join(\", \")}\n\n Make sure the item names are correct and include the registry prefix (e.g., @createui/button).`,\n },\n ],\n }\n }\n\n const formattedItems = formatRegistryItems(registryItems)\n\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Item Details:\n\n ${formattedItems.join(\"\\n\\n---\\n\\n\")}`,\n },\n ],\n }\n }\n\n case \"get_item_examples_from_registries\": {\n const inputSchema = z.object({\n query: z.string(),\n registries: z.array(z.string()),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const config = await getMcpConfig()\n\n const results = await searchRegistries(args.registries, {\n query: args.query,\n config,\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No examples found for query \"${args.query}\".\n\n Try searching with patterns like:\n - \"accordion-demo\" for accordion examples\n - \"button demo\" or \"button example\"\n - Component name followed by \"-demo\" or \"example\"\n\n You can also:\n 1. Use search_items_in_registries to find all items matching your query\n 2. View the main component with view_items_in_registries for inline usage documentation`,\n },\n ],\n }\n }\n\n const itemNames = results.items.map((item) => item.addCommandArgument)\n const fullItems = await getRegistryItems(itemNames, {\n config,\n useCache: false,\n })\n\n return {\n content: [\n {\n type: \"text\",\n text: formatItemExamples(fullItems, args.query),\n },\n ],\n }\n }\n\n case \"get_add_command_for_items\": {\n const args = z\n .object({\n items: z.array(z.string()),\n })\n .parse(request.params.arguments)\n\n return {\n content: [\n {\n type: \"text\",\n text: await npxcreateui(`add ${args.items.join(\" \")}`),\n },\n ],\n }\n }\n\n case \"get_audit_checklist\": {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`## Component Audit Checklist\n\n After adding or generating components, check the following common issues:\n\n - [ ] Ensure imports are correct i.e named vs default imports\n - [ ] If using next/image, ensure images.remotePatterns next.config.js is configured correctly.\n - [ ] Ensure all dependencies are installed.\n - [ ] Check for linting errors or warnings\n - [ ] Check for TypeScript errors\n - [ ] Use the Playwright MCP if available.\n `,\n },\n ],\n }\n }\n\n default:\n throw new Error(`Tool ${request.params.name} not found`)\n }\n } catch (error) {\n if (error instanceof z.ZodError) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Invalid input parameters:\n ${error.errors\n .map((e) => `- ${e.path.join(\".\")}: ${e.message}`)\n .join(\"\\n\")}\n `,\n },\n ],\n isError: true,\n }\n }\n\n if (error instanceof RegistryError) {\n let errorMessage = error.message\n\n if (error.suggestion) {\n errorMessage += `\\n\\n💡 ${error.suggestion}`\n }\n\n if (error.context) {\n errorMessage += `\\n\\nContext: ${JSON.stringify(error.context, null, 2)}`\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Error (${error.code}): ${errorMessage}`,\n },\n ],\n isError: true,\n }\n }\n\n const errorMessage = error instanceof Error ? error.message : String(error)\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Error: ${errorMessage}`,\n },\n ],\n isError: true,\n }\n }\n})\n"]}
@@ -0,0 +1,32 @@
1
+ import {o,n,f,d,c,e,p,v,q as q$1,b as b$1,r,s,t,z as z$1,B as B$1,g}from'./chunk-TIYHWTW7.js';import {z}from'zod';import {Project,SyntaxKind,ScriptKind}from'ts-morph';import*as h from'path';import h__default,{basename}from'path';import*as M from'fs/promises';import {tmpdir,homedir}from'os';import {green,cyan,yellow,red}from'kleur/colors';import {loadConfig,createMatchPath}from'tsconfig-paths';import {cosmiconfig}from'cosmiconfig';import je from'fast-glob';import ke from'fs-extra';import {existsSync,statSync,promises}from'fs';import dr from'ora';import {transformFromAstSync}from'@babel/core';import {parse}from'@babel/parser';import Ir from'@babel/plugin-transform-typescript';import*as Oe from'recast';import Dr from'prompts';import ae from'deepmerge';import {HttpsProxyAgent}from'https-proxy-agent';import us from'node-fetch';import {createHash}from'crypto';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"},b=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}}},Z=class extends b{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 b{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 b{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";}},Re=class extends b{constructor(r,s,n,i){let a=s?`Failed to fetch from registry (${s}): ${r}`:`Failed to fetch from registry: ${r}`,o=typeof i=="string"&&i?`${a} - ${i}`:a,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(o,{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 b{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";}},ce=class extends b{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";}},$=class extends b{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://dev.createui.co/schema/registry-item.json."});this.item=r;this.parseError=s,this.name="RegistryParseError";}parseError},Ee=class extends b{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";}},Ce=class extends b{constructor(r){let s=`Invalid registry namespace: "${r}". Registry names must start with @ (e.g., @createui, @acme).`;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 Ie=class extends b{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 createui@latest init' to regenerate a valid configuration."});this.cwd=r;this.name="ConfigParseError";}},Se=class extends b{parseError;constructor(t){let r="Failed to parse registries index";if(t instanceof z.ZodError){let s=t.errors.filter(n=>n.path.length>0).map(n=>`"${n.path[0]}"`).filter((n,i,a)=>a.indexOf(n)===i);s.length>0?r=`Failed to parse registries index. Invalid registry namespace(s): ${s.join(", ")}
14
+ ${t.errors.map(n=>` - ${n.path.join(".")}: ${n.message}`).join(`
15
+ `)}`:r=`Failed to parse registries index:
16
+ ${t.errors.map(n=>` - ${n.path.join(".")}: ${n.message}`).join(`
17
+ `)}`;}super(r,{code:F.PARSE_ERROR,cause:t,context:{parseError:t},suggestion:"The registries index may be corrupted or have invalid registry namespace format. Registry names must start with @ (e.g., @createui, @example)."}),this.parseError=t,this.name="RegistriesIndexParseError";}};var lt=async({sourceFile:e,config:t})=>{let s=t.menuColor==="inverted"?"dark":"";for(let n of e.getDescendantsOfKind(SyntaxKind.JsxAttribute)){if(n.getNameNode().getText()!=="className")continue;let a=n.getInitializer();if(!a)continue;let o=a.getText();if(!o.includes("cn-menu-target"))continue;let c=o.replace(/cn-menu-target/g,s);s||(c=c.replace(/\s{2,}/g," "),c=c.replace(/"\s+/g,'"'),c=c.replace(/\s+"/g,'"'),c=c.replace(/,\s*""\s*,/g,","),c=c.replace(/\(\s*""\s*,/g,"("),c=c.replace(/,\s*""\s*\)/g,")")),n.setInitializer(c);}return e};var X=process.env.REGISTRY_URL??"https://dev.createui.co/r",ft=[{name:"neutral",label:"Neutral"},{name:"gray",label:"Gray"},{name:"zinc",label:"Zinc"},{name:"stone",label:"Stone"},{name:"slate",label:"Slate"}],Vt=[{name:"indigo",label:"Indigo"},{name:"lime",label:"Lime"},{name:"green",label:"Green"},{name:"red",label:"Red"},{name:"orange",label:"Orange"},{name:"yellow",label:"Yellow"},{name:"cyan",label:"Cyan"},{name:"blue",label:"Blue"}],Kt=Vt,Mt=[{name:"gray",label:"Gray"},{name:"slate",label:"Slate"},{name:"zinc",label:"Zinc"},{name:"base",label:"Base"},{name:"stone",label:"Stone"}];Kt.map(e=>e.name);var js=Mt.map(e=>e.name),Ns="gray",Bt=[{name:"v1",label:"Default (Geist + JetBrains Mono)"}],$s=Bt.map(e=>e.name),Fs="v1",O={"@createui":`${X}/{name}.json`};var Os=[{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 fe(e){let t=[],r=/\${(\w+)}/g,s;for(;(s=r.exec(e))!==null;)t.push(s[1]);return t}var Ht=/^(@[a-zA-Z0-9](?:[a-zA-Z0-9-_]*[a-zA-Z0-9])?)\/(.+)$/;function Q(e){if(!e.startsWith("@"))return {registry:null,item:e};let t=e.match(Ht);return t?{registry:t[1],item:t[2]}:{registry:null,item:e}}var k={"next-app":{name:"next-app",label:"Next.js",links:{installation:"https://dev.createui.co/docs/installation/next",tailwind:"https://tailwindcss.com/docs/guides/nextjs"}},"next-pages":{name:"next-pages",label:"Next.js",links:{installation:"https://dev.createui.co/docs/installation/next",tailwind:"https://tailwindcss.com/docs/guides/nextjs"}},remix:{name:"remix",label:"Remix",links:{installation:"https://dev.createui.co/docs/installation/remix",tailwind:"https://tailwindcss.com/docs/guides/remix"}},"react-router":{name:"react-router",label:"React Router",links:{installation:"https://dev.createui.co/docs/installation/react-router",tailwind:"https://tailwindcss.com/docs/installation/framework-guides/react-router"}},vite:{name:"vite",label:"Vite",links:{installation:"https://dev.createui.co/docs/installation/vite",tailwind:"https://tailwindcss.com/docs/guides/vite"}},astro:{name:"astro",label:"Astro",links:{installation:"https://dev.createui.co/docs/installation/astro",tailwind:"https://tailwindcss.com/docs/guides/astro"}},laravel:{name:"laravel",label:"Laravel",links:{installation:"https://dev.createui.co/docs/installation/laravel",tailwind:"https://tailwindcss.com/docs/guides/laravel"}},"tanstack-start":{name:"tanstack-start",label:"TanStack Start",links:{installation:"https://dev.createui.co/docs/installation/tanstack",tailwind:"https://tailwindcss.com/docs/installation/using-postcss"}},gatsby:{name:"gatsby",label:"Gatsby",links:{installation:"https://dev.createui.co/docs/installation/gatsby",tailwind:"https://tailwindcss.com/docs/guides/gatsby"}},expo:{name:"expo",label:"Expo",links:{installation:"https://dev.createui.co/docs/installation/expo",tailwind:"https://www.nativewind.dev/docs/getting-started/installation"}},manual:{name:"manual",label:"Manual",links:{installation:"https://dev.createui.co/docs/installation/manual",tailwind:"https://tailwindcss.com/docs/installation"}}};var j={error:red,warn:yellow,info:cyan,success:green};async function N(e,t){return createMatchPath(t.absoluteBaseUrl,t.paths)(e,void 0,()=>true,[".ts",".tsx",".jsx",".js",".css"])}var Zs="@/components",Xs="@/lib/utils",Qs="app/globals.css",en="tailwind.config.js";var be=cosmiconfig("components",{searchPlaces:["components.json"]});async function Te(e){let t=await tr(e);return t?(t.iconLibrary||(t.iconLibrary="lucide"),await Me(e,t)):null}async function Me(e,t){t.registries={...O,...t.registries||{}};let r=await loadConfig(e);if(r.resultType==="failed")throw new Error(`Failed to load ${t.tsx?"tsconfig":"jsconfig"}.json. ${r.message??""}`.trim());return d.parse({...t,resolvedPaths:{cwd:e,tailwindConfig:t.tailwind.config?h__default.resolve(e,t.tailwind.config):"",tailwindCss:h__default.resolve(e,t.tailwind.css),utils:await N(t.aliases.utils,r),components:await N(t.aliases.components,r),ui:t.aliases.ui?await N(t.aliases.ui,r):h__default.resolve(await N(t.aliases.components,r)??e,"ui"),lib:t.aliases.lib?await N(t.aliases.lib,r):h__default.resolve(await N(t.aliases.utils,r)??e,".."),hooks:t.aliases.hooks?await N(t.aliases.hooks,r):h__default.resolve(await N(t.aliases.components,r)??e,"..","hooks")}})}async function tr(e){try{let t=await be.search(e);if(!t)return null;let r=c.parse(t.config);if(r.registries){for(let s of Object.keys(r.registries))if(s in O)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 ${j.info(r)}.`)}}async function tn(e$1){let t={};for(let s of Object.keys(e$1.aliases)){if(!sr(s,e$1))continue;let n=e$1.resolvedPaths[s],i=await rr(e$1.resolvedPaths.cwd,n);if(!i){t[s]=e$1;continue}t[s]=await Te(i);}let r=e.safeParse(t);return r.success?r.data:null}async function rr(e,t){let r=nr(e,t),s=h__default.relative(r,t),i=(await je.glob("**/package.json",{cwd:r,deep:3,ignore:["**/node_modules/**","**/dist/**","**/build/**","**/public/**"]})).map(a=>h__default.dirname(a)).find(a=>s.startsWith(a));return i?h__default.join(r,i):null}function sr(e,t){return Object.keys(t.resolvedPaths).filter(r=>r!=="utils").includes(e)}function nr(e,t){let r=e.split(h__default.sep),s=t.split(h__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(h__default.sep)}function pt(e){let t={resolvedPaths:{cwd:process.cwd(),tailwindConfig:"",tailwindCss:"",utils:"",components:"",ui:"",lib:"",hooks:""},tailwind:{config:"",css:"",baseColor:"",cssVariables:false},rsc:false,tsx:true,aliases:{components:"",utils:""},registries:{...O}};return e?{...t,...e,resolvedPaths:{...t.resolvedPaths,...e.resolvedPaths||{}},tailwind:{...t.tailwind,...e.tailwind||{}},aliases:{...t.aliases,...e.aliases||{}},registries:{...t.registries,...e.registries||{}}}:t}function Be(e="",t=true){let r=h__default.join(e,"package.json");return ke.readJSONSync(r,{throws:t})}var Ne=["**/node_modules/**",".next","public","dist","build"];z.object({compilerOptions:z.object({paths:z.record(z.string().or(z.array(z.string())))})});async function te(e){let[t,r,s,n,i,a,o,c]=await Promise.all([je.glob("**/{next,vite,astro,app}.config.*|gatsby-config.*|composer.json|react-router.config.*",{cwd:e,deep:3,ignore:Ne}),ke.pathExists(h__default.resolve(e,"src")),gr(e),pr(e),fr(e),lr(e),mr(e),Be(e,false)]),f=await ke.pathExists(h__default.resolve(e,`${r?"src/":""}app`)),l={framework:k.manual,isSrcDir:r,isRSC:false,isTsx:s,tailwindConfigFile:n,tailwindCssFile:i,tailwindVersion:a,frameworkVersion:null,aliasPrefix:o};if(t.find(m=>m.startsWith("next.config."))?.length)return l.framework=f?k["next-app"]:k["next-pages"],l.isRSC=f,l.frameworkVersion=await cr(l.framework,c),l;if(t.find(m=>m.startsWith("astro.config."))?.length)return l.framework=k.astro,l;if(t.find(m=>m.startsWith("gatsby-config."))?.length)return l.framework=k.gatsby,l;if(t.find(m=>m.startsWith("composer.json"))?.length)return l.framework=k.laravel,l;if(Object.keys(c?.dependencies??{}).find(m=>m.startsWith("@remix-run/")))return l.framework=k.remix,l;if([...Object.keys(c?.dependencies??{}),...Object.keys(c?.devDependencies??{})].find(m=>m.startsWith("@tanstack/react-start")))return l.framework=k["tanstack-start"],l;if(t.find(m=>m.startsWith("react-router.config."))?.length)return l.framework=k["react-router"],l;if(t.find(m=>m.startsWith("vite.config."))?.length)return l.framework=k.vite,l;let g=t.find(m=>m.startsWith("app.config"));return g?.length&&(await ke.readFile(h__default.resolve(e,g),"utf8")).includes("defineConfig")?(l.framework=k.vite,l):(c?.dependencies?.expo&&(l.framework=k.expo),l)}async function cr(e,t){if(!t||!["next-app","next-pages"].includes(e.name))return null;let r=t.dependencies?.next||t.devDependencies?.next;if(!r)return null;let s=r.match(/^[\^~]?(\d+\.\d+\.\d+)/);if(s)return s[1];let n=r.match(/(\d+\.\d+\.\d+)/);return n?n[1]:r}async function lr(e){let[t,r]=await Promise.all([Be(e,false),Te(e)]);return r?.tailwind?.config===""?"v4":!t?.dependencies?.tailwindcss&&!t?.devDependencies?.tailwindcss?null:"v4"}async function fr(e){let t=await je.glob(["**/*.css","**/*.scss"],{cwd:e,deep:5,ignore:Ne});if(!t.length)return null;for(let r of t){let s=await ke.readFile(h__default.resolve(e,r),"utf8");if(s.includes('@import "tailwindcss"')||s.includes("@import 'tailwindcss'"))return r}return null}async function pr(e){let t=await je.glob("tailwind.config.*",{cwd:e,deep:3,ignore:Ne});return t.length?t[0]:null}async function mr(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 gr(e){return (await je.glob("tsconfig.*",{cwd:e,deep:1,ignore:Ne})).length>0}async function xn(e,t=null){let[r,s]=await Promise.all([Te(e),t?Promise.resolve(t):te(e)]);if(r)return r;if(!s||!s.tailwindCssFile)return null;let n={$schema:"https://dev.createui.co/schema.json",rsc:s.isRSC,tsx:s.isTsx,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 Me(e,n)}function mt(e,t,r={}){let{ignoreImports:s=false}=r,n=e.replace(/\r\n/g,`
18
+ `).trim(),i=t.replace(/\r\n/g,`
19
+ `).trim();if(n===i)return true;if(!s)return false;let a=/^(import\s+(?:type\s+)?(?:\*\s+as\s+\w+|\{[^}]*\}|\w+)?(?:\s*,\s*(?:\{[^}]*\}|\w+))?\s+from\s+["'])([^"']+)(["'])/gm,o=l=>l.replace(a,(g,m,x,d)=>{if(x.startsWith("."))return `${m}${x}${d}`;let v=x.split("/"),p=v[v.length-1];return `${m}@normalized/${p}${d}`}),c=o(n),f=o(i);return c===f}function G(e){let t=h__default.basename(e);return /^\.env(\.|$)/.test(t)}function ut(e){let t=[".env.local",".env",".env.development.local",".env.development"];for(let r of t){let s=h__default.join(e,r);if(existsSync(s))return s}return null}function re(e){let t=e.split(`
20
+ `),r={};for(let s of t){let n=s.trim();if(!n||n.startsWith("#"))continue;let i=n.indexOf("=");if(i===-1)continue;let a=n.substring(0,i).trim(),o=n.substring(i+1).trim();a&&(r[a]=o.replace(/^["']|["']$/g,""));}return r}function dt(e,t){let r=re(e),s=re(t),n=[];for(let i of Object.keys(s))i in r||n.push(i);return n}function ht(e,t){let r=re(e),s=re(t),n=e.trimEnd();n&&!n.endsWith(`
21
+ `)&&(n+=`
22
+ `);let i=[];for(let[a,o]of Object.entries(s))a in r||i.push(`${a}=${o}`);return i.length>0?(n&&(n+=`
23
+ `),n+=i.join(`
24
+ `),n+`
25
+ `):n&&!n.endsWith(`
26
+ `)?n+`
27
+ `:n}var R={error(...e){console.log(j.error(e.join(" ")));},warn(...e){console.log(j.warn(e.join(" ")));},info(...e){console.log(j.info(e.join(" ")));},success(...e){console.log(j.success(e.join(" ")));},log(...e){console.log(e.join(" "));},break(){console.log("");}};function pe(e,t){return dr({text:e,isSilent:t?.silent})}var $e=async({sourceFile:e,config:t,baseColor:r})=>(t.tailwind?.cssVariables||!r?.inlineColors||e.getDescendantsOfKind(SyntaxKind.StringLiteral).forEach(s=>{let n=s.getLiteralText(),i=wr(n,r.inlineColors).trim();i!==n&&s.setLiteralValue(i);}),e);function yr(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(),a=n.join(":");return t.push(a??null,i??null,s??null),t}var xr=["bg-","text-","border-","ring-offset-","ring-"];function wr(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[a,o,c]=yr(i),f=xr.find(g=>o?.startsWith(g));if(!f){s.has(i)||s.add(i);continue}let l=o?.replace(f,"");if(l&&l in t.light){s.add([a,`${f}${t.light[l]}`].filter(Boolean).join(":")+(c?`/${c}`:"")),n.add(["dark",a,`${f}${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 Fe=async({sourceFile:e,config:t,isRemote:r})=>{let s=t.aliases?.utils,i=`${typeof s=="string"&&s.includes("/")?s.split("/")[0]:"@"}/lib/utils`;if(![".tsx",".ts",".jsx",".js"].includes(e.getExtension()))return e;for(let a of e.getImportStringLiterals()){let o=Rr(a.getLiteralValue(),t,r);if(a.setLiteralValue(o),i===o||o==="@/lib/utils"){if(!a.getFirstAncestorByKind(SyntaxKind.ImportDeclaration)?.getNamedImports().some(l=>l.getName()==="cn")||!t.aliases.utils)continue;a.setLiteralValue(i===o?o.replace(i,t.aliases.utils):t.aliases.utils);}}return e};function Rr(e,t,r=false){if(!e.startsWith("@/")&&!r)return e;if(r&&e.startsWith("@/")&&(e=e.replace(/^@\//,"@/registry/_/")),!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 Sr={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"]},yt=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let s=Oe.parse(r,{parser:{parse:i=>parse(i,Sr)}}),n=transformFromAstSync(s,r,{cloneInputAst:false,code:false,ast:true,plugins:[Ir],configFile:false});if(!n||!n.ast)throw new Error("Failed to transform JSX");return Oe.print(n.ast).code};var Tr=/^["']use client["']$/g,Ae=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(SyntaxKind.ExpressionStatement);return r&&Tr.test(r.getText())&&r.remove(),e};var _e=async({sourceFile:e,config:t})=>(t.tailwind?.prefix&&(e.getDescendantsOfKind(SyntaxKind.CallExpression).filter(r=>r.getExpression().getText()==="cva").forEach(r=>{if(r.getArguments()[0]?.isKind(SyntaxKind.StringLiteral)){let s=r.getArguments()[0];s&&s.replaceWithText(`"${U(s.getText()?.replace(/"|'/g,""),t.tailwind.prefix)}"`);}r.getArguments()[1]?.isKind(SyntaxKind.ObjectLiteralExpression)&&r.getArguments()[1]?.getDescendantsOfKind(SyntaxKind.PropertyAssignment).find(s=>s.getName()==="variants")?.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach(s=>{s.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach(n=>{let i=n.getInitializerIfKind(SyntaxKind.StringLiteral);i&&i?.replaceWithText(`"${U(i.getText()?.replace(/"|'/g,""),t.tailwind.prefix)}"`);});});}),e.getDescendantsOfKind(SyntaxKind.JsxAttribute).forEach(r=>{if(r.getNameNode().getText()==="className"){if(r.getInitializer()?.isKind(SyntaxKind.StringLiteral)){let s=r.getInitializer();s&&s.replaceWithText(`"${U(s.getText()?.replace(/"|'/g,""),t.tailwind.prefix)}"`);}if(r.getInitializer()?.isKind(SyntaxKind.JsxExpression)){let s=r.getInitializer()?.getDescendantsOfKind(SyntaxKind.CallExpression).find(n=>n.getExpression().getText()==="cn");s&&s.getArguments().forEach(n=>{(n.isKind(SyntaxKind.ConditionalExpression)||n.isKind(SyntaxKind.BinaryExpression))&&n.getChildrenOfKind(SyntaxKind.StringLiteral).forEach(i=>{i.replaceWithText(`"${U(i.getText()?.replace(/"|'/g,""),t.tailwind.prefix)}"`);}),n.isKind(SyntaxKind.StringLiteral)&&n.replaceWithText(`"${U(n.getText()?.replace(/"|'/g,""),t.tailwind.prefix)}"`);});}}r.getNameNode().getText()==="classNames"&&r.getInitializer()?.isKind(SyntaxKind.JsxExpression)&&r.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach(s=>{if(s.getInitializer()?.isKind(SyntaxKind.CallExpression)){let n=s.getInitializerIfKind(SyntaxKind.CallExpression);n&&n.getArguments().forEach(i=>{i.isKind(SyntaxKind.ConditionalExpression)&&i.getChildrenOfKind(SyntaxKind.StringLiteral).forEach(a=>{a.replaceWithText(`"${U(a.getText()?.replace(/"|'/g,""),t.tailwind.prefix)}"`);}),i.isKind(SyntaxKind.StringLiteral)&&i.replaceWithText(`"${U(i.getText()?.replace(/"|'/g,""),t.tailwind.prefix)}"`);});}if(s.getInitializer()?.isKind(SyntaxKind.StringLiteral)&&s.getNameNode().getText()!=="variant"){let n=s.getInitializer();n&&n.replaceWithText(`"${U(n.getText()?.replace(/"|'/g,""),t.tailwind.prefix)}"`);}});})),e);function U(e,t=""){return e.split(" ").map(r=>r.indexOf(`${t}:`)===0?r:`${t}:${r.trim()}`).join(" ")}var $r=new Project({compilerOptions:{}});async function Fr(e){let t=await promises.mkdtemp(h__default.join(tmpdir(),"createui-"));return h__default.join(t,e)}async function wt(e,t=[Fe,Ae,$e,_e]){let r=await Fr(e.filename),s=$r.createSourceFile(r,e.raw,{scriptKind:ScriptKind.TSX});for(let n of t)await n({sourceFile:s,...e});return e.transformJsx?await yt({sourceFile:s,...e}):s.getText()}var Or=["a","span","div","Link","label","Label"],vt=async({sourceFile:e,config:t})=>{if(!t.style?.startsWith("base-"))return e;let r=[],s=e.getDescendantsOfKind(SyntaxKind.JsxElement);for(let n of s){let i=n.getOpeningElement(),a=i.getAttribute("asChild");if(!a)continue;let o=i.getTagNameNode().getText(),f=n.getJsxChildren().find(d=>d.getKind()===SyntaxKind.JsxElement||d.getKind()===SyntaxKind.JsxSelfClosingElement);if(!f){a.remove();continue}let l,g,m;if(f.getKind()===SyntaxKind.JsxSelfClosingElement){let d=f.asKindOrThrow(SyntaxKind.JsxSelfClosingElement);l=d.getTagNameNode().getText(),g=d.getAttributes().map(v=>v.getText()).join(" "),m="";}else {let d=f.asKindOrThrow(SyntaxKind.JsxElement),v=d.getOpeningElement();l=v.getTagNameNode().getText(),g=v.getAttributes().map(p=>p.getText()).join(" "),m=d.getJsxChildren().map(p=>p.getText()).join("");}let x=Or.includes(l);r.push({parentElement:n,parentTagName:o,childTagName:l,childProps:g,childChildren:m,needsNativeButton:x});}for(let n of r.reverse()){let i=n.parentElement.getOpeningElement();n.parentElement.getClosingElement();let o=i.getAttributes().filter(m=>m.getKind()===SyntaxKind.JsxAttribute?m.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText()!=="asChild":true).map(m=>m.getText()).join(" "),c=n.childProps?`{<${n.childTagName} ${n.childProps} />}`:`{<${n.childTagName} />}`,f=o?`${o} `:"";f+=`render=${c}`,n.needsNativeButton&&(f+=" nativeButton={false}");let l=n.childChildren.trim()?`${n.childChildren}`:"",g=`<${n.parentTagName} ${f}>${l}</${n.parentTagName}>`;n.parentElement.replaceWithText(g);}return e};var Rt=async({sourceFile:e})=>(e.getFunctions().forEach(t=>{t.getName()==="middleware"&&t.rename("proxy");}),e.getVariableDeclarations().forEach(t=>{t.getName()==="middleware"&&t.rename("proxy");}),e.getExportDeclarations().forEach(t=>{t.getNamedExports().forEach(s=>{s.getName()==="middleware"&&s.setName("proxy"),s.getAliasNode()?.getText()==="middleware"&&s.setAlias("proxy");});}),e);async function Si(e,t,r){if(!e?.length)return {filesCreated:[],filesUpdated:[],filesSkipped:[]};r={overwrite:false,force:false,silent:false,isRemote:false,isWorkspace:false,...r};let s=pe("Updating files.",{silent:r.silent})?.start(),[n,i]=await Promise.all([te(t.resolvedPaths.cwd),t.tailwind.baseColor?It(t.tailwind.baseColor):Promise.resolve(void 0)]),a=[],o=[],c=[],f=[],l=null;for(let d=0;d<e.length;d++){let v=e[d];if(!v.content)continue;let p=He(v,t,{isSrcDir:n?.isSrcDir,framework:n?.framework.name,commonRoot:Je(e.map(w=>w.path),v.path),path:r.path,fileIndex:d});if(!p)continue;let T=basename(v.path),u=h__default.dirname(p);if(t.tsx||(p=p.replace(/\.tsx?$/,w=>w===".tsx"?".jsx":".js")),G(p)&&!existsSync(p)){let w=ut(u);w&&(p=w);}let y=existsSync(p);if(y&&statSync(p).isDirectory())throw new Error(`Cannot write to ${p}: path exists and is a directory. Please provide a file path instead.`);let I=v.type==="registry:file"||v.type==="registry:item",C=G(p)||I?v.content:await wt({filename:v.path,raw:v.content,config:t,baseColor:i,transformJsx:!t.tsx,isRemote:r.isRemote},[Fe,Ae,$e,_e,lt,vt,...Et(p,n,t)?[Rt]:[]]);if(y&&!G(p)){let w=await promises.readFile(p,"utf-8");if(mt(w,C,{ignoreImports:r.isWorkspace})){c.push(h__default.relative(t.resolvedPaths.cwd,p));continue}}if(y&&!r.overwrite&&!G(p)){s.stop(),r.rootSpinner&&r.rootSpinner.stop();let{overwrite:w}=await Dr({type:"confirm",name:"overwrite",message:`The file ${j.info(T)} already exists. Would you like to overwrite?`,initial:false});if(!w){c.push(h__default.relative(t.resolvedPaths.cwd,p)),r.rootSpinner&&r.rootSpinner.start();continue}s?.start(),r.rootSpinner&&r.rootSpinner.start();}if(Et(p,n,t)&&(p=p.replace(/middleware\.(ts|js)$/,"proxy.$1")),existsSync(u)||await promises.mkdir(u,{recursive:true}),G(p)&&y){let w=await promises.readFile(p,"utf-8"),H=ht(w,C);if(f=dt(w,C),l=h__default.relative(t.resolvedPaths.cwd,p),!f.length){c.push(h__default.relative(t.resolvedPaths.cwd,p));continue}await promises.writeFile(p,H,"utf-8"),o.push(h__default.relative(t.resolvedPaths.cwd,p));continue}await promises.writeFile(p,C,"utf-8"),y?o.push(h__default.relative(t.resolvedPaths.cwd,p)):(a.push(h__default.relative(t.resolvedPaths.cwd,p)),G(p)&&(f=Object.keys(re(C)),l=h__default.relative(t.resolvedPaths.cwd,p)));}let g=[...a,...o,...c],m=await Mr(g,t);if(o.push(...m),o=o.filter(d=>!a.includes(d)),!(a.length||o.length)&&!c.length&&s?.info("No files updated."),a=Array.from(new Set(a)),o=Array.from(new Set(o)),c=Array.from(new Set(c)),a.length){if(s?.succeed(`Created ${a.length} ${a.length===1?"file":"files"}:`),!r.silent)for(let d of a)R.log(` - ${d}`);}else s?.stop();if(o.length&&(pe(`Updated ${o.length} ${o.length===1?"file":"files"}:`,{silent:r.silent})?.info(),!r.silent))for(let d of o)R.log(` - ${d}`);if(c.length&&(pe(`Skipped ${c.length} ${o.length===1?"file":"files"}: (files might be identical, use --overwrite to overwrite)`,{silent:r.silent})?.info(),!r.silent))for(let d of c)R.log(` - ${d}`);if(f.length&&l&&(pe(`Added the following variables to ${j.info(l)}:`)?.info(),!r.silent))for(let d of f)R.log(` ${j.success("+")} ${d}`);return r.silent||R.break(),{filesCreated:a,filesUpdated:o,filesSkipped:c}}function He(e,t,r){if(r.path){let i=h__default.isAbsolute(r.path)?r.path:h__default.join(t.resolvedPaths.cwd,r.path);if(/\.[^/\\]+$/.test(i)){if(r.fileIndex===0)return i}else {let o=h__default.basename(e.path);return h__default.join(i,o)}}if(e.target){if(e.target.startsWith("~/"))return h__default.join(t.resolvedPaths.cwd,e.target.replace("~/",""));let i=e.target;return e.type==="registry:page"&&(i=Kr(i,r.framework),!i)?"":r.isSrcDir?h__default.join(t.resolvedPaths.cwd,"src",i.replace("src/","")):h__default.join(t.resolvedPaths.cwd,i.replace("src/",""))}let s=Ur(e,t),n=Vr(e.path,s);return h__default.join(s,n)}function Ur(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 Je(e,t){let r=e.map(a=>a.replace(/^\//,"")),s=t.replace(/^\//,""),n=s.split("/").slice(0,-1).join("/");if(!n)return "";let i=n.split("/");for(let a=i.length;a>0;a--){let o=i.slice(0,a).join("/");if(r.some(f=>f!==s&&f.startsWith(o+"/")))return "/"+o}return "/"+n}function Vr(e,t){let r=e.replace(/^\/|\/$/g,""),s=t.replace(/^\/|\/$/g,""),n=r.split("/"),i=s.split("/"),a=i[i.length-1],o=n.findIndex(c=>c===a);return o===-1?n[n.length-1]:n.slice(o+1).join("/")}function Kr(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 Mr(e,t){let r=new Project({compilerOptions:{}}),s=await te(t.resolvedPaths.cwd),n=loadConfig(t.resolvedPaths.cwd),i=[];if(!s||n.resultType==="failed")return [];for(let a of e){let o=h__default.resolve(t.resolvedPaths.cwd,a);if(!existsSync(o))continue;let c=await promises.readFile(o,"utf-8"),f=await promises.mkdtemp(h__default.join(tmpdir(),"createui-")),l=r.createSourceFile(h__default.join(f,basename(o)),c,{scriptKind:ScriptKind.TSX});if(![".tsx",".ts",".jsx",".js"].includes(l.getExtension()))continue;let g=l.getImportDeclarations();for(let m of g){let x=m.getModuleSpecifierValue();if(s?.aliasPrefix&&!x.startsWith(`${s.aliasPrefix}/`))continue;let d=await N(x,n);if(!d)continue;let v=Br(d,e,t);if(!v)continue;let p=Hr(v,t,s);!p||p===x||(m.setModuleSpecifier(p),await promises.writeFile(o,l.getFullText(),"utf-8"),i.push(a));}}return i}function Br(e,t,r,s=[".tsx",".ts",".js",".jsx",".css"]){let n=h__default.normalize(r.resolvedPaths.cwd),i=t.map(p=>p.split(h__default.sep).join(h__default.posix.sep)),a=new Set(i),o=h__default.extname(e),c=o!=="",f=c?e.slice(0,-o.length):e,g=h__default.relative(n,f).split(h__default.sep).join(h__default.posix.sep),m=c?[o]:s,x=new Set;for(let p of m){let T=f+p,u=h__default.posix.normalize(h__default.relative(n,T));(a.has(u)||existsSync(T))&&x.add(u);let y=h__default.join(f,`index${p}`),I=h__default.posix.normalize(h__default.relative(n,y));(a.has(I)||existsSync(y))&&x.add(I);}let d=h__default.basename(f);for(let p of i)m.some(T=>p.endsWith(`/${d}${T}`))&&x.add(p);return x.size===0?null:Array.from(x).sort((p,T)=>{let u=h__default.posix.extname(p),y=h__default.posix.extname(T),I=m.indexOf(u)-m.indexOf(y);if(I!==0)return I;let C=g&&p.startsWith(g)?-1:1,w=g&&T.startsWith(g)?-1:1;return C-w})[0]}function Hr(e,t,r){let s=h__default.normalize(h__default.join(t.resolvedPaths.cwd,e)),n=Object.entries(t.resolvedPaths).filter(([,d])=>d&&s.startsWith(h__default.normalize(d+h__default.sep))).sort((d,v)=>v[1].length-d[1].length);if(n.length===0)return null;let[i,a]=n[0],o=h__default.relative(a,s);o=o.split(h__default.sep).join("/");let c=h__default.posix.extname(o),l=[".ts",".tsx",".js",".jsx"].includes(c)?"":c,g=o.slice(0,o.length-c.length);g.endsWith("/index")&&(g=g.slice(0,-6));let m=i==="cwd"?r.aliasPrefix:t.aliases[i];if(!m)return null;let x=g===""?"":`/${g}`;return x=x.replace("/src",""),`${m}${x}${l}`}function Et(e,t,r){let s=e===h__default.join(r.resolvedPaths.cwd,"middleware.ts")||e===h__default.join(r.resolvedPaths.cwd,"middleware.js"),n=t?.framework.name==="next-app"||t?.framework.name==="next-pages";if(!s||!n||!t?.frameworkVersion)return false;let i=parseInt(t.frameworkVersion.split(".")[0]);return !isNaN(i)&&i>=16}var bt=[".tsx",".ts",".jsx",".js",".css"],Tt=["lib/utils.ts"],Zr=[/^(react|react-dom|next)(\/.*)?$/,/^(node|jsr|npm):.*$/],Xr=new Project({compilerOptions:{}});function Qr(e){if(Zr.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=h.resolve(t.resolvedPaths.cwd,e),i=h.relative(t.resolvedPaths.cwd,n);if(Tt.includes(i))return {dependencies:[],files:[]};let a=h.extname(e);if(!bt.includes(a))return {dependencies:[],files:[]};if(s.has(i))return {dependencies:[],files:[]};if(s.add(i),!(await M.stat(n)).isFile())return {dependencies:[],files:[]};let c=await M.readFile(n,"utf-8"),f=await ts(h.basename(n)),l=Xr.createSourceFile(f,c,{scriptKind:ScriptKind.TSX}),g=await loadConfig(t.resolvedPaths.cwd);if(g.resultType==="failed")return {dependencies:[],files:[]};let m=[],x=new Set,d=Pt(e),v={path:i,type:d,target:""};m.push(v);let p=l.getImportDeclarations();for(let u of p){let y=u.getModuleSpecifierValue(),I=y.startsWith(".");if(!y.startsWith(`${r.aliasPrefix}/`)&&!I){let L=Qr(y);L&&x.add(L);continue}let w=await N(y,g);if(I&&(w=h.resolve(h.dirname(n),y)),!w)continue;if(!h.extname(w))for(let L of bt){let Ye=`${w}${L}`;try{await M.access(Ye),w=Ye;break}catch{continue}}let _=h.relative(t.resolvedPaths.cwd,w);if(s.has(_)||Tt.includes(_))continue;let z=Pt(y),ye={path:_,type:z,target:""};(z==="registry:page"||z==="registry:file")&&(ye.target=y),m.push(ye);let Y=await es(_,t,r,s);if(Y.files)for(let L of Y.files)s.has(L.path)||(s.add(L.path),m.push(L));Y.dependencies&&Y.dependencies.forEach(L=>x.add(L));}let T=Array.from(new Map(m.map(u=>[u.path,u])).values());return {dependencies:Array.from(x),files:T}}async function ts(e){let t=await M.mkdtemp(h.join(tmpdir(),"createui-"));return h.join(t,e)}function Pt(e){return e.includes("/ui/")?"registry:ui":e.includes("/lib/")?"registry:lib":e.includes("/hooks/")?"registry:hook":(e.includes("/components/"),"registry:component")}function A(e){try{return new URL(e),!0}catch{return false}}function ne(e){return e.endsWith(".json")&&!A(e)}function Li(e){return !e||e.type!=="registry:item"&&e.type!=="registry:file"?false:(e.files??[]).every(r=>!!r.target&&(r.type==="registry:file"||r.type==="registry:item"))}async function kt(e,t){if(!rs(t))return z.array(g).parse(e.flat().filter(Boolean));let r=await te(t.resolvedPaths.cwd),s=new Map,n=z.array(g).parse(e.flat().filter(Boolean));return n.forEach(i=>{let a=He(i,t,{isSrcDir:r?.isSrcDir,framework:r?.framework.name,commonRoot:Je(n.map(o=>o.path),i.path)});a&&s.set(a,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 ie(e){let t=pt({registries:O});return e?d.parse(ae(t,{...e,registries:{...O,...e.registries}})):t}var De={headers:{}};function me(e){De.headers={...De.headers,...e};}function jt(e){return De.headers[e]||{}}function ge(){De.headers={};}function ns(e){let t=new Set;return typeof e=="string"?fe(e).forEach(r=>t.add(r)):(fe(e.url).forEach(r=>t.add(r)),e.params&&Object.values(e.params).forEach(r=>{fe(r).forEach(s=>t.add(s));}),e.headers&&Object.values(e.headers).forEach(r=>{fe(r).forEach(s=>t.add(s));})),Array.from(t)}function Nt(e,t){let s=ns(t).filter(n=>!process.env[n]);if(s.length>0)throw new Ee(e,s)}function Qi(e,t){for(let r of e)oe(r,ie(t));ge();}var $t="{name}",Le="{style}",Ft=/\${(\w+)}/g,Ot="?",is="&";function os(e){return e.startsWith("./")||e.startsWith("/")}function oe(e,t){let{registry:r,item:s}=Q(e);if(!r){if(A(e)||ne(e)||os(e))return null;r="@createui";}let i={...O,...t?.registries}[r];if(!i)throw new J(r);return Nt(r,i),{url:as(s,i,t),headers:cs(i)}}function as(e,t,r){if(typeof t=="string"){let n=t.replace($t,e);return r?.style&&n.includes(Le)&&(n=n.replace(Le,r.style)),le(n)}let s=t.url.replace($t,e);return r?.style&&s.includes(Le)&&(s=s.replace(Le,r.style)),s=le(s),t.params?ls(s,t.params):s}function cs(e){if(typeof e=="string"||!e.headers)return {};let t={};for(let[r,s]of Object.entries(e.headers)){let n=le(s);fs(s,n)&&(t[r]=n);}return t}function ls(e,t){let r=new URLSearchParams;for(let[i,a]of Object.entries(t)){let o=le(a);o&&r.append(i,o);}let s=r.toString();if(!s)return e;let n=e.includes(Ot)?is:Ot;return `${e}${n}${s}`}function fs(e,t){let r=t.trim();if(!r)return false;if(e.includes("${")&&e.match(Ft)){let n=e.replace(Ft,"").trim();return r!==n}return true}function ze(e){return A(e)?e:`${X}/${e}`}var ds=process.env.https_proxy?new HttpsProxyAgent(process.env.https_proxy):void 0,Ge=new Map;async function P(e,t={}){t={useCache:true,...t};try{return await Promise.all(e.map(async s=>{let n=ze(s);if(t.useCache&&Ge.has(n))return Ge.get(n);let i=(async()=>{let a=jt(n),o=await us(n,{agent:ds,headers:{...a}});if(!o.ok){let c;if(o.headers.get("content-type")?.includes("application/json")){let f=await o.json(),l=z.object({detail:z.string().optional(),title:z.string().optional(),message:z.string().optional(),error:z.string().optional()}).safeParse(f);l.success&&(c=l.data.detail||l.data.message,l.data.error&&(c=`[${l.data.error}] ${c}`));}throw o.status===401?new we(n,c):o.status===404?new Z(n,c):o.status===403?new ve(n,c):new Re(n,o.status,c)}return o.json()})();return t.useCache&&Ge.set(n,i),i}))}catch(r){throw r}}async function _t(e){try{let t=e;e.startsWith("~/")&&(t=h__default.join(homedir(),e.slice(2)));let r=h__default.resolve(t),s=await promises.readFile(r,"utf8"),n=JSON.parse(s);try{return p.parse(n)}catch(i){throw new $(e,i)}}catch(t){throw t instanceof Error&&(t.message.includes("ENOENT")||t.message.includes("no such file"))?new ce(e,t):t instanceof $?t:new ce(e,t)}}function de(e,t){let r={},s=[...e];if(!t?.registries)return me({}),s;for(let n=0;n<s.length;n++){let i=oe(s[n],t);i&&(s[n]=i.url,Object.keys(i.headers).length>0&&(r[i.url]=i.headers));}return me(r),s}async function q(e,t,r={}){return await Promise.all(e.map(async n=>{if(ne(n))return _t(n);if(A(n)){let[o]=await P([n],r);try{return p.parse(o)}catch(c){throw new $(n,c)}}if(n.startsWith("@")&&t?.registries){let o=de([n],t),[c]=await P(o,r);try{return p.parse(c)}catch(f){throw new $(n,f)}}let i=`${n}.json`,[a]=await P([i],r);try{return p.parse(a)}catch(o){throw new $(n,o)}}))}o.extend({type:f,_source:z.string().optional(),fontVariant:n.optional(),config:z.any().optional()}).passthrough();async function Lt(e,t,r={}){r={useCache:true,...r};let s=[],n=[],i=[],a=Array.from(new Set(e)),o=await q(a,t,r),c=new Map;for(let u=0;u<o.length;u++)o[u]&&c.set(a[u],o[u]);for(let[u,y]of Array.from(c.entries())){let I={...y,_source:u};if(s.push(I),y.registryDependencies){let C=y.registryDependencies;if(t?.registries)C=de(y.registryDependencies,t);else {let _=y.registryDependencies.filter(z=>z.startsWith("@"));if(_.length>0){let{registry:z}=Q(_[0]);throw new J(z)}}let{items:w,registryNames:H}=await he(C,t,r,new Set(a));n.push(...w),i.push(...H);}}if(s.push(...n),i.length>0){let u=Array.from(new Set(i)),y=u.filter(C=>!C.startsWith("@")),I=u.filter(C=>C.startsWith("@"));if(I.length>0){let C=await q(I,t,r);for(let w=0;w<C.length;w++){let _={...C[w],_source:I[w]};s.push(_);}}if(y.length>0){let C=await zt();if(!C&&s.length===0)return null;if(C){y.includes("index")&&y.unshift("index");let w=[];for(let ye of y){let Y=await ys(ye,t,r);w.push(...Y);}let H=Array.from(new Set(w)),_=await P(H,r),z$1=z.array(p).parse(_);s.push(...z$1);}}}if(!s.length)return null;let f=new Map;s.forEach(u=>{let y=u._source||u.name;f.set(u,y);}),s=ws(s,f),s.sort((u,y)=>u.type==="registry:theme"&&y.type!=="registry:theme"?-1:u.type!=="registry:theme"&&y.type==="registry:theme"?1:0);let l={};s.forEach(u=>{l=ae(l,u.tailwind??{});});let g={};s.forEach(u=>{g=ae(g,u.cssVars??{});});let m={};s.forEach(u=>{m=ae(m,u.css??{});});let x="";s.forEach(u=>{u.docs&&(x+=`${u.docs}
28
+ `);});let d={};s.forEach(u=>{d=ae(d,u.envVars??{});});let v$1=await kt(s.map(u=>u.files??[]),t),p$1=[];for(let u of s)if(u.type==="registry:font-variant"&&u.fontVariant)for(let y of ["display","body","numeric"]){let I=u.fontVariant[y];I&&p$1.push({name:`${u.name}-${y}`,type:"registry:font",role:y,font:I});}let T=v.parse({dependencies:ae.all(s.map(u=>u.dependencies??[])),devDependencies:ae.all(s.map(u=>u.devDependencies??[])),files:v$1,tailwind:l,cssVars:g,css:m,docs:x,fonts:p$1.length>0?p$1:void 0});return Object.keys(d).length>0&&(T.envVars=d),T}async function he(e,t,r={},s=new Set){let n=[],i=[];for(let a of e)if(!s.has(a)){if(s.add(a),A(a)||ne(a)){let[o]=await q([a],t,r);if(o&&(n.push(o),o.registryDependencies)){let c=t?.registries?de(o.registryDependencies,t):o.registryDependencies,f=await he(c,t,r,s);n.push(...f.items),i.push(...f.registryNames);}}else if(a.startsWith("@")&&t?.registries){let{registry:o}=Q(a);if(o&&!(o in t.registries))throw new J(o);let[c]=await q([a],t,r);if(c&&(n.push(c),c.registryDependencies)){let f=t?.registries?de(c.registryDependencies,t):c.registryDependencies,l=await he(f,t,r,s);n.push(...l.items),i.push(...l.registryNames);}}else if(i.push(a),t)try{let[o]=await q([a],t,r);if(o&&o.registryDependencies){let c=t?.registries?de(o.registryDependencies,t):o.registryDependencies,f=await he(c,t,r,s);n.push(...f.items),i.push(...f.registryNames);}}catch{}}return {items:n,registryNames:i}}async function ys(e,t,r={}){if(A(e))return [e];let{registryNames:s}=await he([e],t,r,new Set),n=s.map(i=>ze(A(i)?i:`${i}.json`));return Array.from(new Set(n))}function B(e,t){let r=t||e.name,s=createHash("sha256").update(r).digest("hex").substring(0,8);return `${e.name}::${s}`}function xs(e){if(A(e)){let s=new URL(e).pathname,n=s.match(/\/([^/]+)\.json$/),i=n?n[1]:h__default.basename(s,".json");return {name:i,hash:B({name:i},e)}}if(ne(e)){let r=e.match(/\/([^/]+)\.json$/),s=r?r[1]:h__default.basename(e,".json");return {name:s,hash:B({name:s},e)}}let{item:t}=Q(e);return {name:t,hash:B({name:t},e)}}function ws(e,t){let r=new Map,s=new Map,n=new Map,i=new Map;e.forEach(f=>{let l=t.get(f)||f.name,g=B(f,l);r.set(g,f),s.set(g,f),n.set(g,0),i.set(g,[]);});let a=new Map;e.forEach(f=>{let l=t.get(f)||f.name,g=B(f,l);a.has(f.name)||a.set(f.name,[]),a.get(f.name).push(g),l!==f.name&&(a.has(l)||a.set(l,[]),a.get(l).push(g));}),e.forEach(f=>{let l=t.get(f)||f.name,g=B(f,l);f.registryDependencies&&f.registryDependencies.forEach(m=>{let x,d=a.get(m)||[];if(d.length===1)x=d[0];else if(d.length>1)x=d[0];else {let{name:v}=xs(m),p=a.get(v)||[];p.length>0&&(x=p[0]);}x&&r.has(x)&&(i.get(x).push(g),n.set(g,n.get(g)+1));});});let o=[],c=[];for(n.forEach((f,l)=>{f===0&&o.push(l);});o.length>0;){let f=o.shift(),l=r.get(f);c.push(l),i.get(f).forEach(g=>{let m=n.get(g)-1;n.set(g,m),m===0&&o.push(g);});}if(c.length!==e.length){console.warn("Circular dependency detected in registry items");let f=new Set(c.map(l=>{let g=t.get(l)||l.name;return B(l,g)}));e.forEach(l=>{let g=t.get(l)||l.name,m=B(l,g);f.has(m)||c.push(l);});}return c}function We(e){if(R.break(),R.error("Something went wrong. Please check the error below for more details."),R.error("If the problem persists, please open an issue on GitHub."),R.error(""),typeof e=="string"&&(R.error(e),R.break(),process.exit(1)),e instanceof b&&(e.message&&(R.error(e.cause?"Error:":"Message:"),R.error(e.message)),e.cause&&(R.error(`
29
+ Message:`),R.error(e.cause)),e.suggestion&&(R.error(`
30
+ Suggestion:`),R.error(e.suggestion)),R.break(),process.exit(1)),e instanceof z.ZodError){R.error("Validation failed:");for(let[t,r]of Object.entries(e.flatten().fieldErrors))R.error(`- ${j.info(t)}: ${r}`);R.break(),process.exit(1);}e instanceof Error&&(R.error(e.message),R.break(),process.exit(1)),R.break(),process.exit(1);}async function ra(e,t){let{config:r,useCache:s}=t||{};if(A(e)){let[o]=await P([e],{useCache:s});try{return q$1.parse(o)}catch(c){throw new $(e,c)}}if(!e.startsWith("@"))throw new Ce(e);let n=e;n.endsWith("/registry")||(n=`${n}/registry`);let i=oe(n,ie(r));if(!i?.url)throw new Z(n);i.headers&&Object.keys(i.headers).length>0&&me({[i.url]:i.headers});let[a]=await P([i.url],{useCache:s});try{return q$1.parse(a)}catch(o){throw new $(n,o)}}async function sa(e,t){let{config:r,useCache:s=false}=t||{};return ge(),q(e,ie(r),{useCache:s})}async function na(e,t){let{config:r,useCache:s=false}=t||{};return ge(),Lt(e,ie(r),{useCache:s})}async function ia(e,t){let{useCache:r=true}=t||{};r||be.clearCaches();let s=await be.search(e);if(!s)return {registries:O};let n=z.object({registries:b$1.optional()}).safeParse(s.config);if(!n.success)throw new Ie(e,n.error);return {registries:{...O,...n.data.registries||{}}}}async function zt(){try{let[e]=await P(["index.json"]);return r.parse(e)}catch(e){R.error(`
31
+ `),We(e);}}async function oa(){try{let[e]=await P(["styles/index.json"]);return s.parse(e)}catch{return []}}async function aa(){try{let[e]=await P(["icons/index.json"]);return t.parse(e)}catch(e){return We(e),{}}}async function ca(){return ft}async function It(e){}async function Es(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 Es(e,n.registryDependencies);r.push(...i);}}return r.filter((s,n,i)=>i.findIndex(a=>a.name===s.name)===n)}async function la(e,t){try{let r=t.map(n=>`${n.name}.json`);return (await P(r)).map(n=>p.parse(n))}catch(r){return We(r),[]}}async function fa(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?h__default.join(e.resolvedPaths[s],n):null}async function Cs(e){e={useCache:true,...e};let t=`${X}/registries.json`,[r]=await P([t],{useCache:e.useCache});try{return z$1.parse(r)}catch(s){throw s instanceof z.ZodError?new Se(s):s}}async function pa(e){let t=await Cs(e);return t?Object.fromEntries(t.map(r=>[r.name,r.url])):null}async function Is(e){e={useCache:true,...e};let t=`${X}/config.json`,[r]=await P([t],{useCache:e.useCache});return B$1.parse(r).presets}async function ma(e,t){return (await Is(t)).find(s=>s.name.toLowerCase()===e.toLowerCase())??null}export{We as $,Z as A,we as B,ve as C,Re as D,J as E,ce as F,$ as G,Ee as H,Ce as I,Se as J,Q as K,ut as L,dt as M,ht as N,wt as O,lt as P,Si as Q,es as R,A as S,Li as T,ie as U,ge as V,Qi as W,oe as X,P as Y,q as Z,Lt as _,Vt as a,ra as aa,Mt as b,sa as ba,js as c,na as ca,Ns as d,ia as da,Bt as e,zt as ea,$s as f,oa as fa,Fs as g,aa as ga,O as h,ca as ha,Os as i,It as ia,j,Es as ja,Zs as k,la as ka,Xs as l,fa as la,Qs as m,Cs as ma,en as n,pa as na,Te as o,Is as oa,Me as p,ma as pa,tn as q,rr as r,nr as s,pt as t,Be as u,te as v,xn as w,R as x,pe as y,b as z};//# sourceMappingURL=chunk-BVZRYLRW.js.map
32
+ //# sourceMappingURL=chunk-BVZRYLRW.js.map