@create-ui/cli 0.5.3 → 0.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import {a}from'./chunk-MK3CCMH4.js';import {S as S$1,H,f as f$1,G}from'./chunk-EWAP55CF.js';import {Server}from'@modelcontextprotocol/sdk/server/index.js';import {ListToolsRequestSchema,CallToolRequestSchema}from'@modelcontextprotocol/sdk/types.js';import o from'dedent';import {z}from'zod';import {zodToJsonSchema}from'zod-to-json-schema';import {detect}from'@antfu/ni';async function v(r,{withFallback:e}={withFallback:false}){let n=await detect({programmatic:true,cwd:r});if(n==="yarn@berry")return "yarn";if(n==="pnpm@6")return "pnpm";if(n==="bun")return "bun";if(n==="deno")return "deno";if(!e)return n??"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 $(r){let e=await v(r);return e==="pnpm"?"pnpm dlx":e==="bun"?"bunx":"npx"}var q="@create-ui/cli";async function u(r){return `${await $(process.cwd())} ${q} ${r}`}function y(r){return r.startsWith("@")&&r.includes("/")?r.slice(r.indexOf("/")+1):r}async function f(r=process.cwd()){try{let e=await f$1(r);if(e)return e}catch{}return G({})}async function x(r,e){let{query:n,registries:i}=e||{},s=await Promise.all(r.items.map(async c=>{let g=[`- ${c.name}`];return c.type&&g.push(`(${c.type})`),c.description&&g.push(`- ${c.description}`),c.registry&&g.push(`[${c.registry}]`),g.push(`
1
+ import {a}from'./chunk-Z73MEB7I.js';import {S as S$1,H,f as f$1,G}from'./chunk-5YX4Z2U3.js';import {Server}from'@modelcontextprotocol/sdk/server/index.js';import {ListToolsRequestSchema,CallToolRequestSchema}from'@modelcontextprotocol/sdk/types.js';import o from'dedent';import {z}from'zod';import {zodToJsonSchema}from'zod-to-json-schema';import {detect}from'@antfu/ni';async function v(r,{withFallback:e}={withFallback:false}){let n=await detect({programmatic:true,cwd:r});if(n==="yarn@berry")return "yarn";if(n==="pnpm@6")return "pnpm";if(n==="bun")return "bun";if(n==="deno")return "deno";if(!e)return n??"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 $(r){let e=await v(r);return e==="pnpm"?"pnpm dlx":e==="bun"?"bunx":"npx"}var q="@create-ui/cli";async function u(r){return `${await $(process.cwd())} ${q} ${r}`}function y(r){return r.startsWith("@")&&r.includes("/")?r.slice(r.indexOf("/")+1):r}async function f(r=process.cwd()){try{let e=await f$1(r);if(e)return e}catch{}return G({})}async function x(r,e){let{query:n,registries:i}=e||{},s=await Promise.all(r.items.map(async c=>{let g=[`- ${c.name}`];return c.type&&g.push(`(${c.type})`),c.description&&g.push(`- ${c.description}`),c.registry&&g.push(`[${c.registry}]`),g.push(`
2
2
  Add command: \`${await u(`add ${c.addCommandArgument}`)}\``),g.join(" ")})),a=`Found ${r.pagination.total} items`;n&&(a+=` matching "${n}"`),i&&i.length>0&&(a+=` in registries ${i.join(", ")}`),a+=":";let m=`Showing items ${r.pagination.offset+1}-${Math.min(r.pagination.offset+r.pagination.limit,r.pagination.total)} of ${r.pagination.total}:`,d=`${a}
3
3
 
4
4
  ${m}
@@ -60,5 +60,5 @@ Found ${r.length} example${r.length>1?"s":""} matching "${e}":
60
60
 
61
61
  \u{1F4A1} ${e.suggestion}`),e.context&&(i+=`
62
62
 
63
- Context: ${JSON.stringify(e.context,null,2)}`),{content:[{type:"text",text:o`Error (${e.code}): ${i}`}],isError:true}}let n=e instanceof Error?e.message:String(e);return {content:[{type:"text",text:o`Error: ${n}`}],isError:true}}});export{v as a,k as b};//# sourceMappingURL=chunk-UVIUVCLG.js.map
64
- //# sourceMappingURL=chunk-UVIUVCLG.js.map
63
+ Context: ${JSON.stringify(e.context,null,2)}`),{content:[{type:"text",text:o`Error (${e.code}): ${i}`}],isError:true}}let n=e instanceof Error?e.message:String(e);return {content:[{type:"text",text:o`Error: ${n}`}],isError:true}}});export{v as a,k as b};//# sourceMappingURL=chunk-EF7MDUJN.js.map
64
+ //# sourceMappingURL=chunk-EF7MDUJN.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/get-package-manager.ts","../src/mcp/utils.ts","../src/mcp/index.ts"],"names":["getPackageManager","targetDir","withFallback","packageManager","detect","userAgent","getPackageRunner","cwd","createui_CLI_COMMAND","npxcreateui","command","normalizeRegistryItemName","item","getMcpConfig","config","getConfig","configWithDefaults","formatSearchResultsWithPagination","results","options","query","registries","formattedItems","parts","header","showingRange","output","formatRegistryItems","items","formatItemExamples","sections","file","server","Server","ListToolsRequestSchema","zodToJsonSchema","z","CallToolRequestSchema","request","dedent","args","searchRegistries","registryItems","getRegistryItems","itemNames","fullItems","error","e","RegistryError","errorMessage"],"mappings":"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","file":"chunk-UVIUVCLG.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 { configWithDefaults } from \"@/src/registry/config\"\nimport { registryItemSchema, searchResultsSchema } from \"@/src/schema\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { getPackageRunner } from \"@/src/utils/get-package-manager\"\nimport { z } from \"zod\"\n\nconst createui_CLI_COMMAND = \"@create-ui/cli\"\n\nexport async function npxcreateui(command: string) {\n const packageRunner = await getPackageRunner(process.cwd())\n return `${packageRunner} ${createui_CLI_COMMAND} ${command}`\n}\n\n// Single-provider: items resolve by bare name (e.g. \"button\"). The MCP tools\n// historically accepted a \"@registry/item\" convention, so strip an optional\n// leading \"@registry/\" prefix. URLs and local file paths are returned untouched.\nexport function normalizeRegistryItemName(item: string) {\n if (item.startsWith(\"@\") && item.includes(\"/\")) {\n return item.slice(item.indexOf(\"/\") + 1)\n }\n\n return item\n}\n\nexport async function getMcpConfig(cwd = process.cwd()) {\n try {\n const config = await getConfig(cwd)\n if (config) {\n return config\n }\n } catch {\n // Fall back to defaults when components.json is missing or invalid.\n }\n\n return configWithDefaults({})\n}\n\nexport async 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 = await Promise.all(\n results.items.map(async (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: \\`${await npxcreateui(\n `add ${item.addCommandArgument}`\n )}\\``\n )\n\n return parts.join(\" \")\n })\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 normalizeRegistryItemName,\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 the registry used by this project. createui uses a single built-in @createui registry.\",\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 (e.g., ['button', 'card']). A '@createui/' prefix is also accepted.\"\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 (e.g., ['button', 'card']). A '@createui/' prefix is also accepted.\"\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 return {\n content: [\n {\n type: \"text\",\n text: dedent`This project uses the built-in \\`@createui\\` registry.\n\n You can view an item by running:\n \\`${await npxcreateui(\"view <item-name>\")}\\`\n\n For example: \\`${await npxcreateui(\"view button\")}\\`.`,\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: await 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: await 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(\n args.items.map(normalizeRegistryItemName),\n {\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n }\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 (e.g., button, card).`,\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(\n `add ${args.items.map(normalizeRegistryItemName).join(\" \")}`\n ),\n },\n ],\n }\n }\n\n case \"get_audit_checklist\": {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`## Component Audit Checklist\n\n After adding or generating components, check the following common issues:\n\n - [ ] Ensure imports are correct i.e named vs default imports\n - [ ] If using next/image, ensure images.remotePatterns next.config.js is configured correctly.\n - [ ] Ensure all dependencies are installed.\n - [ ] Check for linting errors or warnings\n - [ ] Check for TypeScript errors\n - [ ] Use the Playwright MCP if available.\n `,\n },\n ],\n }\n }\n\n default:\n throw new Error(`Tool ${request.params.name} not found`)\n }\n } catch (error) {\n if (error instanceof z.ZodError) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Invalid input parameters:\n ${error.errors\n .map((e) => `- ${e.path.join(\".\")}: ${e.message}`)\n .join(\"\\n\")}\n `,\n },\n ],\n isError: true,\n }\n }\n\n if (error instanceof RegistryError) {\n let errorMessage = error.message\n\n if (error.suggestion) {\n errorMessage += `\\n\\n💡 ${error.suggestion}`\n }\n\n if (error.context) {\n errorMessage += `\\n\\nContext: ${JSON.stringify(error.context, null, 2)}`\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Error (${error.code}): ${errorMessage}`,\n },\n ],\n isError: true,\n }\n }\n\n const errorMessage = error instanceof Error ? error.message : String(error)\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Error: ${errorMessage}`,\n },\n ],\n isError: true,\n }\n }\n})\n"]}
1
+ {"version":3,"sources":["../src/utils/get-package-manager.ts","../src/mcp/utils.ts","../src/mcp/index.ts"],"names":["getPackageManager","targetDir","withFallback","packageManager","detect","userAgent","getPackageRunner","cwd","createui_CLI_COMMAND","npxcreateui","command","normalizeRegistryItemName","item","getMcpConfig","config","getConfig","configWithDefaults","formatSearchResultsWithPagination","results","options","query","registries","formattedItems","parts","header","showingRange","output","formatRegistryItems","items","formatItemExamples","sections","file","server","Server","ListToolsRequestSchema","zodToJsonSchema","z","CallToolRequestSchema","request","dedent","args","searchRegistries","registryItems","getRegistryItems","itemNames","fullItems","error","e","RegistryError","errorMessage"],"mappings":"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","file":"chunk-EF7MDUJN.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 { configWithDefaults } from \"@/src/registry/config\"\nimport { registryItemSchema, searchResultsSchema } from \"@/src/schema\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { getPackageRunner } from \"@/src/utils/get-package-manager\"\nimport { z } from \"zod\"\n\nconst createui_CLI_COMMAND = \"@create-ui/cli\"\n\nexport async function npxcreateui(command: string) {\n const packageRunner = await getPackageRunner(process.cwd())\n return `${packageRunner} ${createui_CLI_COMMAND} ${command}`\n}\n\n// Single-provider: items resolve by bare name (e.g. \"button\"). The MCP tools\n// historically accepted a \"@registry/item\" convention, so strip an optional\n// leading \"@registry/\" prefix. URLs and local file paths are returned untouched.\nexport function normalizeRegistryItemName(item: string) {\n if (item.startsWith(\"@\") && item.includes(\"/\")) {\n return item.slice(item.indexOf(\"/\") + 1)\n }\n\n return item\n}\n\nexport async function getMcpConfig(cwd = process.cwd()) {\n try {\n const config = await getConfig(cwd)\n if (config) {\n return config\n }\n } catch {\n // Fall back to defaults when components.json is missing or invalid.\n }\n\n return configWithDefaults({})\n}\n\nexport async 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 = await Promise.all(\n results.items.map(async (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: \\`${await npxcreateui(\n `add ${item.addCommandArgument}`\n )}\\``\n )\n\n return parts.join(\" \")\n })\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 normalizeRegistryItemName,\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 the registry used by this project. createui uses a single built-in @createui registry.\",\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 (e.g., ['button', 'card']). A '@createui/' prefix is also accepted.\"\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 (e.g., ['button', 'card']). A '@createui/' prefix is also accepted.\"\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 return {\n content: [\n {\n type: \"text\",\n text: dedent`This project uses the built-in \\`@createui\\` registry.\n\n You can view an item by running:\n \\`${await npxcreateui(\"view <item-name>\")}\\`\n\n For example: \\`${await npxcreateui(\"view button\")}\\`.`,\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: await 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: await 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(\n args.items.map(normalizeRegistryItemName),\n {\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n }\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 (e.g., button, card).`,\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(\n `add ${args.items.map(normalizeRegistryItemName).join(\" \")}`\n ),\n },\n ],\n }\n }\n\n case \"get_audit_checklist\": {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`## Component Audit Checklist\n\n After adding or generating components, check the following common issues:\n\n - [ ] Ensure imports are correct i.e named vs default imports\n - [ ] If using next/image, ensure images.remotePatterns next.config.js is configured correctly.\n - [ ] Ensure all dependencies are installed.\n - [ ] Check for linting errors or warnings\n - [ ] Check for TypeScript errors\n - [ ] Use the Playwright MCP if available.\n `,\n },\n ],\n }\n }\n\n default:\n throw new Error(`Tool ${request.params.name} not found`)\n }\n } catch (error) {\n if (error instanceof z.ZodError) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Invalid input parameters:\n ${error.errors\n .map((e) => `- ${e.path.join(\".\")}: ${e.message}`)\n .join(\"\\n\")}\n `,\n },\n ],\n isError: true,\n }\n }\n\n if (error instanceof RegistryError) {\n let errorMessage = error.message\n\n if (error.suggestion) {\n errorMessage += `\\n\\n💡 ${error.suggestion}`\n }\n\n if (error.context) {\n errorMessage += `\\n\\nContext: ${JSON.stringify(error.context, null, 2)}`\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Error (${error.code}): ${errorMessage}`,\n },\n ],\n isError: true,\n }\n }\n\n const errorMessage = error instanceof Error ? error.message : String(error)\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Error: ${errorMessage}`,\n },\n ],\n isError: true,\n }\n }\n})\n"]}
@@ -1,3 +1,3 @@
1
- import {R}from'./chunk-EWAP55CF.js';import {u}from'./chunk-Y7WZRQWW.js';import R$1 from'fuzzysort';import {z as z$1}from'zod';async function I(r,t){let{query:a,limit:n,offset:g,useCache:i}=t||{},e=[];for(let u of r){let y=((await R(u,{useCache:i})).items||[]).map(l=>({name:l.name,type:l.type,description:l.description,registry:u,addCommandArgument:E(l.name,u)}));e=e.concat(y);}a&&(e=z(e,{query:a,limit:e.length,keys:["name","description"]}));let s=g||0,m=n||e.length,c=e.length,f={pagination:{total:c,offset:s,limit:m,hasMore:s+m<c},items:e.slice(s,s+m)};return u.parse(f)}var x=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 z(r,t){t={limit:100,threshold:-1e4,...t};let n=R$1.go(t.query,r,{keys:t.keys,threshold:t.threshold,limit:t.limit}).map(g=>g.obj);return z$1.array(x).parse(n)}function A(r){try{return new URL(r),!0}catch{return false}}function E(r,t){if(!A(t))return r;let a=t.indexOf("://")+3,n=t.indexOf("/",a);if(n===-1){let h=t.indexOf("?",a);if(h!==-1){let y=t.substring(0,h),b=t.substring(h).replace(/\bregistry\b/g,r);return y+b}return t}let g=t.substring(0,n),i=t.substring(n),e=i.indexOf("?")!==-1?i.indexOf("?"):i.length,s=i.substring(0,e),m=i.substring(e),c=s.lastIndexOf("registry"),f=s;c!==-1&&(f=s.substring(0,c)+r+s.substring(c+8));let u=m.replace(/\bregistry\b/g,r);return g+f+u}
2
- export{I as a};//# sourceMappingURL=chunk-MK3CCMH4.js.map
3
- //# sourceMappingURL=chunk-MK3CCMH4.js.map
1
+ import {R}from'./chunk-5YX4Z2U3.js';import {u}from'./chunk-Y7WZRQWW.js';import R$1 from'fuzzysort';import {z as z$1}from'zod';async function I(r,t){let{query:a,limit:n,offset:g,useCache:i}=t||{},e=[];for(let u of r){let y=((await R(u,{useCache:i})).items||[]).map(l=>({name:l.name,type:l.type,description:l.description,registry:u,addCommandArgument:E(l.name,u)}));e=e.concat(y);}a&&(e=z(e,{query:a,limit:e.length,keys:["name","description"]}));let s=g||0,m=n||e.length,c=e.length,f={pagination:{total:c,offset:s,limit:m,hasMore:s+m<c},items:e.slice(s,s+m)};return u.parse(f)}var x=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 z(r,t){t={limit:100,threshold:-1e4,...t};let n=R$1.go(t.query,r,{keys:t.keys,threshold:t.threshold,limit:t.limit}).map(g=>g.obj);return z$1.array(x).parse(n)}function A(r){try{return new URL(r),!0}catch{return false}}function E(r,t){if(!A(t))return r;let a=t.indexOf("://")+3,n=t.indexOf("/",a);if(n===-1){let h=t.indexOf("?",a);if(h!==-1){let y=t.substring(0,h),b=t.substring(h).replace(/\bregistry\b/g,r);return y+b}return t}let g=t.substring(0,n),i=t.substring(n),e=i.indexOf("?")!==-1?i.indexOf("?"):i.length,s=i.substring(0,e),m=i.substring(e),c=s.lastIndexOf("registry"),f=s;c!==-1&&(f=s.substring(0,c)+r+s.substring(c+8));let u=m.replace(/\bregistry\b/g,r);return g+f+u}
2
+ export{I as a};//# sourceMappingURL=chunk-Z73MEB7I.js.map
3
+ //# sourceMappingURL=chunk-Z73MEB7I.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/registry/search.ts"],"names":["searchRegistries","registries","options","query","limit","offset","useCache","allItems","registry","itemsWithRegistry","getRegistry","item","buildRegistryItemNameFromRegistry","searchItems","paginationOffset","paginationLimit","totalItems","result","searchResultsSchema","searchableItemSchema","z","items","results","fuzzysort","isUrl","string","name","protocolEnd","hostEnd","queryStart","beforeQuery","updatedQuery","hostPart","pathAndQuery","pathEnd","pathOnly","queryAndAfter","lastIndex","updatedPath"],"mappings":"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","file":"chunk-MK3CCMH4.js","sourcesContent":["import { searchResultItemSchema, searchResultsSchema } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport fuzzysort from \"fuzzysort\"\nimport { z } from \"zod\"\n\nimport { getRegistry } from \"./api\"\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, useCache } = options || {}\n\n let allItems: z.infer<typeof searchResultItemSchema>[] = []\n\n for (const registry of registries) {\n const registryData = await getRegistry(registry, { 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 the built-in registry, returns the bare item name (e.g. \"button\").\n// For URL registries, replaces \"registry\" with the item name in the URL.\nexport function buildRegistryItemNameFromRegistry(\n name: string,\n registry: string\n) {\n // The built-in registry is referenced by bare item name.\n if (!isUrl(registry)) {\n return 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"]}
1
+ {"version":3,"sources":["../src/registry/search.ts"],"names":["searchRegistries","registries","options","query","limit","offset","useCache","allItems","registry","itemsWithRegistry","getRegistry","item","buildRegistryItemNameFromRegistry","searchItems","paginationOffset","paginationLimit","totalItems","result","searchResultsSchema","searchableItemSchema","z","items","results","fuzzysort","isUrl","string","name","protocolEnd","hostEnd","queryStart","beforeQuery","updatedQuery","hostPart","pathAndQuery","pathEnd","pathOnly","queryAndAfter","lastIndex","updatedPath"],"mappings":"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","file":"chunk-Z73MEB7I.js","sourcesContent":["import { searchResultItemSchema, searchResultsSchema } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport fuzzysort from \"fuzzysort\"\nimport { z } from \"zod\"\n\nimport { getRegistry } from \"./api\"\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, useCache } = options || {}\n\n let allItems: z.infer<typeof searchResultItemSchema>[] = []\n\n for (const registry of registries) {\n const registryData = await getRegistry(registry, { 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 the built-in registry, returns the bare item name (e.g. \"button\").\n// For URL registries, replaces \"registry\" with the item name in the URL.\nexport function buildRegistryItemNameFromRegistry(\n name: string,\n registry: string\n) {\n // The built-in registry is referenced by bare item name.\n if (!isUrl(registry)) {\n return 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"]}
@@ -1,7 +1,7 @@
1
1
  declare const iconLibraries: {
2
- readonly remixicon: {
3
- readonly name: "remixicon";
4
- readonly title: "Remix Icon";
2
+ readonly createui: {
3
+ readonly name: "createui";
4
+ readonly title: "Create UI";
5
5
  readonly packages: readonly ["@create-ui/assets"];
6
6
  readonly import: "import { ICON } from '@create-ui/assets/icons'";
7
7
  readonly usage: "<ICON />";
@@ -1,2 +1,2 @@
1
- var e={remixicon:{name:"remixicon",title:"Remix Icon",packages:["@create-ui/assets"],import:"import { ICON } from '@create-ui/assets/icons'",usage:"<ICON />",export:"@create-ui/assets/icons"}};export{e as iconLibraries};//# sourceMappingURL=index.js.map
1
+ var e={createui:{name:"createui",title:"Create UI",packages:["@create-ui/assets"],import:"import { ICON } from '@create-ui/assets/icons'",usage:"<ICON />",export:"@create-ui/assets/icons"}};export{e as iconLibraries};//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/icons/libraries.ts"],"names":["iconLibraries"],"mappings":"AAAO,IAAMA,EAAgB,CAC3B,SAAA,CAAW,CACT,IAAA,CAAM,WAAA,CACN,MAAO,YAAA,CACP,QAAA,CAAU,CAAC,mBAAmB,EAC9B,MAAA,CAAQ,gDAAA,CACR,MAAO,UAAA,CACP,MAAA,CAAQ,yBACV,CACF","file":"index.js","sourcesContent":["export const iconLibraries = {\n remixicon: {\n name: \"remixicon\",\n title: \"Remix Icon\",\n packages: [\"@create-ui/assets\"],\n import: \"import { ICON } from '@create-ui/assets/icons'\",\n usage: \"<ICON />\",\n export: \"@create-ui/assets/icons\",\n },\n} as const\n\nexport type IconLibraries = typeof iconLibraries\n\nexport type IconLibrary = IconLibraries[keyof IconLibraries]\n\nexport type IconLibraryName = keyof IconLibraries\n"]}
1
+ {"version":3,"sources":["../../src/icons/libraries.ts"],"names":["iconLibraries"],"mappings":"AAAO,IAAMA,EAAgB,CAC3B,QAAA,CAAU,CACR,IAAA,CAAM,UAAA,CACN,MAAO,WAAA,CACP,QAAA,CAAU,CAAC,mBAAmB,EAC9B,MAAA,CAAQ,gDAAA,CACR,MAAO,UAAA,CACP,MAAA,CAAQ,yBACV,CACF","file":"index.js","sourcesContent":["export const iconLibraries = {\n createui: {\n name: \"createui\",\n title: \"Create UI\",\n packages: [\"@create-ui/assets\"],\n import: \"import { ICON } from '@create-ui/assets/icons'\",\n usage: \"<ICON />\",\n export: \"@create-ui/assets/icons\",\n },\n} as const\n\nexport type IconLibraries = typeof iconLibraries\n\nexport type IconLibrary = IconLibraries[keyof IconLibraries]\n\nexport type IconLibraryName = keyof IconLibraries\n"]}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import {b as b$1,a as a$2}from'./chunk-UVIUVCLG.js';import {a as a$3}from'./chunk-MK3CCMH4.js';import {a as a$4}from'./chunk-VQCXAURP.js';import {s,u,G,k,S,o,a as a$1,Q,m,f,n,t,v,p,g,aa,q,r,d,e,b,c,F,w,U,C,_ as _$1,E as E$1,$,Y as Y$1,Z,A,D,O,h,W,l,P,j,i,x as x$1,z as z$1,y}from'./chunk-EWAP55CF.js';export{Y as fetchTree,aa as getFontVariants,Z as getItemTargetPath,$ as getPreset,_ as getPresets,R as getRegistry,W as getRegistryIcons,S as getRegistryItems,V as getRegistryStyles,U as getcreateuiRegistryIndex,T as resolveRegistryItems,X as resolveTree}from'./chunk-EWAP55CF.js';import {a,o as o$1,n as n$1}from'./chunk-Y7WZRQWW.js';import*as E from'path';import E__default,{join}from'path';import {promises,existsSync}from'fs';import x from'fs-extra';import v$1 from'postcss';import bt,{z}from'zod';import {execa}from'execa';import pt from'prompts';import {Project,ScriptKind,SyntaxKind,VariableDeclarationKind}from'ts-morph';import st,{tmpdir}from'os';import {parse,applyEdits,modify}from'jsonc-parser';import {Command}from'commander';import wr from'deepmerge';import*as J from'fs/promises';import J__default from'fs/promises';import gt from'dedent';import yn from'validate-npm-package-name';import {diffLines}from'diff';import {StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import {randomBytes}from'crypto';import Wn from'fast-glob';import {fileURLToPath}from'url';async function tr(e){let t={};if(!x.existsSync(e.cwd)||!x.existsSync(E__default.resolve(e.cwd,"package.json")))return t["1"]=true,{errors:t,projectInfo:null};let r=p("Preflight checks.",{silent:e.silent}).start();x.existsSync(E__default.resolve(e.cwd,"components.json"))&&!e.force&&(r?.fail(),o.break(),o.error(`A ${a$1.info("components.json")} file already exists at ${a$1.info(e.cwd)}.
2
+ import {b as b$1,a as a$2}from'./chunk-EF7MDUJN.js';import {a as a$3}from'./chunk-Z73MEB7I.js';import {a as a$4}from'./chunk-VQCXAURP.js';import {s,u,G,k,S,o,a as a$1,Q,m,f,n,t,v,p,g,aa,q,r,d,e,b,c,F,w,U,C,_ as _$1,E as E$1,$,Y as Y$1,Z,A,D,O,h,W,l,P,j,i,x as x$1,z as z$1,y}from'./chunk-5YX4Z2U3.js';export{Y as fetchTree,aa as getFontVariants,Z as getItemTargetPath,$ as getPreset,_ as getPresets,R as getRegistry,W as getRegistryIcons,S as getRegistryItems,V as getRegistryStyles,U as getcreateuiRegistryIndex,T as resolveRegistryItems,X as resolveTree}from'./chunk-5YX4Z2U3.js';import {a,o as o$1,n as n$1}from'./chunk-Y7WZRQWW.js';import*as E from'path';import E__default,{join}from'path';import {promises,existsSync}from'fs';import x from'fs-extra';import v$1 from'postcss';import bt,{z}from'zod';import {execa}from'execa';import pt from'prompts';import {Project,ScriptKind,SyntaxKind,VariableDeclarationKind}from'ts-morph';import st,{tmpdir}from'os';import {parse,applyEdits,modify}from'jsonc-parser';import {Command}from'commander';import wr from'deepmerge';import*as J from'fs/promises';import J__default from'fs/promises';import gt from'dedent';import yn from'validate-npm-package-name';import {diffLines}from'diff';import {StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import {randomBytes}from'crypto';import Wn from'fast-glob';import {fileURLToPath}from'url';async function tr(e){let t={};if(!x.existsSync(e.cwd)||!x.existsSync(E__default.resolve(e.cwd,"package.json")))return t["1"]=true,{errors:t,projectInfo:null};let r=p("Preflight checks.",{silent:e.silent}).start();x.existsSync(E__default.resolve(e.cwd,"components.json"))&&!e.force&&(r?.fail(),o.break(),o.error(`A ${a$1.info("components.json")} file already exists at ${a$1.info(e.cwd)}.
3
3
  To start over, remove the ${a$1.info("components.json")} file and run ${a$1.info("init")} again.`),o.break(),process.exit(1)),r?.succeed();let i=p("Verifying framework.",{silent:e.silent}).start(),n=await m(e.cwd);(!n||n?.framework.name==="manual")&&(t["7"]=true,i?.fail(),o.break(),n?.framework.links.installation&&o.error(`We could not detect a supported framework at ${a$1.info(e.cwd)}.
4
4
  Visit ${a$1.info(n?.framework.links.installation)} to manually configure your project.
5
5
  Once configured, you can use the cli to add components.`),o.break(),process.exit(1)),i?.succeed(`Verifying framework. Found ${a$1.info(n.framework.label)}.`);let o$1=n.tailwindVersion==="v4"?`Validating Tailwind CSS config. Found ${a$1.info("v4")}.`:"Validating Tailwind CSS.",s=p(o$1,{silent:e.silent}).start();n.tailwindVersion==="v4"&&!n?.tailwindCssFile||!n.tailwindVersion?(t["5"]=true,s?.fail()):s?.succeed();let c=p("Validating import alias.",{silent:e.silent}).start();return n?.aliasPrefix?c?.succeed():(t["6"]=true,c?.fail()),Object.keys(t).length>0&&(t["5"]&&(o.break(),o.error(`No Tailwind CSS configuration found at ${a$1.info(e.cwd)}.`),o.error("It is likely you do not have Tailwind CSS installed or have an invalid configuration."),o.error("Install Tailwind CSS then try again."),n?.framework.links.tailwind&&o.error(`Visit ${a$1.info(n?.framework.links.tailwind)} to get started.`)),t["6"]&&(o.break(),o.error("No import alias found in your tsconfig.json file."),n?.framework.links.installation&&o.error(`Visit ${a$1.info(n?.framework.links.installation)} to learn how to set an import alias.`)),o.break(),process.exit(1)),{errors:t,projectInfo:n}}function rr(e,t){if(e.includes("\0"))return false;let r;try{r=e;let u="";for(;r!==u&&r.includes("%");)u=r,r=decodeURIComponent(r);}catch{return false}let i=E__default.normalize(r.replace(/\\/g,"/")),n=E__default.normalize(t),o=u=>u.replace(/\[\.\.\..*?\]/g,"").includes("..");if(o(i)||o(r)||o(e))return false;let s=u=>u.replace(/\[\.\.\..*?\]/g,""),c=s(e),a=s(r);if([/\.\.[\/\\]/,/[\/\\]\.\./,/\.\./,/\.\.%/,/\x00/,/[\x01-\x1f]/].some(u=>u.test(c)||u.test(a))||(e.includes("~")||r.includes("~"))&&(e.includes("../")||r.includes("../")))return false;if(/^[a-zA-Z]:[\/\\]/.test(r))return process.platform==="win32"?r.toLowerCase().startsWith(t.toLowerCase()):false;if(E__default.isAbsolute(i))return i.startsWith(n+E__default.sep);let p=E__default.resolve(n,i);return p.startsWith(n+E__default.sep)||p===n}async function Qe(e,t,r){if(!t.resolvedPaths.tailwindCss||!e||Object.keys(e).length===0)return;r={silent:false,...r};let i=t.resolvedPaths.tailwindCss,n=E__default.relative(t.resolvedPaths.cwd,i),o=p(`Updating ${a$1.info(n)}`,{silent:r.silent}).start(),s=await promises.readFile(i,"utf8"),c=await ai(s,e);await promises.writeFile(i,c,"utf8"),o.succeed();}async function ai(e,t){let r=[ci(t)],i=await v$1(r).process(e,{from:void 0}),n=i.css,o=i.root;if(o.nodes&&o.nodes.length>0){let s=o.nodes[o.nodes.length-1];s.type==="atrule"&&!s.nodes&&!n.trimEnd().endsWith(";")&&(n=n.trimEnd()+";");}return n=n.replace(/\/\* ---break--- \*\//g,""),n=n.replace(/(\n\s*\n)+/g,`
@@ -45,7 +45,7 @@ Failed to install: ${n.join(", ")}. You may need to install them manually.
45
45
  `,"utf8"),true}let r=await promises.readFile(e,"utf8"),i=false;parse(r)?.[lt]===void 0&&(r=applyEdits(r,modify(r,[lt],t,{formattingOptions:_e})),i=true);let n=parse(r)?.[Te];if(!Array.isArray(n))r=applyEdits(r,modify(r,[Te],mt,{formattingOptions:_e})),i=true;else {let o=n.length;for(let s of mt)n.includes(s)||(r=applyEdits(r,modify(r,[Te,o],s,{isArrayInsertion:true,formattingOptions:_e})),o+=1,i=true);}return i&&await promises.writeFile(e,r,"utf8"),i}async function sn(e){if(!existsSync(e)){let o=JSON.stringify({recommendations:[Ae]},null,2);return await promises.writeFile(e,`${o}
46
46
  `,"utf8"),true}let t=await promises.readFile(e,"utf8"),r=parse(t)??{},i=Array.isArray(r.recommendations)?r.recommendations:[];if(i.includes(Ae))return false;let n=modify(t,["recommendations",i.length],Ae,{isArrayInsertion:true,formattingOptions:_e});return await promises.writeFile(e,applyEdits(t,n),"utf8"),true}process.on("exit",e=>{let t=E__default.resolve(process.cwd(),"components.json");return e===0?ct(t):ur(t)});var Ve=z.object({cwd:z.string(),name:z.string().optional(),components:z.array(z.string()).optional(),yes:z.boolean(),defaults:z.boolean(),force:z.boolean(),silent:z.boolean(),isNewProject:z.boolean(),srcDir:z.boolean().optional(),cssVariables:z.boolean(),template:z.string().optional().refine(e=>e?_[e]:true,{message:"Invalid template. Please use 'next', 'vite', 'start' or 'next-monorepo'."}),baseColor:z.string().optional(),theme:z.string().optional(),neutral:z.string().optional(),fontVariant:z.string().optional(),baseStyle:z.boolean(),registryBaseConfig:a.deepPartial().optional()}),yr=new Command().name("init").description("initialize your project and install dependencies").argument("[components...]","names, url or local path to component").option("-t, --template <template>","the template to use. (next, start, vite, next-monorepo)").option("-b, --base-color <base-color>","deprecated: use --theme instead.",void 0).option("--theme <theme>","the primary color theme. (indigo, blue, lime, rose, etc.)",void 0).option("--neutral <neutral>",`neutral color theme. (${s.join(", ")})`,void 0).option("--font-variant <fontVariant>",`font variant. (${u.join(", ")})`,void 0).option("-y, --yes","skip confirmation prompt.",true).option("-d, --defaults,","use default configuration.",false).option("-f, --force","force overwrite of existing configuration.",false).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-s, --silent","mute output.",false).option("--src-dir","use the src directory when creating a new project.",false).option("--no-src-dir","do not use the src directory when creating a new project.").option("--css-variables","use css variables for theming.",true).option("--no-css-variables","do not use css variables for theming.").option("--no-base-style","do not install the base createui style.").action(async(e,t)=>{try{t.defaults&&(t.template=t.template||"next");let r=Ve.parse({cwd:E__default.resolve(t.cwd),isNewProject:!1,components:e,...t});if(await L(r.cwd),e.length>0){let i=G(k({resolvedPaths:{cwd:r.cwd}})),n=E__default.resolve(r.cwd,"components.json");if(x.existsSync(n)){let s=await x.readJson(n),c=a.partial().parse(s),a$1=k({resolvedPaths:{cwd:r.cwd}});i=G({...c,resolvedPaths:{...a$1.resolvedPaths,cwd:r.cwd}}),dr(n);}let[o]=await S([e[0]],{config:i});o?.type==="registry:base"&&(o.config&&(i=G(wr(i,o.config)),r.registryBaseConfig=o.config),r.baseStyle=o.extends==="none"?!1:r.baseStyle);}await pe(r),o.log(`${a$1.success("Success!")} Project initialization completed.
47
47
  You may now add components.`),ct(E__default.resolve(r.cwd,"components.json")),o.break();}catch(r){o.break(),Q(r);}});async function pe(e){let t$1,r;if(e.skipPreflight)t$1=await m(e.cwd);else {let y=await tr(e);if(y.errors["1"]){let{projectPath:R,template:S}=await $e(e);R||process.exit(1),e.cwd=R,e.isNewProject=true,r=S,t$1=await m(e.cwd);}else t$1=y.projectInfo;}if(r==="next-monorepo")return e.cwd=E__default.resolve(e.cwd,"apps/web"),await f(e.cwd);let i=await n(e.cwd,t$1),n$1=i?await mn(i,e):await ln(await f(e.cwd)),o=n$1.config;if(!e.theme&&n$1.theme&&(e.theme=n$1.theme),!e.neutral&&n$1.neutral&&(e.neutral=n$1.neutral),!e.fontVariant&&n$1.fontVariant&&(e.fontVariant=n$1.fontVariant),!e.yes){let{proceed:y}=await pt({type:"confirm",name:"proceed",message:`Write configuration to ${a$1.info("components.json")}. Proceed?`,initial:true});y||process.exit(0);}let s=e.theme??e.baseColor??"indigo",c=e.neutral??t,a=e.fontVariant??v,l=[...e.baseStyle?["index"]:[],...e.baseStyle?[`theme-${s}`]:[],...e.baseStyle?[`neutral-${c}`]:[],...e.baseStyle?[`font-variant-${a}`]:[],...e.components??[]],m$1=p("Writing components.json.").start(),p$1=E__default.resolve(e.cwd,"components.json"),u=`${p$1}${ye}`,h=(y,R)=>wr(y,R);if(!e.force&&x.existsSync(u)){let y=await x.readJson(u);o=h(y,o);}e.registryBaseConfig&&(o=h(o,e.registryBaseConfig)),await promises.writeFile(p$1,`${JSON.stringify(o,null,2)}
48
- `,"utf8"),m$1.succeed();let g$1=await g(e.cwd,o);return await ie(l,g$1,{overwrite:true,silent:e.silent,baseStyle:e.baseStyle,isNewProject:e.isNewProject||t$1?.framework.name==="next-app"}),await hr(g$1,{silent:e.silent}),g$1}async function ln(e$1=null){o.info("");let t$1=await aa(),r$1=await pt([{type:"toggle",name:"typescript",message:`Would you like to use ${a$1.info("TypeScript")} (recommended)?`,initial:e$1?.tsx??true,active:"yes",inactive:"no"},{type:"select",name:"theme",message:`Which ${a$1.info("primary")} color would you like to use?`,choices:q.map(s=>({title:s.label,value:s.name}))},{type:"select",name:"neutral",message:`Which ${a$1.info("neutral")} color would you like to use?`,choices:r.map(s=>({title:s.name===t?`${s.label} (Default)`:s.label,value:s.name}))},{type:"select",name:"fontVariant",message:`Which ${a$1.info("font variant")} would you like to use?`,choices:t$1.map(s=>({title:s.label,value:s.name})),initial:Math.max(0,t$1.findIndex(s=>s.name===v))},{type:"text",name:"tailwindCss",message:`Where is your ${a$1.info("global CSS")} file?`,initial:e$1?.tailwind.css??d},{type:"toggle",name:"tailwindCssVariables",message:`Would you like to use ${a$1.info("CSS variables")} for theming?`,initial:e$1?.tailwind.cssVariables??true,active:"yes",inactive:"no"},{type:"text",name:"tailwindPrefix",message:`Are you using a custom ${a$1.info("tailwind prefix eg. tw-")}? (Leave blank if not)`,initial:""},{type:"text",name:"tailwindConfig",message:`Where is your ${a$1.info("tailwind.config.js")} located?`,initial:e$1?.tailwind.config??e},{type:"text",name:"components",message:`Configure the import alias for ${a$1.info("components")}:`,initial:e$1?.aliases.components??b},{type:"text",name:"utils",message:`Configure the import alias for ${a$1.info("utils")}:`,initial:e$1?.aliases.utils??c},{type:"toggle",name:"rsc",message:`Are you using ${a$1.info("React Server Components")}?`,initial:e$1?.rsc??true,active:"yes",inactive:"no"}]),i=r$1.theme??"indigo",n=r$1.neutral??t,o$1=r$1.fontVariant??v;return {config:a.parse({$schema:"https://createui.co/schema.json",tailwind:{config:r$1.tailwindConfig,css:r$1.tailwindCss,baseColor:i,cssVariables:r$1.tailwindCssVariables,prefix:r$1.tailwindPrefix},rsc:r$1.rsc,tsx:r$1.typescript,aliases:{utils:r$1.utils,components:r$1.components,lib:r$1.components.replace(/\/components$/,"lib"),hooks:r$1.components.replace(/\/components$/,"hooks")}}),theme:i,neutral:n,fontVariant:o$1}}async function mn(e,t$1){let r$1=e.tailwind.cssVariables,i=e.iconLibrary??"lucide";if(!t$1.defaults){let c=await aa(),a=await pt([{type:t$1.theme?null:"select",name:"theme",message:`Which ${a$1.info("primary")} color would you like to use?`,choices:q.map(l=>({title:l.label,value:l.name})),initial:0},{type:t$1.neutral?null:"select",name:"neutral",message:`Which ${a$1.info("neutral")} color would you like to use?`,choices:r.map(l=>({title:l.name===t?`${l.label} (Default)`:l.label,value:l.name})),initial:0},{type:t$1.fontVariant?null:"select",name:"fontVariant",message:`Which ${a$1.info("font variant")} would you like to use?`,choices:c.map(l=>({title:l.label,value:l.name})),initial:Math.max(0,c.findIndex(l=>l.name===v))}]);t$1.theme=a.theme??t$1.theme??"indigo",t$1.neutral=a.neutral??t$1.neutral??t,t$1.fontVariant=a.fontVariant??t$1.fontVariant??v,r$1=t$1.cssVariables;}let n=t$1.theme??"indigo",o=t$1.neutral??t,s=t$1.fontVariant??v;return {config:a.parse({$schema:e?.$schema,tailwind:{...e?.tailwind,baseColor:n,cssVariables:r$1},rsc:e?.rsc,tsx:e?.tsx,iconLibrary:i,aliases:e?.aliases}),theme:n,neutral:o,fontVariant:s}}async function xr(e){let t={};if(!x.existsSync(e.cwd)||!x.existsSync(E__default.resolve(e.cwd,"package.json")))return t["1"]=true,{errors:t,config:null};if(!x.existsSync(E__default.resolve(e.cwd,"components.json")))return t["3"]=true,{errors:t,config:null};try{let r=await f(e.cwd);return {errors:t,config:r}}catch{o.break(),o.error(`An invalid ${a$1.info("components.json")} file was found at ${a$1.info(e.cwd)}.
48
+ `,"utf8"),m$1.succeed();let g$1=await g(e.cwd,o);return await ie(l,g$1,{overwrite:true,silent:e.silent,baseStyle:e.baseStyle,isNewProject:e.isNewProject||t$1?.framework.name==="next-app"}),await hr(g$1,{silent:e.silent}),g$1}async function ln(e$1=null){o.info("");let t$1=await aa(),r$1=await pt([{type:"toggle",name:"typescript",message:`Would you like to use ${a$1.info("TypeScript")} (recommended)?`,initial:e$1?.tsx??true,active:"yes",inactive:"no"},{type:"select",name:"theme",message:`Which ${a$1.info("primary")} color would you like to use?`,choices:q.map(s=>({title:s.label,value:s.name}))},{type:"select",name:"neutral",message:`Which ${a$1.info("neutral")} color would you like to use?`,choices:r.map(s=>({title:s.name===t?`${s.label} (Default)`:s.label,value:s.name}))},{type:"select",name:"fontVariant",message:`Which ${a$1.info("font variant")} would you like to use?`,choices:t$1.map(s=>({title:s.label,value:s.name})),initial:Math.max(0,t$1.findIndex(s=>s.name===v))},{type:"text",name:"tailwindCss",message:`Where is your ${a$1.info("global CSS")} file?`,initial:e$1?.tailwind.css??d},{type:"toggle",name:"tailwindCssVariables",message:`Would you like to use ${a$1.info("CSS variables")} for theming?`,initial:e$1?.tailwind.cssVariables??true,active:"yes",inactive:"no"},{type:"text",name:"tailwindPrefix",message:`Are you using a custom ${a$1.info("tailwind prefix eg. tw-")}? (Leave blank if not)`,initial:""},{type:"text",name:"tailwindConfig",message:`Where is your ${a$1.info("tailwind.config.js")} located?`,initial:e$1?.tailwind.config??e},{type:"text",name:"components",message:`Configure the import alias for ${a$1.info("components")}:`,initial:e$1?.aliases.components??b},{type:"text",name:"utils",message:`Configure the import alias for ${a$1.info("utils")}:`,initial:e$1?.aliases.utils??c},{type:"toggle",name:"rsc",message:`Are you using ${a$1.info("React Server Components")}?`,initial:e$1?.rsc??true,active:"yes",inactive:"no"}]),i=r$1.theme??"indigo",n=r$1.neutral??t,o$1=r$1.fontVariant??v;return {config:a.parse({$schema:"https://createui.co/schema.json",tailwind:{config:r$1.tailwindConfig,css:r$1.tailwindCss,baseColor:i,cssVariables:r$1.tailwindCssVariables,prefix:r$1.tailwindPrefix},rsc:r$1.rsc,tsx:r$1.typescript,aliases:{utils:r$1.utils,components:r$1.components,lib:r$1.components.replace(/\/components$/,"lib"),hooks:r$1.components.replace(/\/components$/,"hooks")}}),theme:i,neutral:n,fontVariant:o$1}}async function mn(e,t$1){let r$1=e.tailwind.cssVariables,i=e.iconLibrary??"createui";if(!t$1.defaults){let c=await aa(),a=await pt([{type:t$1.theme?null:"select",name:"theme",message:`Which ${a$1.info("primary")} color would you like to use?`,choices:q.map(l=>({title:l.label,value:l.name})),initial:0},{type:t$1.neutral?null:"select",name:"neutral",message:`Which ${a$1.info("neutral")} color would you like to use?`,choices:r.map(l=>({title:l.name===t?`${l.label} (Default)`:l.label,value:l.name})),initial:0},{type:t$1.fontVariant?null:"select",name:"fontVariant",message:`Which ${a$1.info("font variant")} would you like to use?`,choices:c.map(l=>({title:l.label,value:l.name})),initial:Math.max(0,c.findIndex(l=>l.name===v))}]);t$1.theme=a.theme??t$1.theme??"indigo",t$1.neutral=a.neutral??t$1.neutral??t,t$1.fontVariant=a.fontVariant??t$1.fontVariant??v,r$1=t$1.cssVariables;}let n=t$1.theme??"indigo",o=t$1.neutral??t,s=t$1.fontVariant??v;return {config:a.parse({$schema:e?.$schema,tailwind:{...e?.tailwind,baseColor:n,cssVariables:r$1},rsc:e?.rsc,tsx:e?.tsx,iconLibrary:i,aliases:e?.aliases}),theme:n,neutral:o,fontVariant:s}}async function xr(e){let t={};if(!x.existsSync(e.cwd)||!x.existsSync(E__default.resolve(e.cwd,"package.json")))return t["1"]=true,{errors:t,config:null};if(!x.existsSync(E__default.resolve(e.cwd,"components.json")))return t["3"]=true,{errors:t,config:null};try{let r=await f(e.cwd);return {errors:t,config:r}}catch{o.break(),o.error(`An invalid ${a$1.info("components.json")} file was found at ${a$1.info(e.cwd)}.
49
49
  Before you can add components, you must create a valid ${a$1.info("components.json")} file by running the ${a$1.info("init")} command.`),o.error(`Learn more at ${a$1.info("https://createui.co/docs/components-json")}.`),o.break(),process.exit(1);}}async function vr(e,t){let r=E__default.join(t.resolvedPaths.cwd,"app/page.tsx");if(!(await J__default.stat(r)).isFile())return;let[i]=await S([e],{config:t});if(!i?.meta?.importSpecifier||!i?.meta?.moduleSpecifier)return;let n=`import { ${i?.meta?.importSpecifier} } from "${i.meta.moduleSpecifier}"
50
50
 
51
51
  export default function Page() {
@@ -87,5 +87,5 @@ args = ["${se}", "mcp"]`),o.break(),o.info("3. Restart Codex to load the MCP ser
87
87
  `).map(R=>{if(R.trim().startsWith("import "))return R;let S=R;return S=S.replace(/\b(asChild\s*\?\s*)Slot(\s*:)/g,"$1__SLOT_PLACEHOLDER__$2"),S=S.replace(/\bReact\.ComponentProps<typeof\s+Slot>/g,"React.ComponentProps<typeof __SLOT_PLACEHOLDER__>"),S=S.replace(/\bComponentProps<typeof\s+Slot>/g,"ComponentProps<typeof __SLOT_PLACEHOLDER__>"),S=S.replace(/(<\/?)Slot(\s*\/?>)/g,"$1__SLOT_PLACEHOLDER__$2"),S=S.replace(/\bSlot\b/g,(H,F,W)=>{let ge=W.substring(0,F),Be=(ge.match(/"/g)||[]).length,ni=(ge.match(/'/g)||[]).length;return Be%2!==0||ni%2!==0?H:"__SLOT_PLACEHOLDER__"}),S=S.replace(/__SLOT_PLACEHOLDER__/g,"SlotPrimitive.Slot"),S}).join(`
88
88
  `));let h=Array.from(new Set(n));return {content:c,replacedPackages:h}}async function Mr(e){let t={};if(!x.existsSync(e.cwd)||!x.existsSync(E__default.resolve(e.cwd,"package.json")))return t["1"]=true,{errors:t,config:null};if(!x.existsSync(E__default.resolve(e.cwd,"components.json")))return t["3"]=true,{errors:t,config:null};try{let r=await f(e.cwd);return {errors:t,config:r}}catch{o.break(),o.error(`An invalid ${a$1.info("components.json")} file was found at ${a$1.info(e.cwd)}.
89
89
  Before you can run a migration, you must create a valid ${a$1.info("components.json")} file by running the ${a$1.info("init")} command.`),o.error(`Learn more at ${a$1.info("https://createui.co/docs/components-json")}.`),o.break(),process.exit(1);}}var Wr=[{name:"icons",description:"migrate your ui components to a different icon library."},{name:"radix",description:"migrate to radix-ui."}],Zn=z.object({cwd:z.string(),list:z.boolean(),yes:z.boolean(),migration:z.string().refine(e=>e&&Wr.some(t=>t.name===e),{message:"You must specify a valid migration. Run `createui migrate --list` to see available migrations."}).optional()}),zr=new Command().name("migrate").description("run a migration.").argument("[migration]","the migration to run.").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-l, --list","list all migrations.",false).option("-y, --yes","skip confirmation prompt.",false).action(async(e,t)=>{try{let r=Zn.parse({cwd:E__default.resolve(t.cwd),migration:e,list:t.list,yes:t.yes});if(r.list||!r.migration){o.info("Available migrations:");for(let o$1 of Wr)o.info(`- ${o$1.name}: ${o$1.description}`);return}if(!r.migration)throw new Error("You must specify a migration. Run `createui migrate --list` to see available migrations.");let{errors:i,config:n}=await Mr(r);if(i["1"]||i["3"])throw new Error("No `components.json` file found. Ensure you are at the root of your project.");if(!n)throw new Error("Something went wrong reading your `components.json` file. Please ensure you have a valid `components.json` file.");r.migration==="icons"&&await Dr(n),r.migration==="radix"&&await Vr(n,{yes:r.yes});}catch(r){o.break(),Q(r);}});async function Ur(e){let t={},r={cwd:e.cwd,registryFile:E__default.resolve(e.cwd,e.registryFile),outputDir:E__default.resolve(e.cwd,e.outputDir)};if(!x.existsSync(r.registryFile))return t["13"]=true,{errors:t,resolvePaths:null,config:null};if(!x.existsSync(E__default.resolve(e.cwd,"components.json")))return t["3"]=true,{errors:t,resolvePaths:null,config:null};await x.mkdir(r.outputDir,{recursive:true});try{let i=await f(e.cwd);return {errors:t,config:i,resolvePaths:r}}catch{o.break(),o.error(`An invalid ${a$1.info("components.json")} file was found at ${a$1.info(e.cwd)}.
90
- Before you can build the registry, you must create a valid ${a$1.info("components.json")} file by running the ${a$1.info("init")} command.`),o.break(),process.exit(1);}}var to=z.object({cwd:z.string(),registryFile:z.string(),outputDir:z.string(),verbose:z.boolean().optional().default(false)}),Br=new Command().name("registry:build").description("builds the registry [EXPERIMENTAL]").argument("[registry]","path to registry.json file","./registry.json").option("-o, --output <path>","destination directory for json files","./public/r").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-v, --verbose","verbose output").action(async(e,t)=>{await ro({cwd:E.resolve(t.cwd),registryFile:e,outputDir:t.output,verbose:t.verbose});});async function ro(e){try{let t=to.parse(e),[{errors:r,resolvePaths:i,config:n},o$2]=await Promise.all([Ur(t),m(t.cwd)]);(r["3"]||!n||!o$2)&&(o.error(`A ${a$1.info("components.json")} file is required to build the registry. Run ${a$1.info("createui init")} to create one.`),o.break(),process.exit(1)),(r["13"]||!i)&&(o.error(`We could not find a registry file at ${a$1.info(E.resolve(t.cwd,t.registryFile))}.`),o.break(),process.exit(1));let s=await J.readFile(i.registryFile,"utf-8"),c=o$1.safeParse(JSON.parse(s));c.success||(o.error(`Invalid registry file found at ${a$1.info(i.registryFile)}.`),o.break(),process.exit(1));let a=p("Building registry..."),l=await io(c.data,n,o$2);for(let m of l.items)m.files=m.files?.filter((p,u,h)=>u===h.findIndex(g=>g.path===p.path)),m.dependencies&&(m.dependencies=m.dependencies.filter((p,u,h)=>u===h.findIndex(g=>g===p)));for(let m of l.items){if(!m.files)continue;a.start(`Building ${m.name}...`),m.$schema="https://createui.co/schema/registry-item.json";for(let u of m.files){let h=E.resolve(i.cwd,u.path);try{if(!(await J.stat(h)).isFile())continue;u.content=await J.readFile(h,"utf-8");}catch(g){console.error("Error reading file in registry build:",h,g);continue}}let p=n$1.safeParse(m);if(!p.success){o.error(`Invalid registry item found for ${a$1.info(m.name)}.`);continue}await J.writeFile(E.resolve(i.outputDir,`${p.data.name}.json`),JSON.stringify(p.data,null,2));}if(await J.copyFile(i.registryFile,E.resolve(i.outputDir,"registry.json")),a.succeed("Building registry."),t.verbose){p(`The registry has ${a$1.info(l.items.length.toString())} items:`).succeed();for(let m of l.items){o.log(` - ${m.name} (${a$1.info(m.type)})`);for(let p of m.files??[])o.log(` - ${p.path}`);}}}catch(t){o.break(),Q(t);}}async function io(e,t,r){for(let i of e.items)if(i.files?.length)for(let n of i.files){let o=await D(n.path,t,r);o.files=o.files?.filter(s=>s.path!==n.path),o.files&&i.files.push(...o.files),o.dependencies&&(i.dependencies=i.dependencies?i.dependencies.concat(o.dependencies):o.dependencies);}return e}var Gr=new Command().name("registry:mcp").description("starts the registry MCP server [DEPRECATED]").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async()=>{o.warn(`The ${a$1.info("createui registry:mcp")} command is deprecated. Use the ${a$1.info("createui mcp")} command instead.`),o.break();});var so=z.object({cwd:z.string(),query:z.string().optional(),limit:z.number().optional(),offset:z.number().optional()}),Yr=new Command().name("search").alias("list").description("search items from registries").argument("<registries...>","the registry names or urls to search items from. Names must be prefixed with @.").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-q, --query <query>","query string").option("-l, --limit <number>","maximum number of items to display per registry","100").option("-o, --offset <number>","number of items to skip","0").action(async(e,t)=>{try{let r=so.parse({cwd:E__default.resolve(t.cwd),query:t.query,limit:t.limit?parseInt(t.limit,10):void 0,offset:t.offset?parseInt(t.offset,10):void 0});await L(r.cwd);let i=k({resolvedPaths:{cwd:r.cwd}}),n=G(i),o=E__default.resolve(r.cwd,"components.json");if(x.existsSync(o)){let a$1=await x.readJson(o),l=a.partial().parse(a$1);n=G({...i,...l});}let s=n;try{let a=await f(r.cwd);a&&(s=G(a));}catch{}let c=await a$3(e,{query:r.query,limit:r.limit,offset:r.offset,config:s});console.log(JSON.stringify(c,null,2)),process.exit(0);}catch(r){Q(r);}});var Xr="createui",Pt={claude:{label:"Claude Code",dir:E__default.join(".claude","skills")},gemini:{label:"Gemini CLI",dir:E__default.join(".gemini","skills")},codex:{label:"OpenAI Codex",dir:E__default.join(".agents","skills")},agents:{label:"Agent Skills standard (.agents/skills)",dir:E__default.join(".agents","skills")}},fo=z.object({cwd:z.string(),client:z.enum(["claude","gemini","codex","agents"]),project:z.boolean(),path:z.string().optional(),force:z.boolean(),yes:z.boolean()});function po(){let e=E__default.dirname(fileURLToPath(import.meta.url));return E__default.join(e,"skills",Xr)}var Qr=new Command().name("skill").description("install the Create UI agent skill for your AI coding agent").option("--client <client>",`the agent to install for (${Object.keys(Pt).join(", ")}).`,"claude").option("--project","install into the project instead of your home directory.",false).option("-p, --path <path>","install into an explicit skills directory (for other agents).").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-f, --force","overwrite an existing skill installation.",false).option("-y, --yes","skip the overwrite confirmation prompt.",false).action(async e=>{try{let t=fo.parse({...e}),r=E__default.resolve(t.cwd),i=po();existsSync(i)||(o.error(`Could not find the bundled Create UI skill at ${a$1.info(i)}.`),o.error("Please update createui to the latest version and try again."),process.exit(1));let n,o$1;if(t.path)n=E__default.resolve(r,t.path),o$1="custom path";else {let a=Pt[t.client],l=t.project?r:st.homedir();n=E__default.join(l,a.dir),o$1=`${a.label}, ${t.project?"project":"personal"}`;}let s=E__default.join(n,Xr);if(existsSync(s)&&!t.force&&!t.yes){let{overwrite:a}=await pt({type:"confirm",name:"overwrite",message:`The Create UI skill already exists at ${a$1.info(s)}. Overwrite?`,initial:!1});a||(o.info("Skill installation cancelled."),process.exit(0));}let c=p(`Installing the Create UI skill (${o$1})...`).start();await x.ensureDir(n),await x.copy(i,s,{overwrite:!0,filter:a=>!a.endsWith(".DS_Store")}),c.succeed(`Installed the Create UI skill (${o$1}).`),o.break(),o.success(`Skill installed at ${a$1.info(s)}`),o.break(),t.path?(o.log("Point your AI agent at this folder (or import it from your agent's"),o.log(`rules file, e.g. ${a$1.info("AGENTS.md")} or ${a$1.info(".cursor/rules")}). Then try asking:`)):o.log(`${Pt[t.client].label} loads it automatically \u2014 no restart needed. Try asking:`),o.log(` ${a$1.info('"Add a Create UI login form"')}`),!t.path&&!t.project&&(o.break(),o.log(`Tip: run ${a$1.info(`createui skill --client ${t.client} --project`)} inside a repo to commit the skill for your whole team.`)),o.break();}catch(t){Q(t);}});var go=z.object({cwd:z.string()}),ri=new Command().name("view").description("view items from the registry").argument("<items...>","the item names or URLs to view").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{try{let r=go.parse({cwd:E__default.resolve(t.cwd)});await L(r.cwd);let i=G({}),n=E__default.resolve(r.cwd,"components.json");if(x.existsSync(n)){let c=await x.readJson(n),a$1=a.partial().parse(c);i=G(a$1);}let o=i;try{let c=await f(r.cwd);c&&(o=G(c));}catch{}let s=await S(e,{config:o});console.log(JSON.stringify(s,null,2)),process.exit(0);}catch(r){Q(r);}});var ii={version:"0.5.3"};process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function yo(){let e=new Command().name("createui").description("add items from registries to your project").version(ii.version,"-v, --version","display the version number");e.addCommand(yr).addCommand(Er).addCommand(Ir).addCommand(Nr).addCommand(ri).addCommand(Yr).addCommand(zr).addCommand(Tr).addCommand(jr).addCommand(xt).addCommand(Qr),e.addCommand(Br).addCommand(Gr),e.parse();}yo();//# sourceMappingURL=index.js.map
90
+ Before you can build the registry, you must create a valid ${a$1.info("components.json")} file by running the ${a$1.info("init")} command.`),o.break(),process.exit(1);}}var to=z.object({cwd:z.string(),registryFile:z.string(),outputDir:z.string(),verbose:z.boolean().optional().default(false)}),Br=new Command().name("registry:build").description("builds the registry [EXPERIMENTAL]").argument("[registry]","path to registry.json file","./registry.json").option("-o, --output <path>","destination directory for json files","./public/r").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-v, --verbose","verbose output").action(async(e,t)=>{await ro({cwd:E.resolve(t.cwd),registryFile:e,outputDir:t.output,verbose:t.verbose});});async function ro(e){try{let t=to.parse(e),[{errors:r,resolvePaths:i,config:n},o$2]=await Promise.all([Ur(t),m(t.cwd)]);(r["3"]||!n||!o$2)&&(o.error(`A ${a$1.info("components.json")} file is required to build the registry. Run ${a$1.info("createui init")} to create one.`),o.break(),process.exit(1)),(r["13"]||!i)&&(o.error(`We could not find a registry file at ${a$1.info(E.resolve(t.cwd,t.registryFile))}.`),o.break(),process.exit(1));let s=await J.readFile(i.registryFile,"utf-8"),c=o$1.safeParse(JSON.parse(s));c.success||(o.error(`Invalid registry file found at ${a$1.info(i.registryFile)}.`),o.break(),process.exit(1));let a=p("Building registry..."),l=await io(c.data,n,o$2);for(let m of l.items)m.files=m.files?.filter((p,u,h)=>u===h.findIndex(g=>g.path===p.path)),m.dependencies&&(m.dependencies=m.dependencies.filter((p,u,h)=>u===h.findIndex(g=>g===p)));for(let m of l.items){if(!m.files)continue;a.start(`Building ${m.name}...`),m.$schema="https://createui.co/schema/registry-item.json";for(let u of m.files){let h=E.resolve(i.cwd,u.path);try{if(!(await J.stat(h)).isFile())continue;u.content=await J.readFile(h,"utf-8");}catch(g){console.error("Error reading file in registry build:",h,g);continue}}let p=n$1.safeParse(m);if(!p.success){o.error(`Invalid registry item found for ${a$1.info(m.name)}.`);continue}await J.writeFile(E.resolve(i.outputDir,`${p.data.name}.json`),JSON.stringify(p.data,null,2));}if(await J.copyFile(i.registryFile,E.resolve(i.outputDir,"registry.json")),a.succeed("Building registry."),t.verbose){p(`The registry has ${a$1.info(l.items.length.toString())} items:`).succeed();for(let m of l.items){o.log(` - ${m.name} (${a$1.info(m.type)})`);for(let p of m.files??[])o.log(` - ${p.path}`);}}}catch(t){o.break(),Q(t);}}async function io(e,t,r){for(let i of e.items)if(i.files?.length)for(let n of i.files){let o=await D(n.path,t,r);o.files=o.files?.filter(s=>s.path!==n.path),o.files&&i.files.push(...o.files),o.dependencies&&(i.dependencies=i.dependencies?i.dependencies.concat(o.dependencies):o.dependencies);}return e}var Gr=new Command().name("registry:mcp").description("starts the registry MCP server [DEPRECATED]").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async()=>{o.warn(`The ${a$1.info("createui registry:mcp")} command is deprecated. Use the ${a$1.info("createui mcp")} command instead.`),o.break();});var so=z.object({cwd:z.string(),query:z.string().optional(),limit:z.number().optional(),offset:z.number().optional()}),Yr=new Command().name("search").alias("list").description("search items from registries").argument("<registries...>","the registry names or urls to search items from. Names must be prefixed with @.").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-q, --query <query>","query string").option("-l, --limit <number>","maximum number of items to display per registry","100").option("-o, --offset <number>","number of items to skip","0").action(async(e,t)=>{try{let r=so.parse({cwd:E__default.resolve(t.cwd),query:t.query,limit:t.limit?parseInt(t.limit,10):void 0,offset:t.offset?parseInt(t.offset,10):void 0});await L(r.cwd);let i=k({resolvedPaths:{cwd:r.cwd}}),n=G(i),o=E__default.resolve(r.cwd,"components.json");if(x.existsSync(o)){let a$1=await x.readJson(o),l=a.partial().parse(a$1);n=G({...i,...l});}let s=n;try{let a=await f(r.cwd);a&&(s=G(a));}catch{}let c=await a$3(e,{query:r.query,limit:r.limit,offset:r.offset,config:s});console.log(JSON.stringify(c,null,2)),process.exit(0);}catch(r){Q(r);}});var Xr="createui",Pt={claude:{label:"Claude Code",dir:E__default.join(".claude","skills")},gemini:{label:"Gemini CLI",dir:E__default.join(".gemini","skills")},codex:{label:"OpenAI Codex",dir:E__default.join(".agents","skills")},agents:{label:"Agent Skills standard (.agents/skills)",dir:E__default.join(".agents","skills")}},fo=z.object({cwd:z.string(),client:z.enum(["claude","gemini","codex","agents"]),project:z.boolean(),path:z.string().optional(),force:z.boolean(),yes:z.boolean()});function po(){let e=E__default.dirname(fileURLToPath(import.meta.url));return E__default.join(e,"skills",Xr)}var Qr=new Command().name("skill").description("install the Create UI agent skill for your AI coding agent").option("--client <client>",`the agent to install for (${Object.keys(Pt).join(", ")}).`,"claude").option("--project","install into the project instead of your home directory.",false).option("-p, --path <path>","install into an explicit skills directory (for other agents).").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-f, --force","overwrite an existing skill installation.",false).option("-y, --yes","skip the overwrite confirmation prompt.",false).action(async e=>{try{let t=fo.parse({...e}),r=E__default.resolve(t.cwd),i=po();existsSync(i)||(o.error(`Could not find the bundled Create UI skill at ${a$1.info(i)}.`),o.error("Please update createui to the latest version and try again."),process.exit(1));let n,o$1;if(t.path)n=E__default.resolve(r,t.path),o$1="custom path";else {let a=Pt[t.client],l=t.project?r:st.homedir();n=E__default.join(l,a.dir),o$1=`${a.label}, ${t.project?"project":"personal"}`;}let s=E__default.join(n,Xr);if(existsSync(s)&&!t.force&&!t.yes){let{overwrite:a}=await pt({type:"confirm",name:"overwrite",message:`The Create UI skill already exists at ${a$1.info(s)}. Overwrite?`,initial:!1});a||(o.info("Skill installation cancelled."),process.exit(0));}let c=p(`Installing the Create UI skill (${o$1})...`).start();await x.ensureDir(n),await x.copy(i,s,{overwrite:!0,filter:a=>!a.endsWith(".DS_Store")}),c.succeed(`Installed the Create UI skill (${o$1}).`),o.break(),o.success(`Skill installed at ${a$1.info(s)}`),o.break(),t.path?(o.log("Point your AI agent at this folder (or import it from your agent's"),o.log(`rules file, e.g. ${a$1.info("AGENTS.md")} or ${a$1.info(".cursor/rules")}). Then try asking:`)):o.log(`${Pt[t.client].label} loads it automatically \u2014 no restart needed. Try asking:`),o.log(` ${a$1.info('"Add a Create UI login form"')}`),!t.path&&!t.project&&(o.break(),o.log(`Tip: run ${a$1.info(`createui skill --client ${t.client} --project`)} inside a repo to commit the skill for your whole team.`)),o.break();}catch(t){Q(t);}});var go=z.object({cwd:z.string()}),ri=new Command().name("view").description("view items from the registry").argument("<items...>","the item names or URLs to view").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,t)=>{try{let r=go.parse({cwd:E__default.resolve(t.cwd)});await L(r.cwd);let i=G({}),n=E__default.resolve(r.cwd,"components.json");if(x.existsSync(n)){let c=await x.readJson(n),a$1=a.partial().parse(c);i=G(a$1);}let o=i;try{let c=await f(r.cwd);c&&(o=G(c));}catch{}let s=await S(e,{config:o});console.log(JSON.stringify(s,null,2)),process.exit(0);}catch(r){Q(r);}});var ii={version:"0.5.5"};process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function yo(){let e=new Command().name("createui").description("add items from registries to your project").version(ii.version,"-v, --version","display the version number");e.addCommand(yr).addCommand(Er).addCommand(Ir).addCommand(Nr).addCommand(ri).addCommand(Yr).addCommand(zr).addCommand(Tr).addCommand(jr).addCommand(xt).addCommand(Qr),e.addCommand(Br).addCommand(Gr),e.parse();}yo();//# sourceMappingURL=index.js.map
91
91
  //# sourceMappingURL=index.js.map